K近邻(K Nearest Neighbor,简称KNN)
K近邻,是一种简单的有监督学习方法。它没有训练过程。
它的判别过程是这样子的:每当输入一个新的测试样本,它会在训练集中,找出与这个测试样本距离最近的K个训练样本,并把这K个样本中,占比最大的类别作为测试样本的类别,最后输出测试样本的类别。
如图,当我们输入测试样本——绿色点的时候,它的类别是什么?
如果K=3,那么离它最近的三个点中红色点占了
2
3
\frac{2}{3}
32,所以测试样本的类别为红色。
如果K=5,那么离绿色点最近的五个样本中,蓝色点占了
3
5
\frac{3}{5}
53,所以测试样本的类别为蓝色。
下面就要具体讲解KNN的三个要素:距离度量,K值的选取,以及分类决策规则。
距离度量
通常的距离度量函数有这么几个:
欧氏距离(Euclidean distance):
L
2
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
l
−
x
j
l
∣
2
)
1
2
L_2(x_i,x_j) = (\sum_{l=1}^{n}|x_i^{l} - x_j^{l}|^2)^\frac{1}{2}
L2(xi,xj)=(l=1∑n∣xil−xjl∣2)21
曼哈顿距离(Manhattan distance):
L
2
(
x
i
,
x
j
)
=
∑
l
=
1
n
∣
x
i
l
−
x
j
l
∣
L_2(x_i,x_j) = \sum_{l=1}^{n}|x_i^{l} - x_j^{l}|
L2(xi,xj)=l=1∑n∣xil−xjl∣
使用距离度量函数来计算训练集中每个点与测试样本的距离。当度量函数不同时,得到的距离也会不同。也就是说与测试样本最近的k个点也会有所不同。
K值的选取
在红绿蓝小点的例子中可以看到,当选取不同的K值时,测试样本的类别也会有变动。
当K值选取过小时,测试样本会对它附近的点非常敏感
,如果测试样本附近的点刚好是噪声,可能会导致测试样本的类别输出为噪声的类别。容易过拟合。
如果K值选取过大,比如>11时,那么测试样本(绿色点)无论在何处,都会被判别为蓝色。K值选取过大会导致模型过于简单。容易欠拟合。
分类决策规则
K近邻中一般使用多数表决,也就是测试样本的K个距离最近的点中的多数类作为测试样本的类。
误分类的概率是:
P
(
Y
≠
f
(
X
)
)
=
1
−
P
(
Y
=
f
(
X
)
)
P(Y ≠ f(X)) = 1- P(Y = f(X))
P(Y̸=f(X))=1−P(Y=f(X))
在这K个训练样本中,也就是:
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 ∈ N_k(x)} I(y_i ≠ c_j) = 1-\frac{1}{k}\sum_{x_i ∈ N_k(x)} I(y_i = c_j)
k1xi∈Nk(x)∑I(yi̸=cj)=1−k1xi∈Nk(x)∑I(yi=cj)
要使误分类的几率最小,也就是要让
1
k
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
\frac{1}{k}\sum_{x_i ∈ N_k(x)} I(y_i = c_j)
k1∑xi∈Nk(x)I(yi=cj)最大,所以多数表决等价于经验风险最小化。