K-最近邻回归(K-Nearest Neighbors Regression)的原理与预测过程
K-最近邻回归是一种基于实例的非参数回归方法。与KNN分类类似,它不对数据分布做任何假设,而是直接利用训练数据中与待预测点最相似的K个邻居的已知输出值,通过平均(或加权平均)来预测该点的输出值。它的核心思想是“物以类聚”。
下面我将详细讲解其描述和循序渐进的解题(预测)过程。
问题描述
我们有一个训练数据集 \(D = \{ (\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), ..., (\mathbf{x}_n, y_n) \}\),其中 \(\mathbf{x}_i\) 是一个 \(d\) 维的特征向量,\(y_i\) 是连续的目标值(实数)。给定一个新的查询点 \(\mathbf{x}_q\),我们的目标是预测其对应的输出值 \(\hat{y}_q\)。
解题过程详解
步骤1:选择距离度量
要找到“最近邻”,首先需要定义两个数据点之间的距离。常用的距离度量包括:
- 欧几里得距离(最常用):
\(d(\mathbf{x}_i, \mathbf{x}_j) = \sqrt{\sum_{k=1}^{d} (x_{i}^{(k)} - x_{j}^{(k)})^2}\) - 曼哈顿距离:
\(d(\mathbf{x}_i, \mathbf{x}_j) = \sum_{k=1}^{d} |x_{i}^{(k)} - x_{j}^{(k)}|\) - 闵可夫斯基距离(欧氏和曼哈顿是其特例)。
距离度量的选择会影响哪些点被视为“邻居”。对于连续数值特征,欧氏距离是标准选择。如果特征量纲不同,数据标准化(如Z-score标准化)是至关重要的预处理步骤,以防止量级大的特征主导距离计算。
步骤2:确定邻居数量 K
参数 \(K\) 控制了模型的复杂度,是KNN回归的核心超参数。
- K值过小(如K=1):模型变得非常复杂,预测结果仅由最近的单个点决定。这会导致对训练数据中的噪声(异常值)非常敏感,即过拟合,表现为低偏差但高方差,预测不稳定。
- K值过大:模型变得简单平滑。预测是所有邻居的平均,这可能会欠拟合,无法捕捉数据的局部细节(例如非线性关系),表现为高偏差但低方差。
- 如何选择K:通常通过交叉验证来确定。将训练数据分成多份,尝试不同的K值,计算在验证集上的平均误差(如均方误差MSE),选择使验证误差最小的K。
步骤3:搜索K个最近邻
对于查询点 \(\mathbf{x}_q\),计算它与训练集中所有点 \(\mathbf{x}_i\) 的距离 \(d(\mathbf{x}_q, \mathbf{x}_i)\)。
然后,从这些距离中选出最小的K个值,并记录对应的K个训练样本点及其目标值 \(y_i\)。这K个样本点就是 \(\mathbf{x}_q\) 的“K-最近邻”。
在实现时,对于大数据集,为了提高搜索效率,常使用KD-Tree或Ball-Tree等数据结构,避免计算所有距离。
步骤4:聚合邻居的输出值进行预测
得到K个邻居及其目标值 \(\{y_1, y_2, ..., y_K\}\) 后,通过聚合函数得到最终预测 \(\hat{y}_q\)。
- 简单平均(最常用):
\(\hat{y}_q = \frac{1}{K} \sum_{i=1}^{K} y_i\)
这是对K个邻居输出值的算术平均。 - 加权平均(更精细):
\(\hat{y}_q = \frac{\sum_{i=1}^{K} w_i y_i}{\sum_{i=1}^{K} w_i}\)
其中权重 \(w_i\) 通常与距离成反比,距离查询点越近的邻居对预测的贡献越大。一种常见的权重设置是 \(w_i = \frac{1}{d(\mathbf{x}_q, \mathbf{x}_i) + \epsilon}\)(\(\epsilon\) 是一个很小的数,防止分母为零)。这可以缓解简单平均中较远邻居对预测的不当影响。
步骤5:模型评估与特性
- 评估:在测试集上使用回归指标评估性能,如均方误差、平均绝对误差或决定系数R²。
- 模型特性:
- 惰性学习:没有显式的训练(拟合)过程。所有计算都发生在预测阶段。这意味着“训练”很快(只需存储数据),但预测较慢(需要计算距离和搜索)。
- 非参数:不假设数据服从某种特定分布,模型结构完全由数据决定。
- 局部近似:它假设查询点的函数值可以由其局部邻域内的点近似。
- 维数灾难:随着特征维度 \(d\) 的增加,数据点在空间中变得越来越稀疏,使得“最近邻”的概念变得模糊,所有点的距离都趋于相似,导致性能下降。因此,KNN对高维数据效果不佳,通常需要特征选择或降维。
总结流程
对于一个新查询点 \(\mathbf{x}_q\) 的完整预测流程如下:
- 预处理:确保所有特征已标准化。
- 计算距离:使用选定的距离度量(如欧氏距离),计算 \(\mathbf{x}_q\) 与训练集 \(D\) 中每个点的距离。
- 找到邻居:根据计算出的距离,找出距离最小的K个训练样本。
- 计算预测:对这K个邻居的目标值进行平均(简单或加权),得到 \(\hat{y}_q\)。
这个算法直观且易于理解,但在应用时务必注意数据标准化、K值选择和对计算效率的考量。