资源简介
使用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个文件信息
相关资源
- Cocos2d-x C++版仿《王者之剑》实现(
- 学生信息管理系统基于VC++6.0
- MFC课程设计VC++超市管理系统
- C++ VC++编写通讯录文件保存附报告
- C++程序设计实践教程 (马光志 着)
- c++超市管理系统 数据库作业
- Google-C++编码规范中文版最新整理PDF版
- 航班信息查询系统设计
- (VC++ 数字图像处理典型算法及实现源
- 利用openGL和C++实现光线跟踪绘图的完
- MFC 圆弧算法的实现
- c++读取EXCEL表
- AES 加密 C++源码
- C++MFC日程管理系统
- 百度地图二次开发汇总
- 网络入侵检测系统C++
- C++ High Performance
- C++大作业项目报告
- 哈夫曼压缩和解压c++源码
- MFC公路导航程序
- C++ Concurrency in Action- 2nd Edition(英文第
- 易学C++全套含代码及答案
- VC++ VS2010实现的简单的学生管理系统
- OpenGl C++太阳系小行星运行系统 可切换
- VC++6.0 MFC AGV绘轨迹
- libstdc++-devel-4.1.2-48.el5.x86_64
- C++版本计算机实现,支持小数、负数
-
minibl
ink c++ qt 浏览器 - C++版仿Linux文件管理系统
- c++指纹识别系统
评论
共有 条评论