Kth Nearest Neighbor
K临近算法是我个人认为的最简单直接的一种有监督的分类算法。KNN算法的思想其实非常的intuitive,俗话说的好:“近朱者赤近墨者黑”, KNN就将这句古语利用的淋漓尽致。下面我们详细展开
Model Detail
KNN算法的流程为:给定一个待预测的样本 x x x,在数据集中找到距离样本 x x x最近的 k k k个样本,然后利用这 k k k个样本进行预测。如果是分类问题,就采用“Voting”的方式,少数服从多数,以数量最多的标签作为分类结果;如果是回归问题,就取 k k k个样本的均值作为结果。
如上图所示,加入 k = 20 k=20 k=20,我们要预测灰色点的类别,那么红色圆圈内部的就是我们的分类依据,最终得到的结果应该是蓝色。
KNN算法有一个显著的特点,就是当你不做预测任务的时候,模型不会对数据集做任何操作,也就是没有明显的训练过程,我们将这种算法叫做“Lazy Learning”。
Distance Measuring
根据上面的算法描述,我们注意到其中很重要的一点就是这个“距离”的计算。一般我们最常用的是欧氏距离,也可以使用最一般的 L p L_p Lp距离,也叫做 M i n k o w s k i D i s t a n c e Minkowski \ \ \ Distance Minkowski Distance。
设
n
n
n维实向量空间
R
n
R^n
Rn,
x
i
,
x
j
∈
R
n
x_i,x_j\in{R^n}
xi,xj∈Rn,
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
…
,
x
i
(
n
)
)
x_i=(x_{i}^{(1)}, x_{i}^{(2)},\dots,x_{i}^{(n)})
xi=(xi(1),xi(2),…,xi(n)),
x
j
=
(
x
j
(
1
)
,
x
j
(
2
)
,
…
,
x
j
(
n
)
)
x_j=(x_{j}^{(1)},x_{j}^{(2)},\dots,x_{j}^{(n)})
xj=(xj(1),xj(2),…,xj(n)),那么
L
p
L_p
Lp距离定义为:
L
P
(
x
i
,
x
j
)
=
(
∑
k
=
1
n
∣
x
i
(
k
)
−
x
j
(
k
)
∣
p
)
1
p
L_P(x_i, x_j) = (\sum_{k=1}^n|x_i^{(k)} - x_j^{(k)}|^p)^{\frac{1}{p}}
LP(xi,xj)=(k=1∑n∣xi(k)−xj(k)∣p)p1
特别的,当
p
=
1
p=1
p=1时,就是曼哈顿距离;当
p
=
2
p=2
p=2时,就是欧氏距离。
The Choice of K
KNN中另一个关键点就是超参数
K
K
K的选择,如果
K
K
K设置的太小,则会使得模型过于复杂,容易导致模型的过拟合(类比多项式回归,
K
K
K太小就相当于多项式回归中特征项太多,或者说限制条件太强,泛化能力差);如果
K
K
K设置的太大,容易影响模型的准确性,泛化误差会变大。因此超参数
K
K
K的选择非常的重要,对最终的结果会产生很大的影响。
K$的选择非常的重要,对最终的结果会产生很大的影响。