k k k近邻法( k − N N k-NN k−NN)
一种基本的分类与回归方法。
k k k 近邻算法
- 思想
给定一个训练数据集,对新的输入示例,在训练集中找到与该实例最近邻的 k k k个实例,依据这 k k k个实例进行分类。 - 特点
- 监督学习
- 懒惰学习
- 假设——基于样本总能在任意小距离内找到一个训练样本——在现实中可能不成立。
- 算法重点在于距离度量
- 算法规范表述
- 输入:训练样集 T T T,待检测的样本 x x x
- 输出:实例 x x x所属的类 y y y
- 计算
- 根据给定的距离度量,在训练集 T T T中找到与 x x x最近的 k k k个点,包含这 k k k个点的邻域记作 N k ( x ) {N_k}\left( x \right) Nk(x)
- 在
N
k
(
x
)
{N_k}\left( x \right)
Nk(x)中根据分类决策规则(如多数表决等)决定
x
x
x的类别
y
y
y:
y = arg max c j ∑ x i ∈ N k ( x ) I ( y i = c j ) ,    i = 1 , 2 , ⋯   , N ;    j = 1 , 2 , ⋯   , K y = \arg \mathop {\max }\limits_{{c_j}} \sum\limits_{{x_i} \in {N_k}\left( x \right)} {I\left( {{y_i} = {c_j}} \right),\;i = 1,2,} \cdots ,N;\;j = 1,2, \cdots ,K y=argcjmaxxi∈Nk(x)∑I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,K
其中 I I I为指示函数,当 y i = c j y_i=c_j yi=cj时为 1 1 1,否则为 0 0 0。
- 最邻近算法
令 k = 1 k=1 k=1时,称为最邻近算法。
k k k近邻模型
k k k近邻法使用的模型实际上对应于特征空间的划分,包括三个基本要素:距离度量、 k k k值得选择以及分类决策规则。
模型
在 k k k近邻中,如果训练集、距离度量、 k k k值以及分类决策确定后,新的输入实例的类也唯一确定。
相当于根据上述要素将特征空间划分为子空间,确定子空间每个点所属的类。
- 单元:对于每个训练样本 x i x_i xi,距离该点比其他点更近的所有点构成的区域。
距离度量
对于训练样本中的任意两个样本 x i , x j x_i,x_j xi,xj,其特征空间为 n n n,即 x i = ( x i ( 1 ) , x i ( 2 ) , ⋯   , x i ( n ) ) T , x j = ( x j ( 1 ) , x j ( 2 ) , ⋯   , x j ( n ) ) T {x_i} = {\left( {x_i^{\left( 1 \right)},x_i^{\left( 2 \right)}, \cdots ,x_i^{\left( n \right)}} \right)^T},{x_j} = {\left( {x_j^{\left( 1 \right)},x_j^{\left( 2 \right)}, \cdots ,x_j^{\left( n \right)}} \right)^T} xi=(xi(1),xi(2),⋯,xi(n))T,xj=(xj(1),xj(2),⋯,xj(n))T,常用的距离包括以下几种:
-
L
p
L_p
Lp距离
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p {L_p}\left( {{x_i},{x_j}} \right) = {\left( {\sum\limits_{l = 1}^n {{{\left| {x_i^{\left( l \right)} - x_j^{\left( l \right)}} \right|}^p}} } \right)^{\frac{1}{p}}} Lp(xi,xj)=(l=1∑n∣∣∣xi(l)−xj(l)∣∣∣p)p1 -
p
=
1
p=1
p=1时,为曼哈顿距离
L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ {L_1}\left( {{x_i},{x_j}} \right) = \sum\limits_{l = 1}^n {\left| {x_i^{\left( l \right)} - x_j^{\left( l \right)}} \right|} L1(xi,xj)=l=1∑n∣∣∣xi(l)−xj(l)∣∣∣ -
p
=
2
p=2
p=2时,为欧式距离
L 2 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 {L_2}\left( {{x_i},{x_j}} \right) = \sqrt {\sum\limits_{l = 1}^n {{{\left| {x_i^{\left( l \right)} - x_j^{\left( l \right)}} \right|}^2}} } L2(xi,xj)=l=1∑n∣∣∣xi(l)−xj(l)∣∣∣2 -
p
=
∞
p=\infty
p=∞时,是各个坐标距离的最大值
L ∞ ( x i , x j ) = max l ∣ x i ( l ) − x j ( l ) ∣ {L_\infty }\left( {{x_i},{x_j}} \right) = \mathop {\max }\limits_l \left| {x_i^{\left( l \right)} - x_j^{\left( l \right)}} \right| L∞(xi,xj)=lmax∣∣∣xi(l)−xj(l)∣∣∣
下图给了详细的表示(不同算法距离是不同的)。
k k k值选择
k
k
k值选择的不同也会产生巨大影响。
两种选择:
- 选择较小的
k
k
k值:
- 优点
- 近似误差小(只有与输入实例相近的才会影响结果)
- 缺点
- 估计误差大(预测结果对临近点非常敏感)
- 优点
总的来说 ,随着 k k k值减小,整体模型变复杂,易发生过拟合。
- 选择较大的
k
k
k值:
优缺点正好与选择较小 k k k值相反。
通常选择较小的 k k k,并使用交叉验证选择最优 k k k值。
分类决策规则
k
k
k近邻中使用的往往是多数表决,应该很好理解就不赘述了。
多数表决规则等价于经验风险最小化。
参考文献
《机器学习》
《统计学习方法》