k近邻算法 (k-NN k-nearest neighbor)详解

k k k近邻算法是一种典型的分类算法。假设给定一组分类好的训练集,输入一条实例的特征向量,在训练集中找到与这组特征向量在当前距离度量下最近的 k k k个样本,在根据决策规则如多数表决来决定输入的实例应该分给哪个类。

k − N N k-NN kNN算法原理

给定训练集 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是分类个数 xiX=Rn,yiY={c1,c2,...,cj}j,其中 c i ∈ R c_i\in R ciR。输入: n 维 实 数 特 征 向 量 x n维实数特征向量x nx,输出: x 所 属 的 类 别 y x所属的类别y xy
(1)输入 x x x,计算特征向量 x x x与训练集中每个样例之间的距离。一般使用欧式距离
(2)确定k值,在训练集中找出离输入 x x x最近的k个样本
(3)根据决策规则,如多数表决。即k个样本中包含最多样本的类别作为输出类别 y y y
接下来看一下 k − N N k-NN kNN算法的三要素

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=0nxixj2)21
当然针对不同的样本,我们也可能使用不同的距离代入测试集进行计算,看哪种距离更适合当前样本。

2. k k k值的选择

k k k值的选择十分重要,在李航老师的统计学一书中讲到。 k k k值如果过小,则“学习”的近似误差减小,估计误差增大,模型复杂,容易过拟合,反之模型简单,欠拟合。近似误差和估计误差分别指的是训练误差与测试误差。但是对于这段话我不是很理解,因为 k − N N k-NN kNN算法实际上并没有学习过程。李航老师虽然讲学习二字用引号标出,但是确实还是不太能理解。如果有理解的同学可以留言给博主,不胜感激!
另外值得注意的是: 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 kNN算法的优点就是简单,在大数据时代效果也十分的有效。但是未经优化的 k − N N k-NN kNN算法有个缺点,计算量十分巨大,每个实例进来都要计算与训练集中每个样本之间的距离。这在高维空间、海量数据中变得十分不现实。通常会采用一些方法,如对训练集进行树状优化的 k − d k-d kd树算法。博主会在下篇博文中进行 k − d k-d kd树算法讲解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值