更新于 2026年7月24日

K近邻#


术语解释#

K近邻(K-Nearest Neighbor, KNN) 是一种经典的有监督学习算法,广泛应用于分类和回归任务。 KNN 的核心思想是“少数服从多数”。当需要对一个新样本进行分类时,算法首先在训练集中找到离该样本最近的 $K$ 个样本点,然后根据这 $K$ 个邻居的类别进行投票,得票最多的类别即为新样本的预测类别。

K近邻原理示意图
K近邻原理示意图

更多与 KNN 算法相关的原理介绍可参见「 5.2 K近邻算法原理:距离度量、决策规则与分类过程」 内容。


出现动机#

KNN 源于“物以类聚”的朴素直觉,即在特征空间中,距离越近的样本点越相似,因此它们更有可能属于同一个类别。同时,KNN 提供一种非参数化的方法,直接利用现有数据的分布特征来进行判别,而不需要像线性回归那样预先假设复杂的数学模型。


优点缺点#

  • 优点:

    • 思想简单直观:算法逻辑非常容易理解,实现起来也相对简单。

    • 无需训练阶段:KNN 是一种“惰性学习(Lazy Learning)”算法,它没有显式的模型训练过程,不需要求解权重参数,只需在预测时进行计算。

    • 灵活性高:可以根据数据特点灵活选择不同的距离度量方式(如 $L_p$ 距离)。

    • 模型复用简单:由于没有复杂的模型参数,通过简单的索引结构(如 kd 树)就可以快速进行最近邻或 K 近邻搜索。

  • 缺点:

    • 计算开销大:虽然没有训练时间,但在预测时需要遍历样本点进行距离计算,当数据规模达到一定量级后,计算效率会显著下降。

    • 存储需求高:模型需要将整个训练数据集持久化保存到内存或磁盘中,以便随时进行距离比对。

    • $K$ 值选取敏感:$K$ 值过小容易导致过拟合(训练误差小但泛化误差大),$K$ 值过大则容易导致欠拟合。

    • 对特征量纲敏感:如果不同特征的取值范围差异过大,距离计算会被数值大的维度主导,因此建模前通常需要进行标准化处理。

    • 在特定任务上表现平庸:例如在垃圾邮件分类等文本任务中,KNN 的表现往往不如专门的朴素贝叶斯算法。

    • 维度灾难:在高维空间中,样本点之间的距离趋于相等,导致“近邻”的辨识度降低,影响分类效果。

阅读 --

5.1 K近邻思想

在前几章中,我们分别介绍了线性回归、逻辑回归及模型的改善与泛化。从这章开始,我们将继续学习下一个新的算法模型——K近邻(K-Nearest Neighbor, KNN)。整个K近邻算法的学习路线如图5-1所示,整体来看掌握阶段一的内容相对简 …

5.2 K近邻原理

在本节内容中,我们首先介绍了K近邻算法的核心原理;然后介绍了K值选取对于K近邻算法的影响;最后介绍了在K近邻中计算各样本间距离时的不同度量方式,即$L_P$距离。

5.3 sklearn接口与示例代码

在这节内容中,我们首先通过一个引例介绍了K近邻分类器的主要思想,接着介绍了K值对算法结果的影响,以及介绍了衡量样本间距离的不同度量方式,最后我们通过开源的sklearn框架介绍了如何建模及使用K近邻分类器,并且同时还总结了sklearn中模 …