k k k近邻算法是一种典型的分类算法。假设给定一组分类好的训练集,输入一条实例的特征向量,在训练集中找到与这组特征向量在当前距离度量下最近的 k k k个样本,在根据决策规则如多数表决来决定输入的实例应该分给哪个类。
k − N N k-NN k−NN算法原理
给定训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
3
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_3),...,(x_N,y_N)\}
T={(x1,y1),(x2,y3),...,(xN,yN)},其中
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
c
1
,
c
2
,
.
.
.
,
c
j
}
,
j
是
分
类
个
数
x_i\in\mathcal{X}=R^n,y_i\in\mathcal{Y}=\{c_1,c_2,...,c_j\},j是分类个数
xi∈X=Rn,yi∈Y={c1,c2,...,cj},j是分类个数,其中
c
i
∈
R
c_i\in R
ci∈R。输入:
n
维
实
数
特
征
向
量
x
n维实数特征向量x
n维实数特征向量x,输出:
x
所
属
的
类
别
y
x所属的类别y
x所属的类别y。
(1)输入
x
x
x,计算特征向量
x
x
x与训练集中每个样例之间的距离。一般使用欧式距离
(2)确定k值,在训练集中找出离输入
x
x
x最近的k个样本
(3)根据决策规则,如多数表决。即k个样本中包含最多样本的类别作为输出类别
y
y
y
接下来看一下
k
−
N
N
k-NN
k−NN算法的三要素
1.距离度量
特征空间中两个实例之间的距离通常反映了这两个实例的相似程度,越近则约相似。通常使用欧式距离计算,也可能会用其他闵可夫斯基距离计算。
L
p
距
离
介
绍
L_p距离介绍
Lp距离介绍是博主写的关于距离公式的说明。这里我们只看一下欧式距离公式。
L
2
(
x
i
,
x
j
)
=
(
∑
m
=
0
n
∣
x
i
−
x
j
∣
2
)
1
2
\begin{aligned}L_2(x_i,x_j)=(\sum\limits_{m=0}^n|x_i-x_j|^2)^{\frac{1}{2}}\end{aligned}
L2(xi,xj)=(m=0∑n∣xi−xj∣2)21
当然针对不同的样本,我们也可能使用不同的距离代入测试集进行计算,看哪种距离更适合当前样本。
2. k k k值的选择
k
k
k值的选择十分重要,在李航老师的统计学一书中讲到。
k
k
k值如果过小,则“学习”的近似误差减小,估计误差增大,模型复杂,容易过拟合,反之模型简单,欠拟合。近似误差和估计误差分别指的是训练误差与测试误差。但是对于这段话我不是很理解,因为
k
−
N
N
k-NN
k−NN算法实际上并没有学习过程。李航老师虽然讲学习二字用引号标出,但是确实还是不太能理解。如果有理解的同学可以留言给博主,不胜感激!
另外值得注意的是:
k
=
1
k=1
k=1时就是最近邻算法,
k
=
N
k=N
k=N时,无论输入什么数据,分到的类别总是训练集中含有样本最多的类别。
3.分类决策规则
我们确定 k k k值之后,在训练集中找出与输入实例最近的 k k k个样本。如采取多数表决规则时:设 k = 5 k=5 k=5,找出与输入实例 x x x最近的5个实例,然后看这5个实例中最多样本数的类别是什么。将这个类别作为 x x x输出类别。
k − N N k-NN k−NN算法的优点就是简单,在大数据时代效果也十分的有效。但是未经优化的 k − N N k-NN k−NN算法有个缺点,计算量十分巨大,每个实例进来都要计算与训练集中每个样本之间的距离。这在高维空间、海量数据中变得十分不现实。通常会采用一些方法,如对训练集进行树状优化的 k − d k-d k−d树算法。博主会在下篇博文中进行 k − d k-d k−d树算法讲解