操作SVM 实现文天职类的实例
原文来自:http://blog.csdn.net/zhzhl202/article/details/8197109 之前做过一些文本发掘的项目,好比网页分类、微博情绪说明、用户评述发掘,也曾经将libsvm举办包装,写了一个文天职类的开软软件Tmsvm。以是这里将之前做过一些关于文天职类的对象清算总结一下。
1 基本常识1. 1 样本清算文天职类属于有监视的进修,以是必要清算样本。按照营业需求,确定样本标签与数量,个中样本标签多为整数。在svm中个中假如为二分类,样本标签一样平常会设定为-1和1,而在朴实贝叶斯要领中,一样平常为0和1,但不是牢靠的,标签的配置和算法自己的性子有关的。如下面的清算的样本,1为正类,-1为反类(为了能便于展示,这里行使了一些即时谈天器材中的文本,内里的一些对话都是YY,并非真实的)。
表 1.1?1 一个实习样本的例子 ? 1.2 特性选择文天职类中最闻名的特性提取要领就是向量空间模子(VSM),即将样本转换为向量的情势。为了能实现这种转换,必要做两个事变:确定特性集和提取特性。 1.2.1 确定特性集特性集着实就是辞书,并且还必要给每个词设定一个编号。 一样平常可以将全部样本的词都提取出来作为辞书,而辞书的编号可以随意配置,默认环境下,全部词的权重都是等同的。怎样从样本中提取出一个个意义的词呢?最常用的要领就是行使分词器材,好比“如要购置商品的请加我qq61517891接洽我购置!”,可以分成“如^要^购置^商品^的^请^加^我^qq61517891^接洽^我^购置^!”,个中“^”是用来支解词的。此刻较量常见的分词器材有ICTCLAS(C++),Iksegment(Java)。 下图是一个典范的天生辞书的流程图。
图 1.1?1 从样本中提取辞书流程图 1.2.2 特性选择按照差异的营业,文天职类中辞书的局限在万级到万万级乃至亿级。而这么大的维度也许会带来维度劫难,因此就要想步伐从大量的特性中选择一些有代表性的特性而又不影响分类的结果(而按照文献中的功效,特性选择可以在必然水平上进步分类的结果)。特性选择就是从特性齐集选择一些代表性的词。而怎样权衡词的代表性呢?一样平常的计较要领有词频、卡方公式、信息增益等。当前文献中同等以为较量好的要领是卡方公式。 下面几个链接是几篇写的较量具体先容怎样举办特性选择的文章 1.??????http://www.blogjava.net/zhenandaci/archive/2009/04/19/266388.html?特性选择与特性权重计较的区别 2.??????http://www.blogjava.net/zhenandaci/archive/2009/03/24/261701.html? 特性选摘要领之信息增益 3.??????http://www.blogjava.net/zhenandaci/archive/2008/08/31/225966.html? 特性选择算法之开方检讨 ? 1.2.3 特性抽取其它一种办理维度劫难的思绪就是特性抽取。同样是降维,对比特性选择,特性抽取回收了一种高级的要领来举办。Topic Modeling是道理就是将操作映射将高纬度空间映射到低纬空间,从而到达降维的目标。详细可以见2.1特性抽取部门 ? 1.3 计较特性权重给定一个样本,怎样转换成向量呢? 起首给一张流程图:
图 1.1?2 计较特性权重的流程 ? 流程: 1)起首,对样本举办分词,提取出全部的词。 2)按照已经天生的辞书,假如辞书中的词呈现,就在响应对应的位置填入该词的词频。 3)对天生的向量举办归一化 上面的所示的要领是较量简朴的一种,个中特性权重回收的为词频来暗示,此刻较量常用的特性权重的计较方法为TF*IDF,TF*RF。详见2.3 特性权重 ? 1.4???模子实习与猜测当把文本转换成向量的情势后,大部门的事变着实已经做完了。后头所要做的就是操作算法举办实习和猜测了。 此刻文天职类的算法许多,常见的有Na?ve Bayes,SVM,KNN,Logistic回归等。个中SVM据文献中说是在家产界和学术界通吃的,不外据我相识此刻公司里用SVM来做分类的不多 = =,而Logistic回归则是较量常用的,由于相对来说简朴,并且可以并行化实习。最重要是简朴可依靠。 而至于这些算法详细是什么我这里也不再累述了,由于收集上先容相干的算法的文献许多,并且源措施大概多。可以直接下来下来行使。 ? 资料与措施 1.??????http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html先容Na?veBayes要领怎样应用在文天职类上 2.?????http://blog.163.com/jiayouweijiewj@126/blog/static/17123217720113115027394/?具体说明白Mahout中怎样实现Na?veBayes 3.??????http://www.csie.ntu.edu.tw/~cjlin/libsvm/? Libsvm是用来举办SVM实习与猜测的开源器材。下载下来就可以直接用,作者的文档写的很具体。 4.??????http://www.blogjava.net/zhenandaci/category/31868.htmlSVM的八股先容,讲授的照旧普通易懂的 5.??????http://blog.pluskid.org/?page_id=683?先容支持向量机的 6.??????https://code.google.com/p/tmsvm/??Tmsvm是我之前写的操作svm举办文天职类的措施,涉及到文天职类的全部流程。 ? 1.5 进一步阅读:文天职类的技能已经被研究了许多年,以是相干的资料也长短常多,可以进一步阅读下面的一些资料 1.??????http://www.blogjava.net/zhenandaci/category/31868.html?Show=All?这里有一个文天职类的入门系列,先容的照旧较量具体的。 2.????? 《文本发掘中多少要害题目研究》,这本书很薄,可是写的很深入,对文本发掘的一些重点题目举办了接头 ? 2 多少题目的接头2.1 特性选择特性选择是就是依据某种权重计较公式从辞书中选择一些有代表性的词。常用的特性选择的要领有许多种,Chi、Mutual Information、Information Gain。其它TF、IDF也可以作为特性选择的一种要领。在这个题目上许多人做了大量的尝试,Chi要领是结果最好的一种,以是本体系(指的是TMSVM)中回收了这种要领。关于特性选择无论是Wikipedia照旧Paper中都有很过细的讲授。
2.2 特性抽取
特性抽取和特性选择都是为了降维。特性选择的要领是从辞书中选出一些有代表性的词,而特性抽取是操作映射将高纬度空间映射到低纬空间,从而到达降维的目标。最常见的特性抽取的要领是Latent Semantic Analysis(隐藏语义说明),个中LSA也被称作Topic Modeling,较量常用的Topic Modeling的要领有LSA、PLSA、LDA。之前行使的要领LSA。 假设原本的词-文档矩阵为,即有m个term,n篇文档。暗示第j篇文档的向量。,颠末SVD解析后,选择前k个特性值后。再去重组文档的特性向量,,这样新的文档特性向量就由原本的m维降至k维。而一个新的文档即可通过,映射到U空间上。着实尚有其它一种要领,就是,可是在尝试中发明,前一种映射结果会更好一点。其它wikipedia上对LSA也有很具体的叙述 本体系将LSA用来Classification上的要领是一种叫做local relevancy weighted LSI的要领。其首要步调为 *?????????????模子实习 ①?????????????实习初始分类器C0 ②?????????????对实习样本猜测,天生初始分值 ③?????????????文档特性向量调动 ④?????????????设定阈值,选择top n文档作为局部LSA地区 ⑤?????????????对局部词/文档 矩阵做SVD解析。获得U、S、V矩阵 ⑥?????????????将其他的实习样本映射到U空间中 ⑦?????????????对全部颠末调动后的实习样本举办实习,获得LSA分类器 *?????????????模子猜测 ①?????????????操作C0猜测获得其初始分值 ②?????????????文档特性向量调动 ③?????????????映射到U空间 ④?????????????操作LSA模子举办猜测得分 ? 2.3 特性权重计较文档特性向量的特性权重计较的一样平常公式为,即第i个term在第j篇文档向量中的权重。个中Local(i,j)被称为局部因子,与term在文档中呈现的次数有关。global(i)又称为term的全局因子,与在整个实习齐集term呈现有关。凡是我们认识的公式都可以转化为这一个通用的表达式。如最常用的tf情势,tf*idf情势。因此我们就可以在结构辞书的时辰就计较term的全局因子,把这个值放在辞书中,然后在计较特性权重的时辰直接挪用。 详细的流程图如下:
图 2.3?1 特性权重的计较流程 ? 在Classification中哪种特性权重的计较方法最好??tf*idf ?在文献中最常用的是tf*idf,可是其结果并必然好。曾经有人也在这上面做了一些事变,好比新加坡国立大学的Man Lan曾在ACM和AAAI上颁发过文章来叙述这个题目。Zhi-Hong Deng也对各类feature weight的要领做了体系的较量,最终的结论是tf*idf并不是最佳的,而最简朴的tf示意不错,一些具有区分性的要领好比tf*chi等结果差能人意。 其后Man Lan在09年颁发了一篇论文,对term weighting要领做了一个综合过细的叙述,并对其提出的tf*rf要领做了各方面的论证。 ? 2.4 TSVM的模子实习和猜测流程实习进程:对文本自动做SVM模子的实习。包罗Libsvm、Liblinear包的选择,分词,辞诗人成,特性选择,SVM参数的选优,SVM模子的实习等都可以一步完成。表示图见下面
图 2.4?1 TMSVM模子实习流程 模子猜测进程:
图 2.4?2 多个模子同时猜测流程 ? 模子功效: 模子会返回两个功效:label和score,个中label即其猜测的标签。而score是该样本属于该类的附属度,分值越大,代表属于该类的置信度越大。详细的计较方法则是按照公式,,个中k为全部支持鉴别类得个数,n为全部种别个数,si 为全部支持鉴别类的分数。返回score的甜头是对与information filtering题目,由于实习样本的unbalance和randomly sampling 题目,依据判此外标签获得的功效精确率较低,因此必要通过阈值节制。 ? 2.5 SVM参数选择Libsvm中最重要的两个参数为C和gamma。C是处罚系数,即对偏差的宽容度。c越高,声名越不能容忍呈现偏差。C过大或过小,泛化手段变差。gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地抉择了数据映射到新的特性空间后的漫衍,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响实习与猜测的速率。这个题目Chih-Jen Lin在其主页上有具体的先容。 而Liblinear的C参数也长短常重要的。 因此在体系中会通过5-flods交错验证的要领对必然范畴内的C,gamma举办grid 搜刮,关于grid搜刮可以参考论文以及libsvm中tool文件夹中grid.py源文件。grid搜刮是可以获得全局最优的参数的。 为了加速SVM参数搜刮的服从,回收两种粒度的搜刮粗粒度和细粒度,两种搜刮方法的区别就是搜刮步长差异。粗粒度是指搜刮步长较大,为了能在较大的搜刮范畴内找到一个最优解地址的概略地区。细粒度搜刮搜刮步长较小,为了能在一个较小范畴内找到一个准确参数。 而对与大样本的文件,行使上面的要领如故会较量淹灭时刻。为了进一步进步服从,同时在担保获得全局最优的环境下,先对选择大样本的子集举办粗粒度的搜刮,然后获得在获得的最优区间内对全量样本举办细粒度的搜刮。 ? 2.6 SVM参数选择的并行化SVM对实习进程照旧较量久的,尤其是为了可以或许找到最吻合的参数。天然就想到能不能对SVM的巡检并行化。我之前做的要领是对参数的选择并行化,而单个参数的实习照旧放在一个呆板上串行举办。我把实习的要领放在我博客上,就不再粘贴到这里了。 2 ? ? Libs与liblinear的多分类计策
2.7 Libsvm 与liblinear的多分类计策
libsvm的多分类计策为one-againt-one。总共有k*(k-1)/2个binary classifier,对这k*(k-1)/2个binary classifier的value举办遍历,假如第i个类和第j个类binary 的classifier的value大于0,则会给第i个类投1票,不然给第j个类投1票。选择最终得到投票数最多的类作为最终的种别。 而liblinear的计策为one-against-rest。总共有k个binary classifier。从全部binary classifier中选择值最大多对应的种别作为最终的猜测类标签。 ? ? 一再样本对SVM模子的影响2.8 一再样本对SVM模子的影响一再样本对付SVM模子有奈何的影响呢? 我本身做了个尝试,用来垂青复样本的影响。 原有一个实习样本共有Positive样本1000,Negative样本2000,然后将Positive样本*2,结构了一个Positive样本2000,Negative样本2000的实习样本。然后测试一个包括Positive样本4494 ,Negative样本24206的样本。最终的功效如下:
图2.8?1一再样本对功效影响 从功效上来看:在F值上,无一再的样本会比一再样本稍高(图中保存了2位小数,着实差别不高出0.5%)。而正确率上,一再样本会比无一再样本稍高。 然后我又把模子放入到一个包括3万万样本中去测试,详细的指标无法测算。可是感受照旧一再样本会好一点。 详细说明: 1、???????一个样本被一再的多次,意义上相等于增进了该样本的权重。在SVM有一种WeightedInstance。在正常样本不免会有些误判,假犹如一条样本同时呈此刻Positive和Negative类中,包括一再样本的Positive类就会把Negative类误判的样本的影响抵消。而在SVM分类中对这些离群点会用处罚函数举办节制。 2、???????可是假如保存一再样本,会增进样本的量,对libsvm来说,分类的伟大度为O(Nsv3),并且假如一个样本是支持向量,那么全部一再的样本也城市被插手到支持向量中去。并且假如要为SVM模子选择吻合的参数的,假如在SVM选择的是RBF核函数,挑选吻合的处罚cost和RBF的参数gramma,假如在都是在[1,5,0.5]举办挑选,则总共会有9*9=81组参数必要挑选,在每组参数下假如要举办5-flods的交错验证,则必要81*5=405次实习与测试的进程。假如每次实习与测试耗费2分钟(在样本到达10万数目级的时辰,libsvm的实习时刻差不多按分钟计较),则总共必要405*2/60=12.3小时,以是说实习一个好的SVM模子异常不轻易。因此假如去掉一再样本对实习服从来说大有裨益。 ?2.9 将分类应用与信息过滤分类应用与信息过滤,对最终结果影响最大的是什么?分类算法?辞书巨细?特性选择?模子参数?这些城市影响到最终的过滤结果,可是假如说对过滤结果影响最大的,照旧实习样本的采样。 此刻基于呆板进修的分类算法一样平常都是基于一个假设:实习集和测试集的漫衍是同等的,这样在实习集上实习出来的分类器应用与测试集时其结果才会较量有用。 可是信息过滤面临的数据集一样平常是整个互联网,而互联网的数据集一样平常很难去随机采样。如下图所示:凡是来说,信息过滤或其余面向全互联网的应用在分类,选择数据集时,必要包括P(Positive,即用户感乐趣的样本),N(Negative,即用户不体谅、不敢乐趣的样本)。最抱负的环境是:P选择是用户感乐趣的,而N是全网中撤除P,显而易见N是无穷大的,并且很难预计其真正的漫衍,即无法对其随机取样。
图2.9?1样天职布 同样面临整个互联网的应用时网页分类,网页分类应用一样平常会选择Yahoo!大附崆专门清算网页分类专门网站的网页作为初始实习样本。 信息过滤的样本一样平常来说,感乐趣的样本是很好随机采样的。可是与感乐趣相对付的是正常样本,这个很难去选择。而正常样本对全网测试结果是影响很是大的。我曾经做过一个尝试: 起首,有一个包括5万条样本的数据集,有2.5万条Positive样本,2.5万条Negative样本。这里的Negative样本是早年用要害字的要领找出的不正确的样本。用4万条样本做实习样本,用1万条样本做测试样本。实习出得模子交错验证的功效可以到达97%以上。在测试样本中的测试结果,然后选定阈值为0.9,这是的召回率可以到达93%,正确率为96%。 然后把这个模子放到一个包括3万万条中去测试,配置阈值为0.9,共找出疑似违规样本300万条。对这个尝试来说,召回的样本其实是太多了,其正确率是很低的。 然后,我又改换了一下正常样本。从这3万万样本中随机采样出3万条样本,然后颠末校验,将个中Positive的样本剔除去。剩下约莫2万7千条样本放入到实习样本从头实习。 把获得的新模子放到3万万样本中测试,同样配置阈值为0.9,共找出疑似样本15万。正确率可以到达70%阁下。以是正常样本的随机选择对分类来说同样至关重要。 举一个小例子: 下图左面的图是用P和N实习出得模子。右面的图中有一个未知的类C,按照已知的模子,他应该会被分入到P中,可是现实上他是不属于P的。一样平常环境下,这种环境可以用阈值来节制。
图2.9?2分类用于信息过滤 ? 2.10? SVM办理样本倾斜的题目所谓数据偏斜(unbalanced),它指的是参加分类的两个种别(也可以指多个种别)样本数目差别很大。好比嗣魅正类有10,000个样本,而负类只给了100个,这会引起的题目显而易见,可以看看下面的图:
图2.10?1样本倾斜示例 方形的点是负类。H,H1,H2是按照给的样本算出来的分类面,因为负类的样本很少很少,以是有一些原来是负类的样本点没有提供,好比图中两个灰色的方形点,假如这两个点有提供的话,那算出来的分类面应该是H’,H2’和H1,他们显然和之前的功效有进出,现实上负类给的样本点越多,就越轻易呈此刻灰色点四面的点,我们算出的功效也就越靠近于真实的分类面。但此刻因为偏斜的征象存在,使得数目多的正类可以把分类面向负类的偏向“推”,因而影响了功效的精确性。 详细的办理要领照旧看我博客上的文章吧,这里就不光独贴出来了。 ? 2.11? 其他文天职类的题目点许多,之前还想再写写怎样对随笔本(好比query)举办分类,操作操作Wikipedia的常识加强文天职类的结果,怎样操作未标志样原来进步分类的结果。此刻时刻不多,等偶然刻了再继承深入的写吧。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |