使用C++来实现KNN算法,开发环境为visual studio 2012
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-06-16 22:58 KNN
目录 0 2016-06-13 23:02 KNNDebug
文件 140800 2016-06-16 22:45 KNNDebugKNN.exe
文件 1118436 2016-06-16 22:45 KNNDebugKNN.ilk
文件 1436672 2016-06-16 22:45 KNNDebugKNN.pdb
目录 0 2016-06-13 21:21 KNNipch
目录 0 2016-06-13 21:21 KNNipchknn-3f40b13a
文件 2949120 2016-06-13 21:21 KNNipchknn-3f40b13aknn-323fc133.ipch
目录 0 2016-06-16 22:53 KNNKNN
文件 8454144 2016-06-16 22:58 KNNKNN.sdf
文件 876 2016-06-13 21:21 KNNKNN.sln
文件 18944 2016-06-16 22:58 KNNKNN.v11.suo
目录 0 2016-06-16 22:45 KNNKNNDebug
文件 1366 2016-06-16 22:45 KNNKNNDebugcl.command.1.tlog
文件 10446 2016-06-16 22:45 KNNKNNDebugCL.read.1.tlog
文件 772 2016-06-16 22:45 KNNKNNDebugCL.write.1.tlog
文件 69 2016-06-16 22:45 KNNKNNDebugKNN.lastbuildstate
文件 1369 2016-06-16 22:45 KNNKNNDebugKNN.log
文件 509634 2016-06-16 22:45 KNNKNNDebugKNN.obj
文件 1245184 2016-06-13 22:43 KNNKNNDebugKNN.pch
文件 2 2016-06-16 22:45 KNNKNNDebuglink-cvtres.read.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink-cvtres.write.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink-rc.read.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink-rc.write.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.12880-cvtres.read.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.12880-cvtres.write.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.12880-rc.read.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.12880-rc.write.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.12880.read.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.12880.write.1.tlog
文件 2 2016-06-16 22:45 KNNKNNDebuglink.2476-cvtres.read.1.tlog
............此处省略32个文件信息
// 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 KNNDebug
文件 140800 2016-06-16 22:45 KNNDebugKNN.exe
文件 1118436 2016-06-16 22:45 KNNDebugKNN.ilk
文件 1436672 2016-06-16 22:45 KNNDebugKNN.pdb
目录 0 2016-06-13 21:21 KNNipch
目录 0 2016-06-13 21:21 KNNipchknn-3f40b13a
文件 2949120 2016-06-13 21:21 KNNipchknn-3f40b13aknn-323fc133.ipch
目录 0 2016-06-16 22:53 KNNKNN
文件 8454144 2016-06-16 22:58 KNNKNN.sdf
文件 876 2016-06-13 21:21 KNNKNN.sln
文件 18944 2016-06-16 22:58 KNNKNN.v11.suo
目录 0 2016-06-16 22:45 KNNKNNDebug
文件 1366 2016-06-16 22:45 KNNKNNDebugcl.command.1.tlog
文件 10446 2016-06-16 22:45 KNNKNNDebugCL.read.1.tlog
文件 772 2016-06-16 22:45 KNNKNNDebugCL.write.1.tlog
文件 69 2016-06-16 22:45 KNNKNNDebugKNN.lastbuildstate
文件 1369 2016-06-16 22:45 KNNKNNDebugKNN.log
文件 509634 2016-06-16 22:45 KNNKNNDebugKNN.obj
文件 1245184 2016-06-13 22:43 KNNKNNDebugKNN.pch
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
文件 2 2016-06-16 22:45 KNNKNNDebugli
............此处省略32个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)