标准回答
原理
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);也可先聚类或降维缩小搜索范围,并对训练集做样本剪枝。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。