k近邻法是一种基本分类与回归算法。k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类。是一种监督学习。
一、k近邻算法
输入:训练数据集
τ
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
\tau = \lbrace(x_1, y_1), (x_2, y_2), ..., (x_N, y_N) \rbrace
τ={(x1,y1),(x2,y2),...,(xN,yN)}
其中,
x
i
∈
χ
⊆
R
n
为
实
例
的
特
征
向
量
,
y
i
∈
γ
=
{
c
1
,
c
2
,
.
.
.
,
c
k
}
x_i \in \chi \subseteq R^n为实例的特征向量, y_i \in \gamma = \lbrace c_1, c_2, ..., c_k \rbrace
xi∈χ⊆Rn为实例的特征向量,yi∈γ={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个点的 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
=
a
r
g
m
a
x
ϵ
j
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
,
i
=
1
,
2
,
.
.
.
,
N
;
j
=
1
,
2
,
.
.
.
,
K
(1)
y = argmax_{\epsilon j} \sum_{x_i \in N_k(x)} I(y_i = c_j), i = 1, 2, ..., N; j = 1, 2,..., K \tag{1}
y=argmaxϵjxi∈Nk(x)∑I(yi=cj),i=1,2,...,N;j=1,2,...,K(1)
式(1)中, I I I是指示函数,即当 y i = c j y_i = c_j yi=cj时 I I I为1, 否则 I I I为0.
二、k近邻模型
k近邻法使用的模型实际上对应于特征空间的划分,模型由三个基本要素——距离度量、k值的选择和分类决策规则决定
(1)距离度量
特征空间中两个实例点的距离是两个实例点相似程度的反映,k近邻模型的特征空间一般是n维实数向量空间
R
n
R^n
Rn。使用的距离是欧式距离,但也可以是其它距离。
设特征空间
χ
\chi
χ是n维实数向量空间
R
n
R^n
Rn,
x
i
,
x
j
∈
χ
,
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_j \in \chi, 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,xj∈χ,xi=(xi(1),xi(2),...,xi(n))T,xj=(xj(1),xj(2),...,xj(n))T,
x
i
,
x
j
的
L
p
x_i, x_j的L_p
xi,xj的Lp距离定义为
L
P
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
p
)
1
p
(2)
L_P(x_i, x_j) = (\sum_{l = 1}^n |x_i^{(l)} - x_j^{(l)}|^p)^{\frac{1}{p}}\tag{2}
LP(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1(2)
这里
p
≥
1
p \geq 1
p≥1。当
p
=
2
p = 2
p=2时,称为欧式距离,即
L
2
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
j
)
∣
2
)
1
2
(3)
L_2(x_i, x_j) = (\sum_{l=1}^n |x_i^{(l)} - x_j^{(j)}|^2)^{\frac{1}{2}} \tag{3}
L2(xi,xj)=(l=1∑n∣xi(l)−xj(j)∣2)21(3).
当
p
=
1
p = 1
p=1时,称为曼哈顿距离,即
L
1
(
x
i
,
x
j
)
=
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
(4)
L_1(x_i, x_j) = \sum_{l = 1}^{n} |x_i^{(l)} - x_j^{(l)}| \tag{4}
L1(xi,xj)=l=1∑n∣xi(l)−xj(l)∣(4)
当
p
=
∞
p = \infty
p=∞时,它是各个坐标距离的最大值,即
L
∞
(
x
i
,
x
j
)
=
m
a
x
l
∣
x
i
(
l
)
−
x
j
(
l
)
∣
(5)
L_\infty (x_i, x_j) = max_l |x_i^{(l)} - x_j^{(l)}| \tag {5}
L∞(xi,xj)=maxl∣xi(l)−xj(l)∣(5)
(2)k值的选择
k值的选择会对k近邻法的结果产生重大影响。
- 较小的k值 -》》学习的近似误差减少,但学习的估计误差增大,预测结果会对近邻的实例敏感,如果临近的实例点恰是噪声,预测会出错,k值的减少意味着整体模型变复杂,容易发生过拟合
- 较大的k值 -》》学习的估计误差较少,但近似误差增大,与输入实例较远的训练实例也会对预测起作用,预测会发生错误,k值的增大就意味着整体模型变得简单
在应用中,k值一般取一个比较小的数值,通常采用交叉验证法来选取最优的k值。
同时我也在其它得资料中,看到有其他的选取k值的方法:首先计算训练集合中元素个数n求
n
\sqrt n
n,而且这个n最好是奇数。
(3)分类决策规则
k近邻法中的分类决策规则往往是多数表决,即由输入实例的k个近邻的训练实例中的多数类决定输入实例的类。
多数表决规则(majority voting relu)有如下解释:如果分类的损失函数为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
≠
1
f
(
X
)
)
=
1
−
P
(
Y
=
f
(
X
)
)
P(Y \ne1 f(X)) = 1 - P(Y = f(X))
P(Y=1f(X))=1−P(Y=f(X))
对给定的实例
x
∈
χ
,
其
最
近
邻
的
k
个
训
练
实
例
点
构
成
集
合
x \in \chi,其最近邻的k个训练实例点构成集合
x∈χ,其最近邻的k个训练实例点构成集合N_k(x)
,
如
果
涵
盖
,如果涵盖
,如果涵盖N_k(x)
的
区
域
的
类
别
为
的区域的类别为
的区域的类别为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)最大,所有多数表决规则等价于经验风险最小化。
参考文献:
【1】统计学习方法——李航
【2】KNN Algorithm - How KNN Algorithm Works With Example | Data Science For Beginners | Simplilearn