1. 简介

k-近邻算法(k-Nearest Neighbors,简称 k-NN)是一种基础的机器学习模型,广泛用于分类和回归任务,尤其在分类场景中更为常见。

该算法的核心思想是:相似的数据点彼此靠近。当我们需要预测一个新数据点的类别或数值时,会考察它最近的 k 个邻居,然后根据这些邻居的信息做出预测,比如取平均值或加权平均值。

在本篇文章中,我们将探讨:

  • 如何选择合适的 k 值和距离度量方式以提高准确率
  • k-NN 在高维数据下的表现
  • 高维数据带来的挑战及应对策略

2. k-近邻算法(k-NN)

✅ 优点

  • 算法思想简单,易于实现
  • 不需要训练阶段,是典型的“惰性学习”(Lazy Learning)算法
  • 适用于分类和回归任务
  • 可随时向数据集中添加新样本
  • 输出结果直观易懂
  • 仅需调整一个超参数 k

❌ 缺点

  • 依赖于历史数据,存储开销大
  • 对噪声、异常值和缺失值敏感
  • 要求特征标准化处理
  • 对类别型特征处理困难
  • 大数据集下计算距离代价高
  • 高维数据下计算效率低

2.1. 如何选择 k 值

通常建议将 k 值设为奇数,以避免在二分类任务中出现平票(tie)情况。例如,在 k=3 时,如果两个邻居是红色,一个邻居是蓝色,则最终预测为红色。

k 值的选择直接影响分类结果

如下图所示,当 k=3 时,预测为红色;而当 k=5 时,预测为蓝色:

kNN k vs pred

k 值对决策边界的影响

  • 大 k 值:导致高偏差,决策边界更平滑,忽略局部细节,可能将所有样本归为多数类。
  • 小 k 值:导致高方差,决策边界波动大,容易过拟合,对训练数据的小变化非常敏感。

kNN decision boundary

在类别交界区域,这种波动更为明显:

kNN decision boundary intersection

选择 k 值的建议:

  • 通过训练误差和验证误差来选择最优 k 值
  • 训练误差在 k=1 时最小(为 0),但验证误差在 k 过小或过大时都会上升
  • 最佳 k 值通常对应验证误差最低的点

kNN k vs error 1

2.2. 距离度量方式

虽然距离度量不是超参数,但其选择直接影响模型效果。以下是几种常用的度量方式:

1. 欧几里得距离(Euclidean Distance)

适用于连续数值空间,是默认的常用距离方式:

$$ d(x, y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} $$

2. 曼哈顿距离(Manhattan Distance)

也称 L1 距离,适合高维稀疏数据:

$$ d(x, y) = \sum_{i=1}^{n}|x_i - y_i| $$

3. 切比雪夫距离(Chebyshev Distance)

只考虑各维度的最大差值:

$$ d(x, y) = \max(|x_i - y_i|) $$

4. 明可夫斯基距离(Minkowski Distance)

上述三种距离的通用形式:

$$ d(x, y) = \left(\sum_{i=1}^{n}|x_i - y_i|^p\right)^{1/p} $$

  • p=1:曼哈顿距离
  • p=2:欧几里得距离
  • p→∞:切比雪夫距离

⚠️ 在高维数据中,推荐使用较小的 p 值,如曼哈顿距离(p=1),以提升计算效率。

5. 汉明距离(Hamming Distance)

用于比较等长字符串或整数向量:

$$ d(x, y) = \sum_{i=1}^{k}|x_i - y_i| $$

6. 杰卡德距离(Jaccard Distance)

用于布尔型向量,衡量集合重叠程度。

7. 余弦相似度(Cosine Similarity)

虽然不是严格意义上的“距离”,但常用于文档、基因序列等向量分类任务,衡量方向相似性。

3. 高维数据的挑战

随着特征维度的增加,k-NN 的性能显著下降,这就是所谓的“维度灾难(Curse of Dimensionality)”。

主要问题:

  • 计算距离的代价变高
  • “相似数据点靠近”的假设失效

原因分析:

假设数据均匀分布于 [0,1] 区间,k=10,n=1000:

  • 在二维空间中,边长为 0.1 的正方形即可覆盖 10 个样本点
  • 在三维空间中,边长需增加到约 0.63
  • 在 100 维空间中,边长约为 0.955
  • 在 1000 维空间中,边长接近 0.995

公式为:

$$ s = \left(\frac{k}{n}\right)^{1/f} $$

可见,随着维度 f 增加,我们不得不在一个非常大的区域内搜索邻居,导致所有点之间的距离变得“差不多”,从而失去区分度。

应对策略

3.1. 数据降维(Dimension Reduction)

通过特征选择或特征提取降低维度,同时保留数据结构:

  • 特征选择:剔除冗余特征,保留关键特征
  • 特征提取:将原始特征映射到低维空间,如 PCA(主成分分析)

✅ PCA 是一种常用方法,能将高维数据压缩到低维,同时保留最大方差信息。

  • 核方法(Kernel Methods):适用于非线性结构数据
  • 数量缩减(Numerosity Reduction):减少样本数量,降低计算量

3.2. 使用近似 k-NN(Approximate k-NN)

在高维数据中,精确查找最近邻代价太高,可使用近似算法:

  • 局部敏感哈希(LSH):将相似项哈希到同一桶中,实现快速近似查找
  • 随机投影(Random Projection):将高维数据映射到低维空间,保持欧几里得距离不变
  • 随机投影森林(rpForests):高效实现近似聚类和最近邻查找

4. 总结

本文介绍了 k-近邻算法的基本原理、优缺点、k 值选择策略和距离度量方式。

我们还分析了 k-NN 在高维数据下的性能退化问题,并探讨了应对维度灾难的策略,包括:

  • 数据降维(PCA、特征选择)
  • 使用近似算法(LSH、随机投影)

k-NN 是一个简单但强大的模型,但在高维场景下需要谨慎使用。合理选择参数、优化距离计算、结合降维技术,可以显著提升其在实际应用中的表现。


原始标题:k-Nearest Neighbors and High Dimensional Data