当前位置: 首页 > news >正文

KNN(k 近邻)算法详解:距离度量、k 值选择、决策边界与 C++ 实现一文搞懂(机器学习入门)

KNN(k-Nearest Neighbors,k 近邻)是机器学习里最朴素、也最好懂的有监督分类算法。它有一个很特别的标签——懒惰学习(lazy learning):它没有"训练"过程,不拟合任何模型,只是把训练数据原样存下来,等来了一个新点,才现场开算。一句话原理:看你周围最近的 k 个邻居是什么类,你就是什么类。(我不慌-----成长杂货铺:https://wobuhuang.com)

一、距离度量:欧氏距离与曼哈顿距离

要找"最近"的邻居,先得定义"近"。最常用的是欧氏距离(两点直线距离):在二维下就是sqrt((x1-x2)^2 + (y1-y2)^2)。另一种是曼哈顿距离(各坐标差的绝对值之和),像在棋盘格里只能横竖走。

这里有个工程上的坑:量纲不同要先归一化。如果一个特征是"年龄"(0~100),另一个是"年收入"(几万到几十万),不归一化的话,距离会被大尺度特征完全主导,小尺度特征形同虚设。

二、投票分类:四步流程

  1. 算距离:算新点到每一个已知训练点的距离。
  2. 排序取 k:按距离从近到远排序,挑出最近的 k 个邻居。
  3. 投票:这 k 个邻居里,数一数哪个类别票最多。
  4. 定类:把新点归为票最多的那一类。

在码路星球的动画里,灰色新点会向第 1 近、第 2 近……一直到第 k 个邻居逐条连线,连到哪个颜色多,新点就染成哪个色,非常直观。

三、k 值与过拟合 / 欠拟合

k 是 KNN 唯一的关键超参数

  • k 太小(如 k=1):容易被一个噪声点带偏,决策边界很"毛糙",是典型的过拟合
  • k 太大:把远处不相关的点也算进来,边界变模糊,甚至被多数类淹没,倾向欠拟合

实战中常用交叉验证在一个范围里挑最优 k;二分类时记得取奇数,避免出现票数相同的平票。

四、决策边界

把平面上每个位置都用 KNN 跑一遍,相邻预测类别的交界就是决策边界。k 越小边界越曲折破碎(对噪声敏感),k 越大边界越平滑。理解了边界,就理解了 k 为什么是在"拟合训练点"和"抵抗噪声"之间权衡。

五、完整 C++ 实现(带注释)

intknn_classify(Point q,vector<Point>&train,intk){for(auto&p:train)// ① 算距离p.dist=distance(q,p);sort(train,by_dist);// ② 按距离排序map<int,int>votes;// ③ 取前 k 个投票for(inti=0;i<k;i++)votes[train[i].label]++;returnargmax(votes);// ④ 票最多的类}

代码骨架就这四步:算距离、排序、对前 k 个邻居投票、返回票最多的类(argmax)。距离函数可按需替换为欧氏或曼哈顿。

六、复杂度:训练 O(1),预测 O(n),KD-Tree 加速

KNN 的复杂度特征很鲜明:训练 O(1)(只存数据),单次预测 O(n·d)(要和全部 n 个训练点比,d 是维度),空间 O(n·d)(存全部训练点)。数据量大时预测很慢,工程上用KD-Tree / 球树(ball tree)来加速近邻查找,把平均查询从 O(n) 降下来。另外要注意维度灾难:维度很高时,所有点的距离趋于接近,距离失去区分度,KNN 会失效。

小结

KNN = 算距离 + 取最近 k 个 + 投票。它简单、无需训练、可解释性强,适合入门理解分类;但预测慢、对量纲和维度敏感。想把这四步看成动画一步步走完,欢迎到码路星球亲手拖动新点观察决策变化。(我不慌-----成长杂货铺:https://wobuhuang.com)

KNN;k近邻;机器学习;分类算法;距离度量;k值选择;决策边界;C++实现;监督学习;算法可视化

http://www.gsyq.cn/news/1516054.html

相关文章:

  • 2026年合肥注册公司服务商怎么选?本地化财税机构能力解析与真实案例参考 - 优质品牌商家
  • 【郴州同城黄金回收服务 | 万金汇黄金回收】 - 润富黄金回收
  • 封神榜风格横版游戏源码:含角色选择、登录界面与基础场景管理(Cocos2d-x 2.x/3.x)
  • SpringBoot项目里调用老旧C# WebService接口,我是怎么用HttpClientBuilder一步步搞定的?
  • 自适应系统中的运行时伦理挑战与技术应对
  • 【郴州同城黄金回收服务 | 鑫诚黄金回收】 - 润富黄金回收
  • HLS性能翻倍的秘密:深入解读`array_partition`、`pipeline`与`dataflow`三大优化指令(附Vitis HLS 2023.2实测数据)
  • 告别版本兼容烦恼:用Python mikeio 1.x新版搞定ERA5风场转MIKE21 dfs2文件
  • 【郴州同城黄金回收服务 | 鑫盛鑫诚万金汇联合回收指南】 - 润富黄金回收
  • 别再死记硬背了!用这个可视化工具,5分钟搞懂‘图序列’判定定理
  • 别再让3D模型拖慢你的网页了!Three.js + Blender纹理烘焙实战避坑指南
  • 新服务器买完 24 小时内要做什么?安全加固清单
  • 【郴州同城黄金回收,鑫盛黄金回收】 - 润富黄金回收
  • 重庆及周边二手接触器断路器回收服务商实测对比评测 - 优质品牌商家
  • 滑动窗口算法详细讲解
  • 怀化全域黄金回收行情解析 + 门店服务篇 - 润富黄金回收
  • 电脑自动干活不用值守!OpenClaw 本地部署完整实操流程
  • 2026杭州西湖区,莫奈包包配件缺失对回收价格的影响 - 逸程
  • 避开这些坑,你的比赛代码也能快10倍:华为软挑赛Python性能优化与C++迁移教训
  • 四川激光整平机浇筑混凝土实测评测:四大服务商工艺对比 - 优质品牌商家
  • 2026大连黄金回收实时报价!大盘价+全套首饰加价攻略 - 逸程
  • 2026严选:福田区梅林下水道疏通交付准时率评测 居顺联管道疏通综合实力稳居首位 - 居顺联家政疏通
  • 3分钟告别百度网盘提取码烦恼:智能获取工具让你的下载效率翻倍
  • Python机器学习数据读取实战:稳准快接入CSV/Parquet/JSONL/数据库
  • Anthropic模型路由层蒸发:从模型ID到执行单元的架构跃迁
  • 唐山报名 CPPM 注册采购经理哪家靠谱?机构选择避坑指南 - 众智商学院课程中心
  • 2026年|大模型保姆级论文润色指令+4款主流降AI工具测评,安全毕业必看 - 降AI实验室
  • 从GLIP演示平台到产品原型:我是如何用Gradio在一天内搞定大模型POC的
  • 从“黑箱”到“白盒”:用Python+Pandas玩转CMAQ/CMIP6模型输出数据与可视化
  • 2026年6月广州海参回收诚信商家推荐:鲍参翅肚/高档干参即食参高价变现与专业评估指南! - 企业推荐官【官方】