k近邻笔记
k-nn:一种基本的分类与回归方法,不具有显式的学习过程,实际上是利用训练数据集对特征空间进行划分作为其分类的模型。
k-nn的三要素:k值的选择,距离度量,分类决策规则。
k-nn算法:
距离度量
:
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
⋯
 
,
x
i
(
n
)
)
T
x _ { i } = \left( x _ { i } ^ { ( 1 ) } , x _ { i } ^ { ( 2 ) } , \cdots , x _ { i } ^ { ( n ) } \right) ^ { T }
xi=(xi(1),xi(2),⋯,xi(n))T
x
j
=
(
x
j
(
1
)
,
x
j
(
2
)
,
⋯
 
,
x
j
(
n
)
)
T
x _ { j } = \left( x _ { j } ^ { ( 1 ) } , x _ { j } ^ { ( 2 ) } , \cdots , x _ { j } ^ { ( n ) } \right) ^ { \mathrm { T } }
xj=(xj(1),xj(2),⋯,xj(n))T
x
j
,
x
i
x _ { j },x_{i}
xj,xi的距离
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 _ { 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
欧式距离:
L
2
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
2
)
1
2
L _ { 2 } \left( x _ { i } , x _ { j } \right) = \left( \sum _ { l = 1 } ^ { n } \left| x _ { i } ^ { ( l ) } - x _ { j } ^ { ( l ) } \right| ^ { 2 } \right) ^ { \frac { 1 } { 2 } }
L2(xi,xj)=(l=1∑n∣∣∣xi(l)−xj(l)∣∣∣2)21
曼哈顿距离:
L
1
(
x
i
,
x
j
)
=
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
L _ { 1 } \left( x _ { i } , x _ { j } \right) = \sum _ { l = 1 } ^ { n } \left| x _ { i } ^ { ( l ) } - x _ { j } ^ { ( l ) } \right|
L1(xi,xj)=l=1∑n∣∣∣xi(l)−xj(l)∣∣∣
各个坐标距离的最大值:
L
∞
(
x
i
,
x
j
)
=
max
l
∣
x
i
(
l
)
−
x
j
(
l
)
∣
L _ { \infty } \left( x _ { i } , x _ { j } \right) = \max _ { l } \left| x _ { i } ^ { ( l ) } - x _ { j } ^ { ( l ) } \right|
L∞(xi,xj)=lmax∣∣∣xi(l)−xj(l)∣∣∣
各距离关系图:
note:由不同的距离度量所确定的最近邻点是不同的。
K值的选择:
较小的K值:近似误差减小,估计误差增大;对邻近的实例点非常敏感;整体模型变复杂,容易过拟合。
较大的K值:减小估计误差,近似误差增大;与实例点距离较远的点也会对预测起作用,产生预测误差。
通常k值选取一个比较小的数值,采取交叉验证法来选取最优的k值。
通常K是不大于20的整数。
分类据测规则:
k-nn中一般使用的分类据测规则是多数表决,即使得经验风险最小化。
K近邻法的实现:kd树:
实现k近邻算法时主要考虑的问题是:如何对训练数据进行快速k近邻搜索,尤其是在特征空间维数大或者训练数据容量大的时候。
kd树:适用于训练实例数远大于空间维数时的k近邻搜索,当空间维数接近训练实例数时,效率下降接近线性扫描。
例子: