资源简介
使用C++来实现KNN算法,开发环境为visual studio 2012
代码片段和文件信息
// KNN.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
#include
using namespace std;
typedef vector Tuple; //使用vector来存储每一条数据
const int datadim = 4; //数据维数
const int datanum = 140; //样本数据个数
const int k = 10; //
const int cnum = 3; //类别个数
const string filename = “iris.txt“; //样本数据集文件名称
//计算新数据与样本数据的距离
void getAllDist(Tuple &tuple vector &tuples){
for(int i = 0; i < datanum; i++){
double sum = 0;
for(int j = 0; j < datadim; j++){
sum += (tuples[i][j] - tuple[j]) * (tuples[i][j] - tuple[j]);
}
tuples[i][datadim + 1] = sum;
}
}
//根据距离找出最相近的K个样本,并给出类别
void getTargetC(Tuple &tuple vector &tuples){
int c[cnum] = {0}; //用来保存每个类别的个数
for(int i = 0; i < k; i++){
double mindist = 0;
int minsub = -1;
//初始化最小距离及其下标值
for(int j = 0; j < datanum; j++){
if(tuples[j][datadim+2] == 0){
mindist = tuples[j][datadim+1];
minsub = j;
break;
}
}
//遍历寻找最小距离及其下标值
for(int j = 0; j < datanum; j++){
if(tuples[j][datadim+1] < mindist){
mindist = tuples[j][datadim+1];
minsub = j;
}
}
//对应类别个数+1
c[(int (tuples[minsub][datadim])) % cnum] += 1;
tuples[minsub][datadim+2] = 1;//标记此样本,下次不再遍历
}
int max = c[0];
int maxsub = 0;
//找到个数最多的类别
for(int i = 1; i < cnum; i++){
if(c[i] > max){
max = c[i];
maxsub = i;
}
}
cout<<“类别为:“ << (maxsub==0?maxsub + cnum : maxsub) < }
int main()
{
vector tuples;
Tuple target(datanum 0);
cout << “请输入要分类的数据:“ ;
for(int i = 0; i < datadim; i++){
cin >> target[i];
}
ifstream infile(filename);
if(!infile){
cout << “无法打开文件“ << endl;
return 0;
}
for(int i = 0; i < datanum; i++){
Tuple tuple(datanum + 2 0);
string str;
getline(infile str);
istringstream istr(str);
for(int j = 0; j <= datadim; j++){
istr >> tuple[j];
}
tuple.push_back(0);
tuple.push_back(0);
tuples.push_back(tuple);
}
getAllDist(target tuples);
getTargetC(target tuples);
system(“pause“);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-06-16 22:58 KNN\
目录 0 2016-06-13 23:02 KNN\Debug\
文件 140800 2016-06-16 22:45 KNN\Debug\KNN.exe
文件 1118436 2016-06-16 22:45 KNN\Debug\KNN.ilk
文件 1436672 2016-06-16 22:45 KNN\Debug\KNN.pdb
目录 0 2016-06-13 21:21 KNN\ipch\
目录 0 2016-06-13 21:21 KNN\ipch\knn-3f40b13a\
文件 2949120 2016-06-13 21:21 KNN\ipch\knn-3f40b13a\knn-323fc133.ipch
目录 0 2016-06-16 22:53 KNN\KNN\
文件 8454144 2016-06-16 22:58 KNN\KNN.sdf
文件 876 2016-06-13 21:21 KNN\KNN.sln
文件 18944 2016-06-16 22:58 KNN\KNN.v11.suo
目录 0 2016-06-16 22:45 KNN\KNN\Debug\
文件 1366 2016-06-16 22:45 KNN\KNN\Debug\cl.command.1.tlog
文件 10446 2016-06-16 22:45 KNN\KNN\Debug\CL.read.1.tlog
文件 772 2016-06-16 22:45 KNN\KNN\Debug\CL.write.1.tlog
文件 69 2016-06-16 22:45 KNN\KNN\Debug\KNN.lastbuildstate
文件 1369 2016-06-16 22:45 KNN\KNN\Debug\KNN.log
文件 509634 2016-06-16 22:45 KNN\KNN\Debug\KNN.obj
文件 1245184 2016-06-13 22:43 KNN\KNN\Debug\KNN.pch
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
文件 2 2016-06-16 22:45 KNN\KNN\Debug\li
............此处省略32个文件信息
相关资源
- C++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
川公网安备 51152502000135号
评论
共有 条评论