统计学习方法笔记(二):k近邻法
1.分类问题下的k近邻法简述:
k 近邻法的输入为实例的特征向量,对应于特征空间
的点;输出为实例的类别,可以取多类. k 近邻法假设给定一个训练数据集,其
中的实例类别已定.分类时,对新的实例,根据其 k 个最近邻的训练实例的类别,
通过多数表决等方式进行预测
2.k近邻法模型
i.输入与输出的关系
假设给定数据集如下:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(
x
3
,
y
3
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),(x_3,y_3),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),(x3,y3),...,(xN,yN)}
其中xi为实例的特征向量,yi表示实例的类别,满足以下关系:
x
i
∈
X
⊆
R
n
,
y
i
∈
Y
=
{
c
1
,
c
2
,
.
.
.
,
c
k
}
i
=
1
,
2
,
.
.
.
,
N
x_i \in X \subseteq R^n,y_i \in Y=\{c_1,c_2,...,c_k\} \\ i=1,2,...,N
xi∈X⊆Rn,yi∈Y={c1,c2,...,ck}i=1,2,...,N
k表示实例的个数
输入值:实例(通过特定算法转化为特征向量)
输出值:实例的特征向量通过给定的分类策略计算得到的类别,即实例所属的类,为集合Y中的元素
若设在给定的距离度量下,训练集中与输入值x最邻近的k个点,涵盖这k个点的邻域为
N
k
(
x
)
N_k(x)
Nk(x)
在分类规则为多数表决时,输入与输出的关系为
y
=
a
r
g
max
c
j
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
i
=
1
,
2
,
.
.
.
,
N
;
j
=
1
,
2
,
.
.
.
,
K
y = arg \max_{c_j}\sum_{x_i \in N_k(x)}I(y_i = c_j) \\ i = 1,2,...,N;j=1,2,...,K
y=argcjmaxxi∈Nk(x)∑I(yi=cj)i=1,2,...,N;j=1,2,...,K
其中I为指示函数,当yi = cj时,I=1,否则I=0
ii.模型组成部分
由于k近邻法没有显式的学习过程,故采用分析组成部分描述。
k近邻法的模型由三部分组成:距离度量,k值的选择和分类策略
1)距离度量
对于n维空间的向量xi,xj定义如下:
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=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T\\ x_j=(x_j^{(1)},x_j^{(2)},...,x_j^{(n)})^T
xi=(xi(1),xi(2),...,xi(n))Txj=(xj(1),xj(2),...,xj(n))T
则二者的Lp距离表达式为,且p>=1
L
p
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
p
)
1
p
L_p(x_i,x_j)=(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}}
Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1
p=1时,称为曼哈顿距离( Manhattan distance),表达式为
L
1
(
x
i
,
x
j
)
=
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
L_1(x_i,x_j)=\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|
L1(xi,xj)=l=1∑n∣xi(l)−xj(l)∣
p=2时,称为欧氏距离(Euclidean distance),表达式为
L
p
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
2
)
1
2
L_p(x_i,x_j)=(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^2)^{\frac{1}{2}}
Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣2)21
p=∞时,为各个坐标距离最大值,表达式为
L
∞
(
x
i
,
x
j
)
=
max
l
∣
x
i
(
l
)
−
x
j
(
l
)
∣
L_{\infin}(x_i,x_j)=\max_{l}|x_i^{(l)}-x_j^{(l)}|
L∞(xi,xj)=lmax∣xi(l)−xj(l)∣
注:在不同距离度量下,各点的最近邻点是不同的,可通过以下例子说明
2)k值的选择
k 值的选择会对 k 近邻法的结果产生重大影响.
如果选择较小的 k 值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差( approximation error )会减小,只有与输入实例较近的(相似的)训练实例才会对预测结果起作用.但缺点是“学习”的估计误差( estimation error )会增大,预测结果会对近邻的实例点非常敏感 [2] .如果邻近的实例点恰巧是噪声,预测就会出错.换句话说, k 值的减小就意味着整体模型变得复杂,容易发生过
拟合.
如果选择较大的 k 值,就相当于用较大邻域中的训练实例进行预测.其优点是可以减少学习的估计误差.但缺点是学习的近似误差会增大.这时与输入实例较远的(不相似的)训练实例也会对预测起作用,使预测发生错误. k 值的增大就意味着整体的模型变得简单.
如果 k = N,那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类.这时,模型过于简单,完全忽略训练实例中的大量有用信息,是不可取的.
在应用中, k 值一般取一个比较小的数值.通常采用交叉验证法来选取最优的 k 值.
3)分类策略
分类策略由很多,这里介绍一个较为常见的——多数表决
(1)输入输出映射关系:
如果分类的损失函数为 0-1损失函数,分类函数为
f
:
R
n
→
{
c
1
,
c
2
,
.
.
.
,
c
k
}
f:R^n \rightarrow \{c_1,c_2,...,c_k\}
f:Rn→{c1,c2,...,ck}
则误分类概率可表示为:
P
(
Y
≠
f
(
X
)
)
=
1
−
P
(
Y
=
f
(
X
)
)
P(Y \neq f(X)) = 1 -P(Y=f(X))
P(Y=f(X))=1−P(Y=f(X))
(2)具体解释:
设
X
=
{
x
i
∣
i
=
1
,
2
,
.
.
.
,
N
}
,
n
=
N
k
(
x
)
X=\{x_i|i=1,2,...,N\},n=N_k(x)
X={xi∣i=1,2,...,N},n=Nk(x)
对给定的实例x属于集合X,其最近邻的k个训练实例点构成集合n,涵盖N的类别为c_j,那么误分类率可表示为
1
k
∑
x
i
∈
N
k
(
x
)
I
(
y
i
≠
c
j
)
=
1
−
1
k
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
\frac{1}{k}\sum_{x_i \in N_k(x)}{I(y_i \neq c_j)}=1-\frac{1}{k}\sum_{x_i \in N_k(x)}{I(y_i = c_j)}
k1xi∈Nk(x)∑I(yi=cj)=1−k1xi∈Nk(x)∑I(yi=cj)
则学习的过程就是使误分类率最小,则使得
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
\sum_{x_i \in N_k(x)}{I(y_i = c_j)}
xi∈Nk(x)∑I(yi=cj)
达到最大值。
因此多数表决规则等价于经验风险最小化
3.通过构造kd树实现k近邻法
i.kd树的构造
算法:
实现:
ii.通过kd树进行最近邻搜索
算法: