k近邻法(KNN)
KNN算法

KNN没有显示的学习过程。
KNN模型
KNN模型实际上对应于对特征空间的划分。模型由三个基本要素——距离度量、k值的选择和分类决策规则决定。
模型
KNN中,当训练集、距离度量、k值及分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所属的类别。下图是二维特征空间划分的一个例子:

距离度量
特征空间中两个实例点之间的距离是两个实例点相似程度的反应,KNN的特征空间一般是n维实数向量空间Rn,距离的度量一般是Lp距离,如常用的欧氏距离。
设特征空间X是n维实数向量空间Rn,xi,xj∈X,xi=(xi(1),xi(2),...,xi(n))T,xj=(xj(1),xj(2),...,xj(n))T,xi,xj的Lp距离定义为:
Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1,p≥1
- 当p=2时,称为欧氏距离,即
L2(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣2)21
- 当p=1时,称为曼哈顿距离,即
L1(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣)
- 当p=∞时,是各个坐标距离的最大值,即
L1(xi,xj)=(max∣xi(l)−xj(l)∣)
下图是二维空间中p取不同值时,与原点的Lp距离为1的点的图形:
k值的选择
k值的选择会对KNN的结果产生重大影响。
-
选择较小的k值:
此时相当于用较小的邻域中的训练实例进行预测,近似误差会减小,但估计误差会增大。如果临近的实例点恰巧是噪声,预测就会出错。换句话说,k值的减小意味着整体模型变得复杂,容易发生过拟合。
-
选择较大的k值:
此时相当于用较大的邻域中的实例进行预测,其优点是可以减少学以的估计误差,缺点是近似误差会增大,这时与输入实例较远的(不相似的)训练实例也会对预测起作用。k值的增大意味着模型整体变得简单。
在实际应用中,一般选择一个较小的k,然后采用交叉验证法选取最优的k值。
分类决策规则
KNN中的分类决策规则往往是多数表决,即由输入实例的k个邻近的训练实例中多数类决定输入实例的类别。下证,多数表决规则等价于经验风险最小化。
如果分类的损失函数为0-1损失函数,分类函数为:
f:Rn→{c1,c2,...,ck}
那么误分类的概率是:
P(Y=f(X))=1−P(Y=f(X)
对给定的实例x∈X,其最邻近的k个训练实例点构成集合Nk(x),如果涵盖Nk(x)的区域的类别是cj,那么误分类的概率是:
k1xi∈Nk(x)∑I(yi=cj)=1−k1xi∈Nk(x)∑I(yi=cj)
要使得误分类率最小即经验风险最小,就要使得xi∈Nk(x)∑I(yi=cj)最大,即多数表决规则。
KNN的实现——kd树
实现KNN时,主要考虑的问题就是如何对训练数据进行快速搜索。当特征空间维数较大及训练数据容量大时,线性扫描计算非常耗时,下面介绍kd树方法。
kd树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个节点对应于一个k维超矩形区域。
构造kd树算法


二维空间上构造kd树的例子

如果实例点是随机分布的,kd树搜索的平均计算复杂度是O(logN),这里N是训练实例数,kd树适用于训练实例数远大于空间维数时的KNN。
搜索kd树算法


二维空间上搜索kd树的例子
