KNN

原创 2016年06月02日 11:21:17

KNN

KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方 法来确定所属类别的,因此对于类域的交叉重叠较多的待分样本集来说,KNN方法较其他方法更为适合

KNN复杂度分析

kNN算法本身简单有效,它是一种lazy-learning算法,分类器不需要使用训练集进行训练,训练时间复杂度为0。kNN分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为n,那么kNN的分类时间复杂度为O(n)。

KNN的使用

KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比(组合函数)。
算法的优点:

1.简单,易于理解,易于实现,无需估计参数,无需训练
2.适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型)
3.特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN比SVM的表现要好

算法的不足:

1.当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
2.计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
3. 懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢
4.可解释性较差,无法给出决策树那样的规则。

KNN常见的问题:

1、 k值设定为多大?
k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)
k值通常是采用交叉检验来确定(以k=1为基准)
经验规则:k一般低于训练样本数的平方根

2、类别如何判定最合适?
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。

3、如何选择合适的距离衡量?
高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。
变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。

4、训练样本是否要一视同仁?
在训练集中,有些样本可能是更值得依赖的。
可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。

5、性能问题?
kNN是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(临时去找k个近邻)。
懒惰的后果:构造模型很简单,但在对测试样本分类地的系统开销大,因为要扫描全部训练样本并计算距离。
已经有一些方法提高计算的效率,例如压缩训练样本量等。

6、能否大幅减少训练样本量,同时又保持分类精度?
浓缩技术(condensing)
编辑技术(editing)

对噪声的处理
K-近邻算法是基于距离的局部最优的算法。不可否认的是,当数据中存在噪声时,局部最优的基于

距离的算法会受到明显的影响。虽然合适的参数k

能够减弱突发性的噪声数据对分类效果的影响。但当数据服从稳定的噪声模型时,其很难能够从实质上

解决此问题。在前人的工作中,一种普遍被接受的观

点是,如果训练数据集与测试数据集中存在相同的噪声模型,则噪声数据将会在训练数据和测试数据中起到相同的作用,因而可以忽略输入数据中的不确定

性。然而,文献[1]明确指出考虑输入数据的不确定

性,可以提高分类器的预测准确性。

如果对于类标签来说,所有条件属性是同等重要的,那么将条件属性值规范化于[0,1]区间后,欧基

里德距离在计算对象之问的距离时是相当成功的。然而这种假设也不尽然,数据集中的条件属性与类标

签之间不一定都是相关,且即使是与类标签之间是相关的,相关程度也不尽相同。朴素的K.近邻算法中。每一个数据所起到的作用是等价的明显存在漏洞。

版权声明:本文为博主原创文章,未经博主允许不得转载。

深入理解KNN算法

1. KNN是个"消极"算法, y = f(x1,x2,........xp, x),其中x1,x2,........xp是训练数据,x是待分类或回归查询实例,y是分类或回归结果.    整个过程中没...
  • sunfoot001
  • sunfoot001
  • 2016年09月11日 10:47
  • 913

KNN(一)--简单KNN原理及实现

原文: http://blog.csdn.net/damotiansheng/article/details/40628417 1. Knn算法介绍:         百度百科:http://baik...
  • App_12062011
  • App_12062011
  • 2016年07月21日 13:15
  • 1732

K最近邻算法(KNN)

K最近邻 (k-Nearest Neighbors,KNN) 算法是一种分类算法,也是最简单易懂的机器学习算法,没有之一。1968年由 Cover 和 Hart 提出,应用场景有字符识别、文本分类、图...
  • saltriver
  • saltriver
  • 2016年09月11日 08:56
  • 7845

scikit-learn学习之K最近邻算法(KNN)

kNN算法全称是k-最近邻算法(K-Nearest Neighbor) kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别...
  • Gamer_gyt
  • Gamer_gyt
  • 2016年04月24日 11:19
  • 18481

KNN算法理解

一、算法概述 1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。 最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据...
  • jmydream
  • jmydream
  • 2013年03月06日 20:51
  • 69948

机器学习实战ByMatlab(一)KNN算法

介绍机器学习算法KNN,并提供matlab,python实例,提供手写识别系统matlab完整代码...
  • llp1992
  • llp1992
  • 2015年04月14日 13:16
  • 20555

K最近邻(KNN,k-Nearest Neighbor)准确理解

用了之后,发现我用的都是1NN,所以查阅了一下相关文献,才对KNN理解正确了,真是丢人了。 左图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/...
  • mousever
  • mousever
  • 2016年05月13日 21:56
  • 3199

K近邻k-Nearest Neighbor(KNN)算法的理解

一、KNN算法概述 KNN作为一种有监督分类算法,是最简单的机器学习算法之一,顾名思义,其算法主体思想就是根据距离相近的邻居类别,来判定自己的所属类别。算法的前提是需要有一个已被标记类别的训练数据集,...
  • helloworld6746
  • helloworld6746
  • 2016年03月07日 10:25
  • 6045

KNN(K-nearest neighbor)理解

先给出一个可以运行的KNN的代码。大家可以先通过运行这个代码,熟悉一下这个简单的分类方法的内容。 #include #include #include #include #in...
  • lk142500
  • lk142500
  • 2015年11月22日 17:28
  • 1832

kNN(K-Nearest Neighbor)最邻近规则分类

KNN最邻近规则,主要应用领域是对未知事物的识别,即判断未知事物属于哪一类,判断思想是,基于欧几里得定理,判断未知事物的特征和哪一类已知事物的的特征最接近; K最近邻(k-Nearest Neigh...
  • xlm289348
  • xlm289348
  • 2013年05月02日 16:26
  • 81928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KNN
举报原因:
原因补充:

(最多只允许输入30个字)