亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++單刷《機器學習實戰》——kNN算法完整代碼

2019-11-06 07:13:44
字體:
來源:轉載
供稿:網友
#include <iostream>#include <cmath>#include<map>#include<string>#include<sstream>#include<fstream>#include<vector>#include<algorithm>using namespace std;double group[4][2] = { { 1.0, 1.1 }, { 1.0, 1.0 }, { 0, 0 }, { 0, 0.1 } };string labels[4] = { "A", "A", "B", "B" };struct man{double fly;double game;double icecream;string eval;};void sort(double* data, int n, int k)          //冒泡排序,采用冒泡排序的目的是以最快速度找到最大的前k個值//data:要排序的數組,n:數組大小,k:要找到的前k個值{int temp;for (int i = 0; i < k; i++){for (int j = i+1; j < n; j++){if (*(data + i) > *(data + j)){temp = *(data + i);*(data + i) = *(data + j);*(data + j) = temp;}}}}void sortIndex(double* data, int* sorted_index2, int n)//排序,并返回排序后的原數組索引//data:原始數組,sorted_index2:排序后的原數組索引,n:數組大小{int index = 0;int* sorted_index = new int[n];for (int i = 0; i < n; i++){index = 0;for (int j = 0; j < n; j++){if (data[i] > data[j])index++;else if (data[i] == data[j] && i > j)index++;}sorted_index[i] = index;}for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (i == sorted_index[j])sorted_index2[i] = j;}}delete sorted_index;}vector<man> readFile(const char* file_name)//從文件中讀取數據并存入結構體數組{string data_str;vector<man> data_list;fstream file;file.open(file_name,ios::in);if (file.is_open()){while (getline(file, data_str)){man data;istringstream record(data_str);record >> data.fly;record >> data.game;record >> data.icecream;record >> data.eval;data_list.push_back(data);}} return data_list;}void data2matrix(vector<man> data_list, double* dataSet, string labels[], double& length_fly, double& length_game, double& length_icecream)//將結構體數組轉化為二維矩陣,并歸一化//data_list:結構體數組,dataSet:轉化為的二維矩陣,labels:標簽數組,length_fly....:樣本特征最大值與最小值之差{int index = 0;auto it = data_list.begin();double min_fly = it->fly;double max_fly = it->fly;double min_game = it->game;double max_game = it->game;double min_icecream = it->icecream;double max_icecream = it->icecream;for (; it != data_list.end(); ++it){if (min_fly > it->fly)min_fly = it->fly;if (max_fly < it->fly)max_fly = it->fly;if (min_game > it->game)min_game = it->game;if (max_game < it->game)max_game = it->game;if (min_icecream > it->icecream)min_icecream = it->icecream;if (max_icecream < it->icecream)max_icecream = it->icecream;}    length_fly = max_fly - min_fly;length_game = max_game - min_game;length_icecream = max_icecream - min_icecream;for (auto it = data_list.begin(); it != data_list.end(); ++it){*(dataSet + index * 3) = it->fly / length_fly;*(dataSet + index * 3 + 1) = it->game / length_game;*(dataSet + index * 3 + 2) = it->icecream / length_icecream;labels[index] = it->eval;++index;}}void data2matrix2(man person, double* data,double length_fly, double length_game, double length_icecream){data[0] = person.fly / length_fly;data[1] = person.game / length_game;data[2] = person.icecream / length_icecream;}string classify(double* inX,double* dataSet,string labels[],int k,int size,int dataSetSize)//kNN分類算法//inX:未分類的輸入數據,dataSet:樣本集,labels:標簽,k:k值,size:數據的特征數量,dataSetSize:樣本集數量  {double sum = 0;double* diff_array = new double[size];double* diff_all = new double[dataSetSize];int* sorted_index = new int[dataSetSize];string label;map<string, int> label_count;for (int i = 0; i < dataSetSize; i++)//計算當前點與各樣本點的歐式距離,并存入數組diff_array{sum = 0;for (int j = 0; j < size; j++){diff_array[j] = *(inX + j) - *(dataSet + i*size + j);sum += (diff_array[j] * diff_array[j]);}diff_all[i] = sqrt(sum);}//排序,并返回排序后的原數組索引sortIndex(diff_all, sorted_index, dataSetSize);for (int i = 0; i < k; i++)//計算前k個索引對應標簽的出現次數,存入關聯容器label_count{label = labels[sorted_index[i]];++label_count[label];}//找出出現次數最多的標簽,返回auto map_it = label_count.begin();label = map_it->first;int max_count = map_it->second;for (; map_it != label_count.end(); map_it++){if (max_count < map_it->second){max_count = map_it->second;label = map_it->first;}}delete diff_array;delete diff_all;delete sorted_index;return label;}int main(){/*string result;string line;double point[2];cout << "please input the coodinate of the pixel" << endl;while (getline(cin, line)){istringstream record(line);record >> point[0];record >> point[1];result = classify(point, &group[0][0], labels, 3, 2, 4);cout << "the result is: " << result << endl;cout << "please input the coodinate of the pixel" << endl;}*/vector<man> data_list;data_list = readFile("datingTestSet.txt");int size = 3;int dataSetSize = data_list.size();double* dataSet = new double[dataSetSize*3];string* labels = new string[dataSetSize];double length_fly = 0;double length_game = 0;double length_icecream = 0;data2matrix(data_list, dataSet, labels, length_fly, length_game, length_icecream);//測試,ratio為測試集占數據集總量double ratio = 0.1;string result;int error_count = 0;int num_test = dataSetSize * ratio;string label;for (int i = 0; i < num_test; i++){result = classify(dataSet + i * 3, dataSet + num_test * 3, labels + num_test, 3, 3, dataSetSize - num_test);cout <<i<<"times  "<<"The classifier came back with: "<< result <<",the real answer is "<<labels[i]<< endl;label = labels[i];if (result != label){++error_count;}}double err_rate = (double)error_count / (double)num_test;cout << "The total error rate is: " << err_rate << endl;man person;double* data = new double[3];string line;cout << "Please input the time of fly,game and the consume of icrcreame" << endl;while (getline(cin, line)){cout << "Please input the time of fly,game and the consume of icrcreame" << endl;istringstream record(line);record >> person.fly;record >> person.game;record >> person.icecream;data2matrix2(person, data, length_fly, length_game, length_icecream);result = classify(data, dataSet, labels, 3, 3, dataSetSize);person.eval = result;cout << result << endl;}delete dataSet;delete data;return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本大道香蕉久在线播放29| 国产日韩专区在线| 国产精品夜间视频香蕉| 日韩天堂在线视频| 色婷婷av一区二区三区在线观看| 日韩电影免费观看在线| 国产一区二区三区视频免费| 精品久久久视频| 久久在精品线影院精品国产| 日韩高清电影好看的电视剧电影| 欧美日韩一区二区免费视频| 成人免费大片黄在线播放| 国产精品亚洲视频在线观看| 永久免费毛片在线播放不卡| 亚洲欧美日韩一区二区三区在线| 久久最新资源网| 国产精品自拍偷拍| 欧美一级片久久久久久久| 国产精品444| 亚洲国产福利在线| www高清在线视频日韩欧美| 亚洲色图日韩av| 91久久久久久久一区二区| 亚洲欧美日本伦理| 欧美极品少妇与黑人| 91麻豆桃色免费看| 国产日本欧美在线观看| 国产网站欧美日韩免费精品在线观看| 亚洲国产一区自拍| 欧美猛少妇色xxxxx| 91精品视频播放| 日韩精品中文字幕在线播放| 亚洲在线免费看| 国产日韩欧美91| 日韩亚洲第一页| 亚洲缚视频在线观看| 中文字幕亚洲色图| 亚洲国产日韩精品在线| 国产精品入口免费视频一| 在线免费看av不卡| 欧美日韩国产精品一区二区三区四区| 亚洲欧美国产va在线影院| 亚洲天堂男人天堂| 欧美精品久久一区二区| 亚洲精品久久久一区二区三区| 成人黄色影片在线| 亚洲精品久久久久久久久| 亚洲欧美国产精品专区久久| 国产一区二中文字幕在线看| 欧美精品激情在线| 亚洲国产精品久久久| 欧美精品18videos性欧| 久久久久久网站| 亚洲国产高清高潮精品美女| www.日韩免费| 国产成人精品999| 国产精品成av人在线视午夜片| 久久久国产精品亚洲一区| 久久久久久伊人| 在线亚洲国产精品网| 2024亚洲男人天堂| 欧美精品在线视频观看| 国产精品久久久久久久久久久久久| 在线观看日韩www视频免费| 成年无码av片在线| 亚洲精品视频免费在线观看| 欧美国产一区二区三区| 日韩欧美亚洲范冰冰与中字| 日韩中文在线视频| 国产中文欧美精品| 久久久国产一区二区| 欧美日韩性视频在线| 亚洲午夜精品视频| 久久久国产精品x99av| 色播久久人人爽人人爽人人片视av| 欧美日韩国产影院| 欧美孕妇性xx| 欧美日韩裸体免费视频| 日韩欧美国产视频| 成人国产精品免费视频| 欧美夫妻性生活xx| 日韩成人在线免费观看| 欧美另类精品xxxx孕妇| 在线视频国产日韩| 一本一本久久a久久精品牛牛影视| 日韩毛片在线看| 欧美视频在线免费看| 欧美激情videos| 欧美自拍视频在线观看| 一区二区三区黄色| 欧美日本黄视频| 日韩av在线免费看| 久久精品国产久精国产思思| 2021国产精品视频| 欧美日韩一区二区免费视频| 久久夜色精品国产亚洲aⅴ| 亚洲人精品午夜在线观看| 高清欧美性猛交xxxx| 亚洲成人久久久| 亚洲精品在线91| 国产精品亚洲美女av网站| 国产一区二区成人| 成人午夜小视频| 亚洲日韩欧美视频| 国产欧美一区二区三区视频| 91精品在线一区| 欧美日韩国产123| 亚洲成人xxx| 欧美精品www| 久久国产精品久久久久久| 色综合影院在线| 国产欧美精品xxxx另类| 国产精品综合久久久| 国产精品亚洲自拍| 亚洲男人天堂手机在线| 国产91在线播放九色快色| 国产精品一区二区久久久| 91理论片午午论夜理片久久| 亚洲成人教育av| 日韩视频中文字幕| 亚洲第一区在线观看| 成人免费网站在线| 日韩av在线网| 国产一区二区在线播放| 亚洲精品按摩视频| 美女久久久久久久| 精品国产91乱高清在线观看| 精品久久久久久久久久| 国产精品成人aaaaa网站| 亚洲欧美三级伦理| 久久这里只有精品视频首页| 国产精品久久久久国产a级| 国内揄拍国内精品少妇国语| 国产精品久久久久久久久久久久| 亚洲香蕉av在线一区二区三区| 九九精品在线播放| 亚洲男人天堂手机在线| 久久精品视频va| 欧美又大又硬又粗bbbbb| 91精品国产99久久久久久| 9.1国产丝袜在线观看| 136fldh精品导航福利| 91福利视频网| 亚洲人成网站免费播放| 亚洲综合大片69999| 在线看片第一页欧美| 91精品久久久久久久久久久久久| 中文字幕在线观看日韩| 亚洲福利视频网| 久久精品视频中文字幕| 日韩精品免费一线在线观看| 九九精品在线播放| 久久精品一本久久99精品| 日韩欧美有码在线| 国产亚洲精品一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 懂色av影视一区二区三区| 精品久久久久久电影| 亚洲第一免费网站| 尤物yw午夜国产精品视频明星| 日韩欧美第一页| 91成人免费观看网站| 97国产一区二区精品久久呦| 成人亚洲欧美一区二区三区|