KNN算法---c++实现KNN算法
来源:互联网 发布:dede cms 排行榜文章 编辑:程序博客网 时间:2024/06/06 02:10
KNN算法的编程步骤
文件data.txt中的数据为:
1. c++读取txt 文件到数组中的程序
#include<iostream>#include<fstream>using namespace std;#define maxRow 12#define maxCol 2ifstream fin; //定义ifstream 类的对象:finofstream fout; //定义ofstream类的对象:foutint main(){ fin.open("D:/data.txt"); if(!fin ) { cout<<"could not open the file"<<endl; return -1; } fout.open("D:/test.txt"); if(!fout) { cout<<"could not open the file"<<endl; return -1; } float data[maxRow][maxCol]; char labels[maxRow]; //循环把 data.txt 中的内容 输入到数组中 for(int i=0;i<12;i++) { for(int j = 0;j<2;j++) { fin>>data[i][j]; } fin>>labels[i]; } //循环把 数组中的内容输出到文件test.txt中 for(int i=0;i<12;i++) { for(int j = 0;j<2;j++) { fout<<data[i][j]<<" "; } fout<<" "<<labels[i]<<endl; } fin.close(); //关闭文件 data.txt fout.close(); //关闭文件 test.txt return 0; }
上面的程序可以把我们需要的数据读入到程序中数组中,如何把数组数据和标签的数据建立联系呢?我们通过C++中的map容器把数据和标签建立关系。
2. c++中vector、map容器的基本用法
vector相当于一个动态数组。
int main(){ vector<int> a; //vector 创建一维数组 a.push_back(1); // 在容器 a 的尾部插入一个元素 2 a.push_back(2); a.push_back(3); a.pop_back(); //在容器 的尾部删除一个元素 //遍历输出 vector vector<int>::iterator itr; for(itr = a.begin();itr!= a.end();itr++) { cout<< *itr<<"\t"; } return 0;}
vector容器中元素的排序
完整的程序:
#include<iostream>#include<map>#include<vector>#include<stdio.h>#include<cmath>#include<algorithm>#include<fstream>#include<cstdlib>using namespace std;#define maxRow 12#define maxCol 2typedef pair<int,double> PAIR;ifstream fin;class KNN{private: int k; double dataSet[maxRow][maxCol]; char labels[maxRow]; double testData[maxCol]; map<int,double> map_index_dis; map<char,int> map_label; double get_distance(double* dt1,double* dt2);public: KNN(); void get_all_distance(); void get_max_fre_label(); void show(); struct CmpByValue { bool operator() (const PAIR& lhs,const PAIR& rhs) { return lhs.second < rhs.second; } };};void KNN::show(){ map<int,double>::iterator it; for( it=map_index_dis.begin();it!= map_index_dis.end();it++) { cout<<"index = "<<it->first<<" value = "<<it->second<<endl; }}KNN::KNN(){ fin.open("d:\\data.txt", ios::in); if(!fin) { cout<<"can nod load the file"<<endl;; exit(1); } for(int i=0;i<maxRow;i++) { for(int j=0;j<maxCol;j++) { fin>>dataSet[i][j]; } fin>>labels[i]; } cout<<"输入测试数据:"; for(int n=0;n<maxCol;n++) { cin>>testData[n]; } cout<<endl; cout<<"输入 k 的值:"; cin>>k;}double KNN::get_distance(double* dt1,double* dt2){ double sum = 0; for(int i=0;i<maxCol;i++) { sum += pow((dt1[i]-dt2[i]),2); } return (sqrt(sum));}void KNN::get_all_distance(){ double distance; for(int i=0;i<maxRow;i++) { distance = get_distance(dataSet[i],testData); map_index_dis[i] = distance ; }}void KNN::get_max_fre_label(){ vector<pair<int,double>> vec_index_dis( map_index_dis.begin(),map_index_dis.end()); sort(vec_index_dis.begin(), vec_index_dis.end(), CmpByValue()); cout<<"前"<< k<<"个最小数据排序为:"<<endl; for(int i=0;i<k;i++) { cout<<"index = "<<vec_index_dis[i].first<<" the distance= "<<vec_index_dis[i].second <<" the label = "<<labels[vec_index_dis[i].first] <<" the coordinate("<<dataSet[vec_index_dis[i].first][0]<<"," <<dataSet[vec_index_dis[i].first][0]<<")"<<endl; map_label[labels[vec_index_dis[i].first]]++; } map<char,int>::iterator itr = map_label.begin(); int max_freq = 0; char label; while(itr != map_label.end()) { if(itr->second > max_freq) { max_freq = itr->second; label = itr->first; } itr++; } cout<<"数据属于标签:"<<endl; cout<<"label = "<<label<<endl;}int main(){ KNN knn; knn.get_all_distance(); knn.show(); knn.get_max_fre_label(); fin.close(); getchar(); return 0;}结果显示:
参考:
http://blog.csdn.net/lavorange/article/details/16924705
阅读全文
1 0
- KNN算法---c++实现KNN算法
- knn 算法实现
- knn算法matlab实现
- Knn算法实现
- Python实现KNN算法
- KNN算法Python实现
- KNN算法及其实现
- python实现knn算法
- Python实现KNN算法
- KNN算法JAVA实现
- KNN 算法 python 实现
- KNN算法 C++实现
- KNN python 算法实现
- Python实现KNN算法
- knn算法python实现
- knn算法C++实现
- KNN算法C++实现
- KNN算法R实现
- STL源码分析之power算法
- STM32F429 不断重复复位
- Java常用类
- 机器学习笔记(2)---监督学习之正规方程
- HDU5935-Car
- KNN算法---c++实现KNN算法
- Ubuntu14.04下安装TensorFlow(Only CPU)
- 笔记:虚拟机ubuntu搭建android开发环境
- printf()中%n格式说明符
- JSTL 标签大全详解
- 习题5-8 图书管理系统(Borrowers, UVa230)
- [模板]三分法
- POI导出Excel工具
- Linux下kill命令详解