K近邻算法 代码实现(C++)

本文深入探讨了K近邻算法的工作原理,展示了如何通过测量不同特征值之间的距离来进行分类。详细解释了算法流程,包括计算距离、选择最近邻居以及确定新样本类别的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

 95 float cal_distance(vector<float> a, vector<float> b)
 96 {
 97     float sum;
 98     if (a.size() != b.size()) 
 99     {
100     ┊   return -1;                                                                                                                                                                        
101     }
102  
103     for (int i = 0; i < a.size(); i++)
104     {
105     ┊   sum += (a[i] - b[i]) * (a[i] - b[i]);
106     }
107     return sqrt(sum);
108 }
109  
110 //训练的过程就是将样本全部读取,如果想要提高查找效率,可以构造kd树
111 //这里不实现kd树,直接使用向量来存储
112 bool train(string file_name)
113 {
114     //读取样本数据到向量data中
115     if (!read_data(file_name))
116     {
117     ┊   cout << "read sample falied." << endl;
118     ┊   return false;
119     }
120 }
121  
122 int predict(vector<float> t)
123 {
124     vector < pair<float, int> > top_K;
125     top_K.resize(k, make_pair(0, 0));
126  
127     for (int i = 0; i < n; i++)
128     {
129     ┊   float dis = cal_distance(t, data[i]);
130     ┊   insert_K(dis, data[i][n-1], top_K);
131     }
132  
133     //将K最相似的K个样本所属的类别打印出来
134     for (int i = 0; i < k; i++)
135     {
136     ┊   cout << top_K[i].second << endl;
137     }
138 }
                                                                                             
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值