摘要
作为一种非参数的分类算法, K近邻(KNN)算法是非常有效和容易实现的。 它已经广泛应用于分类、回归和模式识别等 。在应用 KNN 算法解决问题的时候, 要注意两个方面的问题:—样本权重和特征权重。针对传统的KNN分类算法的不足,出现了很多改进的KNN算法。本文对当前改进KNN的文本分类算法进行了全面的综述。
1.引言
K最近邻(k-Nearest Neighbor,KNN)算法最初由Cover和Hart于1968年提出,是一种惰性学习方法。KNN分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。
KNN的分类性能较好。随着理论上的深入研究和分析,现在已在很多领域得到广泛的应用,例如,模式识别、文本分类、图像及空间分类等。其自身的有点有:原理简单,易于理解和实现;不需要建立显示的模型,只需要建立训练样本库,当新样本加入时,不需要重新训练;分类性能稳定,分类效果显著。当然该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算"最近的"邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。还有就是可理解性差,无法给出像决策树那样的规则。
2.传统的KNN算法
传统的KNN算法是理论上非常成熟的算法,其基本思想比较简单、易于理解。首先根据距离度量函数计算待分类样本x和训练集中的每个样本的距离,对计算出的距离排序,选择与待分类样本最近的k个训练样本作为x的k个最近邻,如果这k个最近邻中属于某一类的样本占多数,则将代分类样本x归为该类别。
具体步骤如下:
Step1:构建训练样本集和测试样本集。训练样本集表示为R={(,)|i=1,2,...,n},其中=(,,...,)是一个p维向量,表示第i个训练样本的第j个特征分量值。表示第i个样本相应的类别,且属于标签集合C,C={1,2,3,...,t},t为类别数。测试样本集表示为T={|j=1,2,...,m},其中=(, ,...,)是一个p维向量,表示第j个测试样本的第i个特征分量值。
Step2:设定k值。一般先确定一个初始值,然后根据实验结果反复调整至最优。
Step3:计算测试样本和每个训练样本的欧氏距离。公式如下:
Step4:选择k个近邻样本。将计算出的距离降序排列,选择距离相对较小的k个样本作为测试样本的k个近邻。
Step5:找出主要类别:设k个近邻为x1,x2,...,xk,相应的类别标签为c1,c2,...,ct,这些类别标签属于标签集C。根据k个近邻的类别并应用最大概率对所查询的测试样本进行分类。所用概率指的是每一类别出现k个近邻中的比例,其根据每一类别出现在k个近邻中的样本数量除以k来计算。那么拥有最大概率的类别记为主要类别。设S={s1,s2,...,st}为k个近邻中每一类别样本数量的集合。则
Ω=
Step6:将待测样本归为Ω类。
传统的KNN建立在VSM模型上,使用欧氏距离作为其样本间距离度量函数,欧氏距离认为特征向量维度具有相同的权值,即各特征维度对分类的贡献率是相同的,这并不符合实际情况。因此,很多学者致力于改进KNN算法的研究。
3.KNN算法的改进
通过国内外许多学者对KNN算法做了大量的研究,发现其改进方法可大致分为以下几类:
A.对样本筛选
训练样本集中并不是所有的样本对分类都是有贡献的,有些样本能够很好的代表其所在的类别,但是有些样本对其所在类别的代表性很弱甚至不具有代表性。因此,为了减少计算复杂度,提高分类效率,需要对样本进行筛选,删除那些没有代表性的或者代表性很弱的样本
B.改进距离度量公式
传统的KNN算法中以欧氏距离作为其距离度量公式,后来很多人使用向量夹角的余弦作为相似性度量公式。也有使用DTW算法计算距离。
C.对查找k个近邻样本的方法的改进
在KNN分类中查找k个近邻样本是一个重要步骤,传统的KNN是使用排序。搜索树是一种快速查找的方法,因此,有研究员使用搜索树作为查找k个近邻样本的方法。
D.对k取值方法的改进
传统的KNN对k的取值是不断通过实验结果反复进行调整。Ghosh等采用动态的方法来确认k值,建立由k的分类索引的有限序列,通过几个基准数据集的分析,证明该方法比单纯用一个k有效。还有一些学者采用随机对k取值,每次的实验结果会有不同,选择一个比较好的实验结果来确认k值。
4.各种改进的KNN算法
4.1基于特征加权的KNN算法
KNN算法认为各维特征对分类的贡献是相同的,而事实上,构成样本特征矢量的各维特征来自不同的样本, 存在量纲差异,精度及可靠性也可能不同,而且所选择的特征集也未必适合于模式的分类。鉴于此,将探讨一种改进的K最近邻算法,该算法考虑各维特征对模式分类的不同贡献,以便获得更有效的分类效果。
设一个给定的测试样本为t,特征为f,定义在特征f上的最近邻算法为 KBag(f,t,k),该函数计算测试样本t在特征f权值上最近的 k个邻居。然后对每一个类别进行k次投票,因此每一特征维度上就有k次的投票机会。测试样本的类别由这些特征上的k次投票结果综合决定。
目前对所提取的特征所采用的特征子集选取算法一般是构造一个评价函数, 对特征集中的每一个特征进行独立的评估,这样每个特征都获得一个评估分, 然后对所有的特征按照评估分的大小排序,选取预定数目的最佳特征作为结果的特征子集。一般采用的评估函数有信息增益、互信息、期望交叉熵、χ2统计 、出现频次和几率比等。针对论文抄袭检测问题,实验表明采用信息增益评估函数效果较好 。权重的计算采用TFIDF公式, 其中TF是特征项在样本中的绝对频率,而IDF表示特征项在样本中的频数。
4.2基于SVM的KNN算法
我们对SVM 分类时错分样本的分布进行分析发现,SVM分类器和其它的分类器一样,其出错样本点都在分界面附近,这提示我们必须尽量利用分界面附近所提供的信息以提高分类性能。由SVM 理论知道,分界面附近的样本基本上都是支持向量,同时SVM可以看成每类只有一个代表点的最近邻( Nearst Neighbour , NN ) 分类器。所以结合 SVM 和 NN , 对样本在空间的不同分布使用不同的分类法。具体地, 当样本和 SVM最优超平面的距离大于给定的阈值, 即样本离分界面较远, 则用 SVM 分类,反之用 KNN 对测试样本分类。 在使用 KNN 时以每类的所有的支持向量作为代表点组, 这样增加的运算量很少。 实验证明了使用支持向量机结合最近邻的分类器分类比单独使用支持向量机分类具有更高的分类准确率,同时可以较好地解决应用支持向量机分类时核函数参数的选择问题。
将 SVM 和 KNN 分类器结合的考虑是将 SVM 看成每类只有一个代表点的 1NN 分类器。由于 SVM 对每类支持向量只取一个代表点,有时该代表点不能很好的代表该类,这时将其与KNN 相结合是因为 KNN 是将每类所有支持向量作为代表点,从而使分类器具有更高的分类准确率。具体地,对于待识别样本 x ,计算 x 与两类支持向量代表点 x+ 和 x- 的距离差,如果距离差大于给定的阈值,即 x 离分界面较远, 如图 1 中区域 I 和II ,用 SVM 分类一般都可以分对。当距离差小于给定的阈值,即x 离分界面较近,即落入区域 III 时, 如分类用 SVM ,只计算 x与两类所取的一个代表点的距离比较容易分错,这时采用KNN 对测试样本分类,将每个支持向量作为代表点,计算待识别样本和每个支持向量的距离对其得出判断。在对数据的封闭测试( 用训练样本作为测试集) 中, SVM- KNN 分类器的输出接近于 100% 。这是由于支持向量大多位于分类超平面附近, 即属于上图中的区域 III ,此时代入 1NN 对其分类,对于每个支持向量, 都能找到支持向量自己作为最近邻,其结果总是正确的。
SVM- KNN 改进算法步骤如下:
首先利用任何一种 SVM 算法, 求出相应的支持向量和它的系数以及常数 b , 设 T 为测试集, Tsv 为支持向量集, k 为KNN 的个数。
步骤 1: 如果 T≠Φ , 取 x∈T , 如果 T=Φ , 停止;
步骤 2: 计算公式: g ( x ) = ( 2 )
步骤 3 : 如果 |g ( x ) |>ε , 直接计算 f ( x ) =sgn ( g ( x ) ) 作为输出;如果 |g ( x ) |<ε , 代入 KNN 算法分类, 传递参数 x 、 Tsv 、 k , 返回结果为输出。
步骤 4 : T=T- {x} , 返回步骤 1 。
上述算法步骤 3 中使用的 KNN 分类算法和通常的 KNN分类算法流程相同, 将支持向量集 Tsv 作为分类算法的代表点集合即可。 所不同之处在于计算测试样本和每个支持向量的距离是在特征空间进行的而不是在原始样本空间中计算, 其使用的距离公式不是通常的欧氏距离公式, 而是采用下式计算距离:
, (3)
类似于 SVM , 针对不同应用问题可以选择式( 3 ) 中的核函数。算法中的分类阈值ε通常设为 1 左右, 当ε设为 0 , KSVM就是 SVM 算法。
4.3基于DTW的KNN算法
对于我们在寻找关于改进KNN的距离度量公式时,发现对于一些分类的特征样本数量可能因为一些不可抗拒因素不一致时,这时使用一般的距离度量公式不能很好地计算出来。通过研究发现动态时间规整算法(DTW)可以很好的代替KNN算法中距离的计算公式。该方法目前研究的论文较少,本人目前在研究这个算法融合,实验效果不错,但是还需要大量的实验来验证其效果。
5.结语
本文首先讨论 KNN 的基本思想及其传统算法步骤,然后分析了目前 KNN 算法存在的问题 ( curse of dimensionality) , 最后提出了一些关于KNN的改进算法。这些改进的算法都通过了实验验证其效果,实验结果表明 , 针对不同的情况用不同的改进算法得到的结果远好于单纯的用传统KNN算法。对于KNN算法的期望是在未来能将其不足之处都通过和别的方法融合,实现KNN算法的最大效果。
6.文献摘要
(1)赵俊杰,盛剑锋,陶新民;一种基于特征加权的 KNN文本分类算法
(2)李程雄,丁月华,文贵华; SVM- KNN 组合改进算法在专利文本分类中的应用;计算机工程与应用 2006.20,P193-196
(3)钟将,刘荣辉; 一种改进的KNN文本分类; 计算机工程与应用P142-144
(4)陈振洲,李磊,姚正安; 基于SVM的特征加权KNN算法; 中山大学学报 ( 自然科学版)
(5)jiawei Han,Jian Pei等著;数据挖掘概念与技术.机械工业出版社.
(6)张宁,贾自艳,史忠植;使用KNN算法的文本分类.计算机工程,2005,31(08):171-172.