$$
d _ { 1 2 } = \sqrt { \sum _ { k = 1 } ^ { n } ( x _ { 1 k } - x _ { 2 k } ) ^ { 2 } }
$$
除了欧几里得距离之外,KNN用到的常见距离还有曼哈顿距离(ManhattanDistance)和切比雪夫距离(ChebyshevDistance)。这三种距离统称为闵可夫斯基距离,可用下面这个通式来表示:
$$
d _ { 1 2 } = \left( \sum _ { i = 1 } ^ { n } | x _ { 1 i } - x _ { 2 i } | ^ { p } \right) ^ { 1 / p }
$$
当 $\mathrm { p } = \mathrm { 1 }$ 时为曼哈顿距离。
当 $\mathrm { p } = 2$ 时为欧几里得距离。
当 $\mathrm { p } = \infty$ (正无穷)时为切比雪夫距离。
$$
\operatorname* { l i m } _ { p \to \infty } \left( \sum _ { i = 1 } ^ { n } | x _ { i } - y _ { i } | ^ { p } \right) ^ { \frac { 1 } { p } } \operatorname* { m a x } _ { i = 1 } ^ { n } | x _ { i } - y _ { i } |
$$
- 基于距离倒数的权重KNN
KNN算法的一个可以改进的地方是将“临近点取平均值”改为“临近点按距离权重取平均值”。对离测试点更近的点赋予更高的权重,离测试点较远的点赋予较低的权重。比如 ${ \bf k } =$ 5时,如果做回归,预测结果由最近的5个点分别乘1/5相加得到,如图6-20所示。在使用距离权重系数后,预测结果改为由最近5个点分别乘以w1、w2、w3、w4、w5得到,其中wi和测试点到邻近样本点i的距离di成反比。
- KNN的参数调节
虽然KNN没有训练的过程,但KNN也会出现过拟合现象。回顾一下过拟合的定义,过拟合指的是训练集和测试集表现相差较大的现象。KNN模型如果使用不当,这种情况也是会发生的。发生过拟合时,训练集本身的样本点几乎都被正确分类,但训练集之外的点分类不够准确。
当发生过拟合时,我们需要适当增大参数k。试想当k=1时,所有训练集内部的点绝对会被正确分类(如果不考虑有重合样本点且标签不同的情况),这是因为每个点离它最近的点就是自己。这样训练集的准确率可以达到100%。但测试集中一旦有和训练集不同的点,预测效果就难以保证了。随着k的增大,模型更不容易收到离群值的影响,预测效果更加稳定。
人工智能与大数据技术导论
176