核心要点

  • 说清惰性学习:没有显式训练,预测时才在训练集中找最近的 K 个样本。

  • 分类用多数投票、回归用邻居均值;K 由交叉验证选,奇数避免平票。

  • 强调推理代价高(需算到所有样本的距离)和对特征量纲敏感,须标准化

  • 点出维度灾难:高维下距离趋同、近邻失去意义,需先降维或特征选择。

标准回答

原理

KNN 是基于实例的惰性学习算法:训练阶段只存储数据,不学参数。预测时,对新样本计算它到所有训练样本的距离(常用欧氏/曼哈顿/余弦),取最近的 K 个邻居——分类按多数投票,回归取均值(可按距离加权)。决策边界由数据局部分布隐式决定,是典型的非参数方法。

优点

  • 简单直观、无训练成本、天然支持多分类;
  • 非线性、不假设数据分布,对边界复杂的数据也有效。

缺点

  • 推理慢、内存大:每次预测都要与全量样本比距离,O(N) 复杂度,大数据下需 KD-Tree / Ball-Tree / 近似最近邻加速;
  • 对特征量纲敏感,必须标准化;
  • 受维度灾难影响严重:高维空间中样本稀疏、距离趋于相等,「最近」失去判别力;
  • K 太小易受噪声影响,太大则边界过平滑、欠拟合。

常见误区

⚠️ 常见踩坑

别说「KNN 有训练过程并学到了模型参数」——它是惰性的,开销全在推理阶段;也别忘了不标准化时大尺度特征会主导距离。

追问

追问 1如何选择 K 值?

通过交叉验证在验证集上扫描不同 K 取误差最小者。K 小方差大(受噪声/离群点影响)、K 大偏差大(边界过平滑)。二分类常取奇数避免平票,经验上可从 sqrt(N) 附近开始试。

追问 2为什么 KNN 在高维下表现差?

维度灾难:维度升高时样本间距离相互接近、对比度下降,最近邻与最远邻差异变小,「近邻」不再可靠;同时达到同样密度所需样本量指数增长。应对:PCA 等降维、特征选择或换用对高维更鲁棒的模型。

追问 3怎样加速 KNN 推理?

用 KD-Tree、Ball-Tree 等空间索引降低低维下的搜索复杂度;高维改用 HNSW、IVF、LSH 等近似最近邻(ANN);也可先聚类或降维缩小搜索范围,并对训练集做样本剪枝。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。