当前位置:   article > 正文

K近邻算法 代码实现(C++)_k近邻分类算法c++代码

k近邻分类算法c++代码

k近邻算法通过测量不同特征值之间的距离来进行分类。假设存在一个样本集,样本集中每一个样本都存在一个标签代表样本所属的类别,当给定一个没有标签的新样本时,如何使用k近邻算法来预测新样本的类别呢?

k近邻算法会使用新样本的特征和数据集中每一个样本的特征对比,选出特征最相似的K个样本。然后,判断这K个样本中什么类别占比最高,就取该类别作为新样本的类别。

这个算法比较简单,直接上代码

  1. 95 float cal_distance(vector<float> a, vector<float> b)
  2. 96 {
  3. 97 float sum;
  4. 98 if (a.size() != b.size())
  5. 99 {
  6. 100return -1;
  7. 101 }
  8. 102
  9. 103 for (int i = 0; i < a.size(); i++)
  10. 104 {
  11. 105sum += (a[i] - b[i]) * (a[i] - b[i]);
  12. 106 }
  13. 107 return sqrt(sum);
  14. 108 }
  15. 109
  16. 110 //训练的过程就是将样本全部读取,如果想要提高查找效率,可以构造kd树
  17. 111 //这里不实现kd树,直接使用向量来存储
  18. 112 bool train(string file_name)
  19. 113 {
  20. 114 //读取样本数据到向量data
  21. 115 if (!read_data(file_name))
  22. 116 {
  23. 117 ┊ cout << "read sample falied." << endl;
  24. 118return false;
  25. 119 }
  26. 120 }
  27. 121
  28. 122 int predict(vector<float> t)
  29. 123 {
  30. 124 vector < pair<float, int> > top_K;
  31. 125 top_K.resize(k, make_pair(0, 0));
  32. 126
  33. 127 for (int i = 0; i < n; i++)
  34. 128 {
  35. 129 ┊ float dis = cal_distance(t, data[i]);
  36. 130 ┊ insert_K(dis, data[i][n-1], top_K);
  37. 131 }
  38. 132
  39. 133 //将K最相似的K个样本所属的类别打印出来
  40. 134 for (int i = 0; i < k; i++)
  41. 135 {
  42. 136 ┊ cout << top_K[i].second << endl;
  43. 137 }
  44. 138 }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/801276
推荐阅读
相关标签
  

闽ICP备14008679号