1、KNN文本分类算法综述,王天晰,算法思想:对于一篇待分类的文档向量,系统在训练集中找到k个最相近的邻居,使用这k个邻居的类别为该文档的候选类别。该文档与k个邻居之间的相似度为候选类别的权重,然后使用预先得到的最优截尾阈值,就可以得到该文档的最终分类列表。,算法描述,如左图所示: 绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。,算法描述,算法分为三步 1、处理训练集2、对每一个待分类文档向量,计算出训练集中与其最近邻的K个文档向量,记为集合3、
2、对每一个类C计算该类与待分类文档向量的权重s(C,x),记为score,影响KNN算法准确性和效率的三个关键,K值选取 K值选取可以通过对训练集进行m次交叉验证进行分类试验,得到分类最准的K值 动态的K值选取策略 计算相似度获取K个最近邻样本的过程 对训练样本进行聚簇 对训练样本进行降维 对训练样本和待分文档的权值加入倒排表策略,获取K个最邻近样本 决策待分类文档属于哪一类 通过截尾阈值策略选取,有关交叉验证,将数据集分为training跟test这两个子集,前者用以建立model,后者则用来评估该model对未知样本进行分类时的性能 把数据集划分子集时必须遵守两个要点: training s
3、et中样本数量必须够多,一般至少大于总样本数的50%。 两组子集必须从完整集合中均匀取样。 三种交叉验证方法 2-fold cross-validation(2-CV) 将dataset分成两个相等大小的subsets,进行两回合的分类器训练。在第一回合中,一个subset作为training set,另一个便作为test set;第二回合将其对换后训练 K-fold cross-validation (k-CV) 将dataset切成k个大小相等的subsets,每个subset皆分别作为一次test set,其余样本则作为training set,共计算K次 leave-one-out c
4、ross-validation (LOOCV) 每个样本单独作为一次test set,剩余n-1个样本则做为training set,故一次LOOCV共要建立n个models,决策待分类文档属于哪一类,m元分类和二元分类 m元分类就是通过输出候选分类列表来决策分类的 二元分类就是给定一篇文档,分类系统对每一个类都独立地判断这篇文档是否属于该类:要么属于,要么不属于,而不存在其它的结果,并且在分类过程中,不同类别之间互不影响。 对于一篇待分类文档,得到多个类别作为候选类别。一般情况下都要求从这些候选类别中选择部分类别为该文档的最终分类结果。如何选择?通过阈值策略来选择,评估指标,K值和阈值策略的
5、选取都需要评估指标作为参考,评估指标,N代表总共多少类,评估指标,阈值策略,Rcut: rank-based threshold Pcut: proportion-based thresholdScut: score-based local optimization thresholdRTcut: modify Rcut and Scut,Rcut: rank-based threshold,Rcut(位置截尾法, rank-based threshold):以文档为中心的阈值策略假设待分类的文档数目为n,有m个类别 对于每一个待分类文档向量 ,通过算法第三步计算它与每个类的权值score,得
6、到候选类列表,并按score降序排列。取其前k项,这篇文档就被认为属于这k个类。k可以通过用户经验指定,然后通过评估指标进行不断修正无法平滑地调整分类系统的性能: 即使k变化1,每篇文档的类关系都要发生变化,Pcut: proportion-based threshold,PCut (比例截尾法, proportion-based threshold):以类别为中心的阈值策略定义pj 。通过算法第三步计算它与每个类的权值score,得到候选类列表,并按score降序排列。取候选文档列表中的前ki(ki=n*Pj*x)项,这篇文档就被认为属于这ki个类,其中x是经验比例因子,通过改变它的大小,可
7、以平滑地调整系统的性能。 Pcut控制分入各个类的文档数,使它们保持训练集中各个类文档数的比例关系。这种算法最大的问题是过分依赖于这种比例关系,而没有考虑类在候选类列表中的位置。系统性能比较平滑,但是不能实现在线分类。,Scut: score-based local optimization threshold,SCut(最优截尾法, score-based local optimization threshold) 以类别为中心阈值策略SCut:对每一个类C给定一个阈值t(c),如果某一个候选类的score大于t(c),那么待分类文档向量 就属于类C。,Scut中阈值t(c)的计算,对训练集
8、进行m次交叉验证 将训练集分为m份,1份做为测试集m_va,其余m-1份作为训练集m_tr,遍历每一份m,进行KNN计算,得到能使评估指标最优的阈值t(c)。 对训练集进行Leave-one-out交叉验证对训练集每一个样本做交叉验证,和m次交叉验证道理相似,但是计算量更大,得到的阈值更准确,修正的阈值策略RTcut,在论文中作者修改了RCut和Scut的不足,并将二者结合起来确定类别的阈值,使查全率和查准率达到一定的平衡。在RTCut中,预先确定了每个类的截尾阈值,只要score大于这个阈值,就能确定分类。新的阈值通过如下公式计算其中d是待分类的文档,r(c|d)代表文档d与类c的相似度权值
9、score的排名,s(c|d)代表Scut方法中对类c指定的阈值,阈值策略的选取,不同的阈值策略对分类结果有显著的影响,阈值策略同时受语料内容的影响很大 Scut策略在某些语料下表现非常好,在某些语料下表现很差,表现好可能是因为类别很少的情况下缺乏充足的训练样本 Pcut在类别稀少的情况下表现很好 Pcut策略下,当Pcut的阈值等于语料中文档的类别数时,F1值会出现峰值,阈值策略的选取,RTcut策略在所有的语料中平衡查准率和查全率的情况很好,整体表现情况最好,作者说以后要多研究,再重点看下RTcut的相关文章,RTcut策略下KNN的计算,其中,x为待分类文档向量,y表示属于类的权重,di
10、为k个邻近的训练样本中的文档,y(di,cj)为类别属性函数,如果属于cj类,那么函数值为1,否则为0,bj为预先计算得到的的最优截尾阈值,sim(x,di)为与的相似度,一般流程,1、对训练集进行m次交叉验证的分类实验并通过评估指标判断,计算K值,选择某个阈值策略和他的阈值。 2、根据得到的K值和阈值策略进行KNN分类。,问题,1、关于计算K值还有一篇文献没读完,在采用交叉验证求K值的时候,是否要考虑截尾阈值策略,如果考虑该如何引进截尾阈值策略? 2、RTcut截尾阈值策略的计算公式有关c的部分还不了解3、有关提高计算相似度效率的部分还没看完,不知在完整的KNN流程中,在判断K值和阈值策略时需不需要提高计算效率,如果需要,该如何执行,参考文献,A study on thresholding strategies for text categorization Yiming Yang KNN at TREC-9 Tom Adult and Yiming Yang A re-examination of text categorization methods Yiming Yang and Xin Liu 针对中文网页测评KNN和NB算法 龚笔宏 冯是聪 基于KNN的中文文本分类算法研究 刘慧,感谢谭露给我的修改意见 谢谢大家,