文章目录
- k近邻 / KNN
- 主要思想
- 模型要素
- 距离度量
- 分类决策规则
- kd树
- 主要思想
- kd树的构建
- kd树的搜索
- 总结归纳
k近邻 / KNN
主要思想
假定给定一个训练数据集,其中实例标签已定,当输入新的实例时,可以根据其最近的 k k k 个训练实例的标签,预测新实例对应的标注信息。
具体划分, k k k 近邻又可细分为分类问题和回归问题。
分类问题:对新的实例,根据与之相邻的
k
k
k 个训练实例的类别,通过多数表决等方式进行预测。
回归问题:对新的实例,根据与之相邻的
k
k
k 个训练实例的标签,通过均值计算进行预测。
输入:训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
⋯
,
(
x
N
,
y
N
)
}
T=\left\{\left(x_1, y_1\right),\left(x_2, y_2\right) \cdots,\left(x_N, y_N\right)\right\}
T={(x1,y1),(x2,y2)⋯,(xN,yN)}
其中:
x
i
∈
X
⊆
R
n
,
y
∈
Y
=
{
c
1
,
c
2
,
⋯
,
c
K
}
x_i \in \mathcal{X} \subseteq \mathbf{R}^n, y \in \mathcal{Y}=\left\{c_1, c_2, \cdots, c_K\right\}
xi∈X⊆Rn,y∈Y={c1,c2,⋯,cK},实例
x
x
x ;
输出:实例 x x x 的所属的类 y y y 。
- 根据给定的距离度量,计算 x x x 与 T T T 中点的距离;
- 在 T T T 中找到与 x x x 最邻近的 k k k 个点,涵盖这 k k k 个点的 x x x 的邻域记作 N k ( x ) N_k(x) Nk(x) ;
- 在 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=\underset{c_j}{\arg \max } \sum_{x_i \in N_k(x)} I\left(y_i=c_j\right), \quad i=1,2, \cdots, N ; j=1,2, \cdots, K y=cjargmaxxi∈Nk(x)∑I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,K
k k k 近邻法(k-nearest neighbor,k-NN)不具有显性的学习过程(无优化算法,无训练过程),实际上利用训练数据集对特征向量空间进行划分,以其作为分类的“模型”。
模型要素
距离度量
L P L_P LP 距离:特征空间 X \mathcal{X} X 假设为 R n , ∀ x i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , ⋯ , x i ( n ) ) T , x j = ( x j ( 1 ) , x j ( 2 ) , ⋯ , x j ( n ) ) T \mathbf{R}^n, \forall x_i, x_j \in \mathcal{X}, x_i=\left(x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(n)}\right)^T, x_j=\left(x_j^{(1)}, x_j^{(2)}, \cdots, x_j^{(n)}\right)^T Rn,∀xi,xj∈X,xi=(xi(1),xi(2),⋯,xi(n))T,xj=(xj(1),xj(2),⋯,xj(n))T,则有
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p , p ≥ 1 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}}, \quad p \geq 1 Lp(xi,xj)=(l=1∑n xi(l)−xj(l) p)p1,p≥1
欧氏距离(Euclidean distance)
p
p
p = 2:
L
2
(
x
i
,
x
j
)
=
(
∑
I
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
2
)
1
2
L_2\left(x_i, x_j\right)=\left(\sum_{I=1}^n\left|x_i^{(l)}-x_j^{(l)}\right|^2\right)^{\frac{1}{2}}
L2(xi,xj)=(I=1∑n
xi(l)−xj(l)
2)21
曼哈顿距离(Manhattan distance)
p
p
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_{l=1}^n\left|x_i^{(l)}-x_j^{(l)}\right|
L1(xi,xj)=l=1∑n
xi(l)−xj(l)
切比雪夫距离(Chebyshev distance)
p
p
p =
∞
{\infty}
∞ :
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)
分类决策规则
分类函数:
f
:
R
n
→
{
c
1
,
c
2
,
⋯
,
c
K
}
f: \mathbf{R}^n \rightarrow\left\{c_1, c_2, \cdots, c_K\right\}
f:Rn→{c1,c2,⋯,cK}
0-1 损失函数:
L
(
Y
,
f
(
X
)
)
=
{
1
,
Y
≠
f
(
X
)
0
,
Y
=
f
(
X
)
L(Y, f(X))= \begin{cases}1, & Y \neq f(X) \\ 0, & Y=f(X)\end{cases}
L(Y,f(X))={1,0,Y=f(X)Y=f(X)
误分类概率:
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))
给定实例
x
∈
X
x \in \mathcal{X}
x∈X ,相应的
k
k
k 邻域
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
)
=
1
−
1
k
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
\frac{1}{k} \sum_{x_i \in N_k(x)} I\left(y_i \neq c_j\right)=1-\frac{1}{k} \sum_{x_i \in N_k(x)} I\left(y_i=c_j\right)
k1xi∈Nk(x)∑I(yi=cj)=1−k1xi∈Nk(x)∑I(yi=cj)
最小化误分析率,等价于:
arg
max
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
\underset{}{\arg \max } \sum_{x_i \in N_k(x)} I\left(y_i=c_j\right)
argmaxxi∈Nk(x)∑I(yi=cj)
kd树
主要思想
kd 树是一种对 k k k 维空间中的实例点进行储存以便对其进行快速检索的树形数据结构。
本质:二叉树,表示对
k
k
k 维空间的一个划分。
构造过程:不断地用垂直于坐标轴的超平面将
k
k
k 维空间切分,形成
k
k
k 维超矩形区域。
kd 树的每一个结点对应于一个
k
k
k 维超矩形区域。
kd树的构建
输入:
k
k
k 维空间数据集:
T
=
{
x
1
,
x
2
,
⋯
,
x
N
}
T=\left\{x_1, x_2, \cdots, x_N\right\}
T={x1,x2,⋯,xN}
其中,
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
⋯
,
x
i
(
k
)
)
T
x_i=\left(x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(k)}\right)^T
xi=(xi(1),xi(2),⋯,xi(k))T
输出:kd 树
- 开始:构造根结点。
- 选取
x
(
1
)
x^{(1)}
x(1) 为坐标轴,以训练集中的所有数据
x
(
1
)
x^{(1)}
x(1) 坐标中的中位数(数据集为偶数时,中位数+1)作为切分点,将超矩形区域切割成两个子区域,将该切分点作为根结点。
由根结点生出深度为 1 的左右子结点,左结点对应坐标小于切分点,右结点对应坐标大于切分点。
- 选取
x
(
1
)
x^{(1)}
x(1) 为坐标轴,以训练集中的所有数据
x
(
1
)
x^{(1)}
x(1) 坐标中的中位数(数据集为偶数时,中位数+1)作为切分点,将超矩形区域切割成两个子区域,将该切分点作为根结点。
- 重复:
- 对深度为
j
j
j 的结点,选择
x
(
l
)
x^{(l)}
x(l) 为切分坐标轴(切分应垂直于坐标轴),
l
=
j
(
m
o
d
k
)
+
1
l = j(\ mod \ k) + 1
l=j( mod k)+1 ,以该结点区域中所有实例
x
(
1
)
x^{(1)}
x(1) 坐标的中位数作为切分点,将区域分为两个子区域。
生成深度为 j + 1 j+1 j+1 的左、右子结点。左结点对应坐标小于切分点,右结点对应坐标大于切分点。
- 对深度为
j
j
j 的结点,选择
x
(
l
)
x^{(l)}
x(l) 为切分坐标轴(切分应垂直于坐标轴),
l
=
j
(
m
o
d
k
)
+
1
l = j(\ mod \ k) + 1
l=j( mod k)+1 ,以该结点区域中所有实例
x
(
1
)
x^{(1)}
x(1) 坐标的中位数作为切分点,将区域分为两个子区域。
- 直到两个子区域没有实例时停止。
kd树的搜索
输入:已构造的 kd 树,目标点 x x x
输出: x x x 的最近邻
- 寻找“当前最近点“
- 从根结点出发,递归访问 kd 树,找出包含 x x x 的叶结点(kd 树的每一个结点对应一个超矩形区域);
- 以此叶结点为"当前最近点";
- 回溯
- 若该结点比“当前最近点”的距离目标更近,更新“当前最近点”;
- 当前最近点一定存在于该结点一个子结点对应的区域,检查子结点的父结点的另一子结点(子结点的兄弟结点)对应的区域是否有更近的点。
- 当回退到根结点时,搜索结束,最后的“当前最近点”即为 x x x 的最近邻点。
目标点的最近邻一定在以目标点为中心并通过当前最近点的超球体的内部。
如果父结点的另一个子结点的超矩形区域与超球体相交,那么在相交的区域内寻找与目标点更近的实例点。
总结归纳
- 较小的
k
k
k 值,学习的近似误差减小,但估计误差增大,敏感性增强,而且模型复杂,容易过拟合。
较大的 k k k 值,减少学习的估计误差,但近似误差增大,而且模型简单。 - k k k 的取值可通过交叉验证来选择,一般低于训练集样本量的平方根。
- 分类决策规则使用 0-1 损失函数,因为分类问题只有分类正确和分类错误两种可能。
- kd 树构建时对于超平面的划分,二位空间划分为矩形,三维空间划分为长方体。
- 构建完成的 kd 树,类似于二叉排序树,每一层代表着一个维度。
- kd 树的搜索,类似于二叉排序树的搜索过程。
- k k k 近邻算法对于高维数据的处理略显缓慢,此时可以考虑数据降维以及 kd 树。
- kd 树更适用于训练实例数远大于空间维数时的 k k k 近邻搜索。