K近邻算法(KNN)算法,是一种基本的分类与回归算法,本文只讨论解决分类问题的KNN算法。
KNN 简介
思想:给定一个训练数据集,对于新输入的样本,在训练集中找到与该样本最邻近的k个已知样本,这k个已知样本的多数属于某个类别,那么新输入的样本就属于这个类别。
如下图所示,假定使用欧氏距离作为度量方式,采样投票法决定类别,并且?表示待预测的样本,当k取1时,则变成了最近邻算法,对应的类别为★;当k取7时,类别为▲;可见k的取值对分类效果有比较大的影响。在实际应用中,k的取值一般不超过20。
该算法的优点是:
- 精度高
- 对异常值不敏感
- 无数据输入假定
缺点是:
- 计算复杂度高
- 空间复杂度高
KNN 三要素
KNN算法不具有显式的训练过程。距离度量(如欧氏距离)、k值以及分类决策规则(如投票表决)是KNN算法的三要素。在给定训练集合于三要素后,对于任何新输入的样本,它所属的类别是唯一确定的。下面对这三个要素展开讨论。
距离度量
在n维的特征空间中,距离反映的是两个点的相似程度。KNN 算法常用的距离度量为欧式距离,但也可以采用其他距离,比如更一般的 L p L_{p} Lp距离,其中p为正整数:
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i, x_j)=\left(\sum_{l=1}^{n}{\left|x_{i}^{(l)}-x_{j}^{(l)}\right|^p}\right)^{\frac{1}{p}} Lp(xi,xj)=(l=1∑n∣∣∣xi(l)−xj(l)∣∣∣p)p1
当p=1时,即为曼哈顿距离,也叫出租车距离,用以标明两个点在标准坐标系上的绝对轴距总和,如下图中的红色线条所示,蓝色和黄色为等价曼哈顿距离。
当p=2时,即为常见的欧氏距离,也就是直线距离,如上图的绿色线条所示。
不同距离度量确定的最近点是不同的,例如对于:
x 1 = ( 1 , 1 ) , x 2 = ( 5 , 1 ) , x 3 = ( 4 , 4 ) x_1=(1, 1), x_2 = (5,1), x_3 = (4,4) x