K-近邻算法入门:用邻居投票理解机器学习分类

面向初学者讲解 K-近邻算法的基本思想:什么是 K、为什么要找最近邻、如何用投票完成分类,以及它的优点、局限和常见使用场景。

K-近邻算法,也常写作 KNNk-NN,是机器学习里非常适合入门的一类算法。它的想法很朴素:要判断一个新样本属于哪一类,就看看它周围最像它的几个样本大多属于哪一类。

如果一句话解释 KNN,可以这样说:

近朱者赤,近墨者黑。

比如你刚搬到一个小区,不知道附近哪家早餐店更适合学生。你问了离你最近的 5 个邻居,里面 4 个人都推荐同一家店,那你大概率也会先相信这家店。KNN 做分类时,也是在做类似的事情:找邻居,看多数。

1. 先从一个小例子理解

假设我们要判断一个水果是苹果还是橙子。已知一些水果的特征,比如:

  • 重量
  • 颜色
  • 甜度
  • 表皮是否粗糙

现在来了一个新水果,我们还不知道它是什么。KNN 不会先总结一套复杂规则,而是直接去已知水果里找“最像它”的几个。

如果最像它的 5 个水果中,有 4 个是苹果,1 个是橙子,那么 KNN 就会判断:这个新水果更可能是苹果。

这里的 K,就是“要看几个邻居”。如果 K=5,就是看最近的 5 个样本。

2. 一个简单示意图

下面用一个二维小图来直观理解。假设 A 表示苹果,O 表示橙子,? 是我们想判断的新水果。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
甜度 ↑

  高 |        A       A
     |
     |           ?
     |       A       O
     |
  低 |   O       O
     +--------------------→ 重量
        轻              重

如果我们设 K=3,就看离 ? 最近的 3 个点。假设最近的 3 个邻居里有 2 个 A、1 个 O,那 KNN 就会把 ? 判断为 A,也就是苹果。

这就是 KNN 最核心的过程:找最近的 K 个邻居,然后投票。

3. KNN 的基本步骤

用不带公式的方式看,KNN 的分类流程大概是这样:

  1. 准备一批已经标好类别的数据
  2. 新来一个未知类别的样本
  3. 计算它和所有已知样本的相似程度
  4. 找出最相似的 K 个样本
  5. 看这 K 个样本里哪个类别最多
  6. 把新样本归到这个类别

这也是为什么 KNN 很容易理解。它不像一些模型那样需要先训练出一堆参数,KNN 更像是把训练数据先存起来,真正需要判断时再去查邻居。

这种特点也让 KNN 常被称为一种“惰性学习”方法。这里的“惰性”不是贬义,而是说它不会在训练阶段做太多计算,主要工作被推迟到了预测阶段。

4. 什么叫“最近”

KNN 里的“最近”,不一定只是地图上的距离。它通常表示“特征上更相似”。

比如判断水果时,两个水果如果重量接近、颜色接近、甜度接近,就可以认为距离更近。判断用户兴趣时,如果两个人看过的内容、点击习惯、购买记录很像,也可以认为他们更接近。

所以 KNN 的关键不是“空间位置”,而是你怎么描述一个样本。

常见特征可以是:

  • 商品价格、重量、销量
  • 用户年龄、浏览次数、购买频率
  • 图片的颜色、纹理、形状
  • 文本中某些词出现的情况

特征选得好不好,会直接影响 KNN 的效果。

5. K 值怎么选

K 不是固定答案,而是需要根据数据来选。

如果 K 太小,比如 K=1,模型会非常相信最近的那个样本。这有时很敏感:如果最近的样本刚好是噪声数据,判断就容易错。

如果 K 太大,模型又会看太多邻居,结果可能被远处不太相关的样本影响,分类边界会变得模糊。

可以把它理解成问人意见:

  • 只问 1 个人:容易被个别意见带偏
  • 问太多人:可能把不熟悉情况的人也算进来了
  • 问附近几位最相关的人:通常更稳

在二分类问题里,很多时候会选奇数 K,比如 357,这样可以减少投票平局的情况。

6. KNN 不只可以做分类

KNN 最常见的用途是分类,比如判断:

  • 邮件是不是垃圾邮件
  • 图片里是猫还是狗
  • 用户是否可能流失
  • 一条评论是正面还是负面

但它也可以做回归。回归可以理解为预测一个数值。

比如我们想估计一套房子的价格,可以找出和它最相似的几套房子,然后参考这些房子的价格。不是投票选类别,而是把邻居的数值做一个综合估计。

简单说:

  • 分类:邻居投票,选类别
  • 回归:参考邻居数值,估结果

7. 加权 KNN:近一点的邻居更重要

普通 KNN 会让每个邻居的投票权差不多。但现实中,离得更近的邻居通常更可信。

比如有 5 个邻居,其中 1 个和新样本几乎一模一样,另外 4 个只是稍微有点像。完全平均投票可能不太合理。

所以有一种改进思路叫“加权 KNN”:越近的邻居,影响越大;越远的邻居,影响越小。

这很好理解。你买手机时,和你预算、用途、品牌偏好都很接近的人,他的建议往往比泛泛而谈的建议更有参考价值。

8. KNN 的优点

KNN 的优点非常适合初学者理解:

  • 思路直观,容易解释
  • 不需要复杂训练过程
  • 可以用于分类,也可以用于回归
  • 对一些边界不规则的问题比较灵活
  • 新增数据时通常比较方便

如果你刚开始学机器学习,KNN 是一个很好的起点。它能帮助你理解“样本”“特征”“距离”“分类”“训练数据”这些基本概念。

9. KNN 的局限

KNN 也有明显短板。

第一,预测时可能比较慢。因为每来一个新样本,都要和很多已有样本比较。如果数据量很大,计算成本会升高。

第二,它很依赖特征尺度。比如一个特征是“收入”,动不动几千几万;另一个特征是“年龄”,通常几十。如果不做处理,收入这个特征可能会过度影响距离判断。

所以在使用 KNN 前,经常需要做数据标准化,让不同特征在比较时更公平。

第三,它容易受无关特征影响。如果你判断水果类别,却把“购买日期”这种无关信息也放进去,模型可能会被干扰。

第四,它对局部数据分布敏感。如果某一类样本特别多,投票时可能更容易压过其他类别。

10. 容易和 K-平均算法混淆

KNNK-平均算法 名字里都有 K,但它们不是一回事。

KNN 是监督学习,通常使用已经标好类别的数据来判断新样本。

K-平均算法更常用于聚类,也就是在没有明确标签时,把数据自动分成几组。

可以简单记:

  • KNN:看邻居,做分类或回归
  • K-平均:找中心,把数据分组

11. 什么时候适合用 KNN

KNN 适合这些场景:

  • 数据量不太大
  • 特征比较容易表示成数值
  • 样本之间的“相似程度”比较有意义
  • 需要一个容易解释的基线方法
  • 想快速验证一个分类思路是否可行

如果数据量巨大、特征非常多、预测速度要求很高,KNN 可能就不是最合适的选择,或者需要配合更高效的近邻搜索方法。

12. 初学者应该记住什么

学 KNN 时,不需要一开始就钻进复杂公式。先记住这几个直觉就够了:

  1. KNN 用“邻居”来判断新样本
  2. K 表示看几个最近邻居
  3. 分类时靠投票,回归时参考邻居数值
  4. 特征选择和数据标准化很重要
  5. K 太小容易受噪声影响,太大又可能变得迟钝

KNN 的价值不只是它本身能解决一些问题,更在于它把机器学习里几个基础观念讲得很清楚:数据如何表示、相似度如何衡量、预测如何从已有样本中产生。

只要理解了“找相似样本,再根据邻居做判断”这件事,就已经抓住了 KNN 的核心。

相关链接

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计