机器学习中的 k-Nearest Neighbours(KNN)算法完整解析
一、导语 — 最简单却最实用的机器学习方法之一
在机器学习算法的世界里,有一类方法既简单易懂,又广泛适用,它就是 k-Nearest Neighbours 算法(简称 KNN)。这种算法无需复杂的训练过程,仅通过测量数据样本之间的距离,就能实现分类或预测,是入门机器学习不可或缺的基础模型。它灵活、直观,连初学者也能快速掌握核心思想。
二、核心概念 — 什么是 KNN?
KNN 是一种典型的监督学习算法,它不依赖假设模型参数,而是通过数据本身来做决策,这种方法被称为 非参数模型。算法的基本想法很简单:
- 给定一个 待预测样本;
- 在训练数据集中找到距离这个样本最近的 k 个邻居;
- 根据这 k 个邻居的类别或数值进行 '多数表决'或平均值 来确定最终结果。
如果用于分类问题(predict 分类标签),则采用最多邻居所属类别的类别作为预测结果;
如果用于回归问题(predict 数值),则取这 k 个邻居的平均值作为预测值。
这使得 KNN 既可用于分类,也可以用于回归问题。
特色在于:
- 算法不需要真正'训练'模型,它直接存储训练数据,并在需要预测时再计算;
- 预测阶段主要依赖距离度量(常用的是欧氏距离),即样本之间的近邻关系。
三、工作机制 — KNN 如何做出判断?
算法执行的核心有两个关键点:
1. 距离计算(Nearest)
KNN 判定'邻近'的核心是距离。通常会用欧氏距离等数学方法衡量两点在特征空间中的接近程度。
2. 最近邻投票(Neighbours)
对于分类任务来说,只要找到 k 个最近邻的样本标签,然后由这些标签进行多数表决。
对于回归任务,则对 k 个邻居的目标值进行平均或加权平均。
通过这种方式,KNN 将数据空间中的局部结构直接用来做出预测判断。
四、算法特点 — 优点与不足一目了然
1. 优点
- 概念直观:不需要复杂的模型推导或参数训练;
- 算法灵活:可应用于分类和回归问题;
- 无需训练阶段:无需建立模型,只需保存训练样本;
- 易于实现:对新手学习算法过程非常友好。
2. 局限性
- 计算量大:每次预测都要计算所有样本的距离,对于大规模数据集性能较差;
- 维度敏感:如果特征之间存在尺度差异,没有做归一化处理,效果可能会受到影响;
- 参数 k 需调优:k 的选择对结果影响很大,过小会受噪声干扰,过大可能降低边界区分能力。
五、超参数调节 — 如何选好 k?
在 KNN 中,最重要的超参数就是 k 值(邻居数量):
- 若 k 取太小(如 k=1),预测容易过拟合;
- 若 k 取太大,则离预测点较远的点也会参与决策,容易造成欠拟合;
- 一个常见的做法是通过交叉验证等方法来选择最佳的 k。
同时,还可以对 邻居的贡献进行权重调整,距离近的邻居权重更大,这也能改善预测效果。

