经典算法(4):K最近邻算法(KNN)

来源:互联网 发布:caj阅读器for mac 编辑:程序博客网 时间:2024/05/01 18:57

以下内容摘自百度词条。


邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。

所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。


kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,

则该样本也属于这个类别,并具有这个类别上样本的特性。

该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 

kNN方法在类别决策时,只与极少量的相邻样本有关。

由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,

因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。


优点。

1. 简单,易于理解,易于实现,无需估计参数,无需训练;
2. 适合对稀有事件进行分类;
3. 特别适合于多分类问题(multi-modal,对象具有多个类别标签), kNN比SVM的表现要好。


缺点。

1. 该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,

有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。

无论怎样,数量并不能影响运行结果。

2. 该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
3. 可理解性差,无法给出像决策树那样的规则。


好像有这么一说:当样本足够多,而邻域取得足够小,KNN是收敛于Byase分类的。


有一颗五角星,就是即将分类的数据点。KNN把它分入了红的那一类。


以下再放上网上的资料。

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

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

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

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

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

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


7. 据说还可以用来做内容推荐。

用KNN最原始的算法思路,即为每个内容寻找K个与其最相似的内容,推荐给用户。


0 0
原创粉丝点击