机器学习 · 互动实验室
KNN 近邻法
调整 K,看同一个新水果怎样改变分类
01放入新点02寻找近邻03邻居投票
看这里
苹果橙子新水果 · 可拖动
文字版:KNN 近邻法在做什么
KNN(K 近邻)是最好理解的分类方法:要判断一个新样本属于哪一类,就找出离它最近的 K 个已知样本,看它们里哪一类占多数。它不训练任何参数,所有判断都在提问的那一刻现算——这既是它的优点,也决定了它所有的毛病。
画面上正在发生什么
图上每个点是一个已知的水果,横轴是甜度,纵轴是重量。橙色的新水果可以拖动,页面会实时找出离它最近的 K 个邻居并数票。把 K 从 3 调到 25,你会看到同一个位置的判定可能直接反过来:K 小的时候是几个最近的邻居说了算,K 大的时候是整片区域的多数说了算。
打开「显示分类区域」,整张图会被涂成两种颜色,那是把每一个位置都问一遍得到的结果。K 小的时候边界犬牙交错、到处是小色块,K 大的时候边界变得平滑。这就是 KNN 里最直接的一组权衡。
什么时候它会骗你
- K 太小,一个噪声点就能改判。K 取 1 时,新样本的类别完全由离它最近的那一个样本决定。如果那个样本本身标错了、或者只是个异常值,判定就跟着错。把 K 调到 1 再把新水果拖到两类交界处,能直接看到这种翻来覆去。
- 量纲不统一,距离就被大数值的特征吃掉。甜度的范围是 0 到 10,重量是 100 到 300 克。关掉「放到同一尺度」,重量上差 50 克产生的距离,会远远盖过甜度上差 5 分——于是 KNN 几乎只按重量判断。这不是算法出错,是距离的定义被量纲带偏了。标准化必须只用训练集的均值和标准差,否则就成了数据泄漏。
- 维度一多,「最近」就失去意义。特征增加到几十个以上时,所有点两两之间的距离会趋于接近,最近的邻居和最远的邻居差别越来越小,投票也就越来越没有信息量。KNN 在高维稀疏数据上通常不是好选择。
常见问题
- K 该取多少?
- 没有万能值,应在训练数据内通过合适的交叉验证选择。K 不能超过每次拟合可用的训练样本数。二分类等权投票可用奇数 K 避免票数相同,但多分类或加权投票不能靠奇数保证没有平票。K 增大通常使边界更平滑,也可能掩盖少数类的局部结构。
- KNN 需要训练吗?
- 标准 KNN 通常不通过迭代拟合权重,但仍需保存训练样本,并可能建立 KD 树或 Ball 树索引。本页用逐点距离计算找邻居;实际实现不一定每次都遍历全部样本,预测成本取决于索引、维度和数据量。
- KNN 为什么常需要特征标准化?
- 当各特征单位或尺度差异很大时,距离可能被某个特征主导。缩放能帮助按预期比较各维度。并非所有任务都必须标准化:已有合理距离定义或特征权重时应按任务判断,缩放参数只从训练数据估计。
参考资料
本页为教学合成数据,甜度与重量为构造值;邻居、票数与自测比例均由页面按当前参数实时计算。