一、kNN概念描述
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
主要考虑因素:距离与相似度的;
二、举例说明
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
该例子节选自:百度百科
http://baike.baidu.com/view/1485833.htm?fr=aladdin
这里有基于KNN算法的在MATLAB平台上的实例代码:
http://blog.csdn.net/lx85416281/article/details/40895829#
三、kNN算法的特点
KNN算法不仅可以用于分类,还可以用于过渡,比如在两个色度之间取过渡色。
KNN算法当前主要使用加权投票法,即根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)。
优点:易于实现,无需估计参数,无需训练,支持增量学习,能对超多边形的复杂决策空间建模;
缺点:就是计算量较大,分析速度慢;
四、常见问题:
1、k值设定为多大?
k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)k值通常是采用交叉检验来确定(以k=1为基准)经验规则:k一般低于训练样本数的平方根
2、类别如何判定最合适?
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。
3、如何选择合适的距离衡量?
高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。
4、训练样本是否要一视同仁?
在训练集中,有些样本可能是更值得依赖的。
可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。
5、性能问题?
kNN是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(临时去找k个近邻)。懒惰的后果:构造模型很简单,但在对测试样本分类地的系开销大,因为要扫描全部训练样本并计算距离。
已经有一些方法提高计算的效率,例如压缩训练样本量等。
6、能否大幅减少训练样本量,同时又保持分类精度?
浓缩技术(condensing)、
编辑技术(editing)、
该小结内容节选自
http://blog.csdn.net/jmydream/article/details/8644004
五、多维度应用举例
基本思想:
根据传统的向量空间模型, 文本内容被形式化为特征空间中的加权特征向量, 即 D=D(T1, W1; T2, W2; …; Tn,Wn)。
对于一个测试文本, 计算它与训练样本集中每个文本的相似度, 找出 K 个最相似的文本, 根据加权距离和判断测试文本所属的类别。
即把每个数据形式化成多维度的向量数据,然后,把要测试的数据跟训练样本集中的向量进行相似度乘法,算出两者的相似度,以此来决定该向量的分类。
具体算法步骤如下:
(1) 对于一个测试文本, 根据特征词形成测试文本向量。
(2) 计算该测试文本与训练集中每个文本的文本相似度, 计算公式为:
式中: di 为测试文本的特征向量,dj 为第 j 类的中心向量; M为特征向量的维数; Wk 为向量的第 k 维。K值的确定一般先采用一个初始值, 然后根据实验测试的结果调整 K 值, 一般初值定为几百到几千。
(3) 按照文本相似度, 在训练文本集中选出与测试文本最相似的 k 个文本。
(4) 在测试文本的 k 个近邻中, 依次计算每类的权重, 计算公式如下:
式中: x 为测试文本的特征向量; Sim(x,di) 为相似度计算公式; b 为阈值, 有待于优化选择; 而 y(di,Cj)的取值为 1 或 0, 如果 di 属于 Cj, 则函数值为 1, 否则为 0。
(5) 比较类的权重, 将文本分到权重最大的那个类别中。
六、提高分类效率的改进算法
KNN 算法的主要缺点是, 当训练样本数量很大时将导致很高的计算开销。KNN 算法是懒散的分类算法, 对于分类所需的计算都推迟到分类时才进行, 在其分类器中存储有大量的样本向量, 在未知类别样本需要分类时, 再计算和所有存储样本的距离, 对于高维文本向量或样本集规模较大的情况, 其时间和空间复杂度较高。
特征降维&模式聚合:(在精度下降有限的前提下,降低维度,减少算法的计算量)
基于 Fuzzy ART 的 K- 最近邻分类改进算法,该算法用模糊自适应共振理论(Fuzzy ART)对 K- 最近邻的训练样本集进行浓缩, 以改善 K- 最近邻的计算速度。
{就是对样本的维度进行简化,提取出特征明显的维度进行计算}
CHI 概率统计方法进行初步特征提取和模式聚合;(如果某一维在各个类别中取值基本相同, 那么此维对于文本分类的贡献率就相对较低, 如果在各个类别中取值有较大的差异, 那么就具有较强的文本分类能力, 而方差正好是反应变量分布均匀状态的主要指标。)
可引入CLA(Classifier’s Local Accuracy)技术进行分类可信度分析以实现两种算法的融合
特征降维&模式聚合 内容节选自:
【Author】 (School of Information Science & Technology,Southwest Jiaotong University, Chengdu, Sichuan, 610031 )Yang,Lihua Dai,Qi (610031 Superconductivity R&D Center,Southwest Jiaotong University,AChengdu,Sichuan)Guo,Yanjun
算法 KNN-RVM算法
输入 训练集STrain,测试集SText,核函数σ
输出 测试误差error,测试时间t,相关向量集SRVS
及相关向量个数nRVS
step1 调入训练集STrain,训练RVM,计算系数
wi和相关向量集SRVS.
step2 令测试集SText=STrain,进行封闭测试,
找到误差样本集Serr.
step3 计算Serr中每一样本点与SRVS中n个相
关向量的距离和,得到δCST.
step4 调入测试集SText,计算SText中每一样本
点与SRVS中n个相关向量的距离和,与δCST进行比
较,得到集合SRVM( > δCST)和SKNN(≤ δCST).
step5 分别对SRVM和SKNN中的样本利用RVM
和KNN分类算法进行分类.
step6 计算最终误差。
KNN-RVM算法节选自:
【Author】 ZHANG Lei,LIU Jian-Wei,LUO Xiong-Lin(Institute of Automation,China University of Petroleum,Beijing 102249)
【机构】 中国石油大学自动化研究所;