读书笔记-统计学习方法- k k k近邻法
k k k近邻
算法:
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
(
N
)
)
}
T = \{(x_1,y_1),(x_2,y_2),...,(x_N,y(N))\}
T={(x1,y1),(x2,y2),...,(xN,y(N))}
其中,
x
i
∈
X
⊆
R
n
x_i \in \mathcal{X} \sube \bold R^n
xi∈X⊆Rn为实例的特征向量,
y
i
∈
Y
=
{
c
1
,
c
2
,
.
.
.
,
c
K
}
y_i \in \mathcal{Y} =\{c_1,c_2,...,c_K\}
yi∈Y={c1,c2,...,cK}为实例的类别,
i
=
1
,
2
,
.
.
.
,
N
i = 1,2,...,N
i=1,2,...,N;实例特征向量
x
x
x;
输出:实例 x x x所属的类 y y y。
(1)根据给定的距离度量,在训练集 T T T中找出与 x x x最邻近的 k k k个点,涵盖这 k k k个点的 x x x的邻域记作 N k ( x ) N_k(x) Nk(x);
(2)在
N
k
(
x
)
N_k(x)
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 \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
式(2)中,
I
I
I为指示函数,即当
y
i
=
c
j
y_i = c_j
yi=cj时
I
I
I为
1
1
1,否则
I
I
I为
0
0
0。
k = 1 k=1 k=1时为最近邻算法。
k k k近邻法三要素:
-
k k k值的选择
k k k值减小,近似误差减小,估计误差增大,模型变复杂,容易过拟合
k k k值增大,近似误差增大,估计误差增大,模型变简单。
一般选较小的 k k k值。通常采用交叉验证法选取最优的 k k k值
-
距离度量
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i,x_j) = \big(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p\big)^{\frac{1}{p}} Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1
p ≥ 1 p \ge 1 p≥1。当 p = 2 p =2 p=2时,称为欧氏距离;当 p = 1 p=1 p=1时,称为曼哈顿距离; p = ∞ p=\infty p=∞时,它是各个坐标距离的最大值。 -
分类决策规则
多数表决等价于经验风险最小化
k d kd kd树
k k k近邻法最简单的实现方法是线性扫描,这时计算输入实例与每一个训练实例的距离。
k d kd kd树是一种对 k k k维空间的实例点进行存储以便对其进行快速检索的树形数据结构
算法:
输入: k k k维空间数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y ( N ) ) } T = \{(x_1,y_1),(x_2,y_2),...,(x_N,y(N))\} T={(x1,y1),(x2,y2),...,(xN,y(N))},其中 x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( k ) T , i = 1 , 2 , . . . , N x_i = (x_i^{(1)},x_i^{(2)},...,x_i^{(k})^T,i=1,2,...,N xi=(xi(1),xi(2),...,xi(k)T,i=1,2,...,N;
输出: k d kd kd树
(1)开始,构造根节点,根节点对应于包含 T T T的 k k k维空间的超矩形区域。
构造根节点,使根节点对应于 k k k维空间中包含所有实例点的超矩形区域;通过下面的递归方法,不断地对 k k k维空间进行切分,生成子结点。在超矩形区域(结点)上选择一个坐标轴和在此坐标轴上的一个切分点(中位数),确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子结点);这时实例被分到两个子区域。这个过程直到子区域内没有实例时终止(终止时的结点为叶结点)。在此过程中,将实例保存在相应的结点上。
搜索 k d kd kd树:给定一个目标点,搜索其最近邻。首先依构造 k d kd kd树的坐标轴切分找到包含目标点的叶结点;然后以此叶结点的实例点作为当前最近点,以目标点为球心,当前最近点为半斤构造超球体,返回当前节点的父结点,如果父结点的另一节点的超矩形区域与超球体相交,那么在相交区域寻找与目标点更近的实例点。如果存在这样的点,将此点作为新的当前最近点。算法转到更高一级的父结点。如果父结点的另一节点的超矩形区域与超球体不相交,或不存在比当前最近点更近的点,则停止搜索。