K 近邻算法

分类问题是机器学习中的一类问题。比如生物可以按照一定的特征分类,电影可以按题材分类等。K 近邻算法是解决分类问题的一种方法。

例子:对电影按题材分类


有人曾统计过很多电影的打斗镜头和接吻镜头,如下图。假如有一部未看过的电影,如何确定它是爱情片还是动作片?

电影名称 打斗镜头 接吻镜头 电影类型
California Man 3 104 爱情片
He’s Not Really into Dudes 2 100 爱情片
Beautiful Woman 1 81 爱情片
Kevin Longblade 101 10 动作片
Robo Slayer 3000 99 5 动作片
Amped II 98 2 动作片
? 18 90 未知

我们可以计算出未知电影与样本中的电影的距离,以此来推断该电影属于哪一类。至于距离怎么算,下面再说。

|已知电影与未知电影的距离|
| 电影名称 | 与未知电影的距离|
|:—————-:|:———–:|
| California Man | 20.5 |
| He’s Not Really into Dudes | 18.7 |
|Beautiful Woman |19.2|
| Kevin Longblade| 115.3 |
|Robo Slayer 3000|117.4|
|Amped II|118.9|

现在我们得到了样本中的电影与未知电影的距离,按照递增排序,可以找到 $k$ 个距离最近的电影。假定 $k=3$,则单个最靠近的电影依次是 He’s Not Really into Dudes、 Beautiful Woman 和 California Man。这样我们可以推断出未知电影与这三部电影属于同一题材,属于爱情片。

K 近邻算法概述


K 近邻算法采用不同测量不同特征值之间的距离方法进行分类。

优点:精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

适用数据范围:数值型和标准型。

距离度量:


k 近邻模型的特征空间一般是 $n$ 维实向量空间 $R^n$,可采用欧式距离进行度量,或者更一般的 $L_p$ 距离:

$$L_p(x,y)= \left( \sum_{i=1}^n \vert x_i - x_j \vert ^p\right)^ \frac{1}{p},p \geq 1$$