Knn算法分析

KNN算法的基本思想

    k近邻算法(k-nearst neighbors,KNN)是一种很基本的机器学习的算法,它的思想是:在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,一般k为不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

  算法描述

  (1)计算测试数据与各个训练数据之间的距离;

  (2)按照距离的递增关系排序;

  (3)选取距离最小的k个点;

  (4)确定前K个点所在类别的出现频率;

  (5)返回前K个点出现频率最高的类别作为测试数据的预测分类;

算法的基本要素

(1)K值的选取

  对于K值的选择,没有一个确定的具体的数值,而是根据实际情况,比如一般会看样本的分布,选择一个较小的值;选择较小的K值,是为了用较小的邻域中的训练实例进行预测,训练误差会减小,只有输入实例较近或相似的训练实例才会对预测结果起作用,但是使用这种方法往往会使得泛化误差增大,而K值的减小就会使得整体模型变得复杂,容易发生过拟合。

 选择较大的K值,就会将样本置于较大的邻域训练实例中进行预测,这种方法可以减小泛化误差带来的影响,无独有偶,会增大训练误差带来的影响,在与输入实例较远的训练的实例中也会起到预测的效果,然而会是预测发生错误,使整个模型变得简单。

(2)距离的度量方法

 一般有欧式距离,曼哈顿距离,闵可夫斯基距离三种方法,

  设特征空间X是n维实数向量空间,,那么和的距离定义为:

其中p≥1.
当p=2,称为欧式距离(Euclideandistance),即

当p=1时,称为曼哈顿距离(Manhattandistance),即:

当p=∞大时,它是各个坐标距离的最大值,即

K值:
K值一般去比较小的正整数,通常用交叉验证法来选取最优值。

常用的是欧氏距离,但是欧式距离对平移很敏感,所以目前大多数使用切空间距离代替欧式距离。一般这几种方法各有千秋,这里就不一一赘述了。

(3)分类决策规划

  KNN的分类决策规则往往是多数表决,即有输入实例的K个邻近的训练实例中的多数决定输入实例的类别。
解释:如果分类的损失函数是0-1损失函数,分类函数是:

其中误分类的概率是:

对于给定的实例,其最近邻的K个训练实例点构成集合,如果涵盖的类别是,那么误分类的概率是:

要使误分类率达到最小(即经验风险最小化),即要使得最大。因此,多数表决规则等价于经验风险最小化。

算法的缺陷

 观察下面的例子,我们看到,对于位置样本X,通过KNN算法,我们显然可以得到X应属于红点,但对于位置样本Y,通过KNN算法我们似乎得到了Y应属于蓝点的结论,而这个结论直观来看并没有说服力

该算法在分类时有个重要的不中是,当样本不平衡时,即:一个类的样本容量很大,而其他类样本数量很小时,很可能导致当输入一个未知样本时,该样本的K个邻居中大数量类的样本占多数。但是这类样本并不接近目标样本,而数量小的这类样本很靠近目标样本。这个时候,我们有理由认为该位置样本属于数量小的样本所属的一类,但是,KNN却不关心这个问题,它只关心哪类样本的数量最多,而不去把距离远近考虑在内,因此,我们可以采用权值的方法来改进。

   和该样本距离小的邻居权值大,和该样本距离大的邻居权值相对较小,由此,将距离远近的因素也考虑在内,避免一个样本过大导致误判的情况。

   此外,从算法实现的过程中,该算法还存在两个严重的问题,第一个是需要存储全部的训练样本;第二个是需要进行繁复的距离计算。

 

 


 

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值