k k k近邻法( k k k-nearest neighbor, k k k-NN)是一种基本分类与回归方法,《统计学习方法》只讨论分类问题中的 k k k近邻法。 k k k近邻法假设给定一个训练数据集,其中的实例类别已定,分类时根据其 k k k个最近邻的训练实例的类别,通过多数表决等方式进行预测。
1、 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),\cdots,(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)} 在训练集
T
T
T中找出与
x
x
x最近邻的
k
k
k个点,涵盖这
k
k
k个点的
x
x
x的邻域记作
N
k
(
x
)
N_k(x)
Nk(x),根据以下规则决定
x
x
x的类别
y
y
y
y
=
a
r
g
min
c
j
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
,
i
=
1
,
2
,
⋯
 
,
N
;
j
=
1
,
2
,
⋯
 
,
K
y=arg\min_{c_j}\sum_{x_i\in N_k(x)}I(y_i=c_j),i=1,2,\cdots,N;j=1,2,\cdots,K
y=argcjminxi∈Nk(x)∑I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,K 式中,I为指示函数,
Y
=
{
c
1
,
c
2
,
⋯
 
,
c
K
}
Y=\{c_1,c_2,\cdots,c_K\}
Y={c1,c2,⋯,cK}是实例的类别。
k
k
k近邻法的特殊情况是
k
=
1
k=1
k=1的情形,成为最近邻算法。
k
k
k近邻法没有显式的学习过程。
2、 k k k近邻模型
k
k
k近邻法中,任何一个新的输入实例,它所述的类唯一地确定。这相当于将特征空间划分为一些子空间,确定子空间里的每个点所属的类,每个子空间的类别是唯一确定的。
特征空间中两个实例点的距离是两个实例点相似程度的反映,这个距离可以是欧式距离,也可以是更一般的
L
p
L_p
Lp距离(
L
p
L_p
Lpdistance)或Minkowski距离(Minkowski distance)。
x
i
x_i
xi,
x
j
x_j
xj的
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(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
=
2
p=2
p=2时,称为欧式距离(Euclidean distance);当
p
=
1
p=1
p=1时,称为曼哈顿距离(Manhattan distance);当
p
=
∞
p=\infty
p=∞时,它是各个坐标距离的最大值,即
L
∞
(
x
i
,
x
j
)
=
max
l
∣
x
i
(
l
)
−
x
j
(
l
)
∣
L_\infty(x_i,x_j)=\max_l|x_i^{(l)}-x_j^{(l)}|
L∞(xi,xj)=lmax∣xi(l)−xj(l)∣
k
k
k值的选择会对结果产生重大影响。
如果选择较小的
k
k
k值,相当于用较小的邻域进行预测,近似误差(approximation error)会减小,但估计误差(estimation error)会增大。换句话说,
k
k
k值减小意味着模型变得复杂,容易发生过拟合。
如果选择较大的
k
k
k值,估计误差减小,但近似误差增大,模型变得简单。在应用中,
k
k
k值一般取一个比较小的数值,通常用交叉验证来选取最优
k
k
k值。
k
k
k近邻法中的分类规则往往是多数表决。多数表决规则(majority voting rule)有如下解释:
对给定的实例
x
∈
X
x\in X
x∈X,其最近邻的
k
k
k个训练实例点构成集合
N
k
(
x
)
N_k(x)
Nk(x),若涵盖
N
k
(
x
)
N_k(x)
Nk(x)区域的类别是
c
j
c_j
cj,那么误分类率是
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\not= c_j)
k1xi∈Nk(x)∑I(yi̸=cj) 可以看到,多数表决规则等价于经验风险最小化。
3、 k k k近邻法的实现: k d kd kd树
当训练集很大时,如果要计算输入实例与每一个训练实例之间的距离,以确定
k
k
k个最近邻点,计算非常耗时,因此使用
k
d
kd
kd树结构存储训练数据,以减少计算距离的次数。
构造
k
d
kd
kd树相当于不断用垂直于坐标轴的超平面将
k
k
k维空间切分,构成一系列的
k
k
k维超矩形区域,
k
d
kd
kd树的每个结点对应于一个
k
k
k维超矩形区域。
首先构造根节点,使其对应于包含所有实例点的超矩形区域;再通过递归方法,不断对
k
k
k维空间进行切分,生成子结点。通常依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数(median)为切分点,这样得到的
k
d
kd
kd树是平衡的。
构造完
k
d
kd
kd树后,接着考虑如何进行搜索,以最近邻搜索为例。
(一)首先找到包含目标点
x
x
x的叶结点:从根节点出发,递归向下访问
k
d
kd
kd树,若目标点
x
x
x当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子结点,直到子结点为叶结点。
(二)暂时以此叶结点为“当前最近点”。
(三)递归地向上回退,如果该结点保存的实例点比“当前最近点”距离目标点
x
x
x更近,则以该结点为“当前最近点”;检查“当前最近点”的父节点的另一子结点对应的区域是否有更近的点。
(四)当回退到根节点时,搜索结束,最后的“当前最近点”即为
x
x
x的最近邻点。
k
d
kd
kd树的平均计算复杂度是
O
(
l
o
g
N
)
O(logN)
O(logN),
N
N
N为训练实例数。
k
d
kd
kd树更适用于训练实例数远大于空间维数时的
k
k
k近邻搜索,当训练实例数接近空间维数时,它的效率会迅速下降,几乎接近线性扫描。
本文深入探讨了kkk近邻法(kkk-NN),一种用于分类与回归的基本方法。kkk近邻法通过计算输入实例与训练集中的实例距离,选取最近的kkk个邻居进行多数表决预测类别。文章详细解释了距离度量、kkk值选择的影响及kdkdkd树的构建与搜索过程。
2840

被折叠的 条评论
为什么被折叠?



