文本分类——libsvm
1 关于libsvm
关于libsvm的介绍以及相关论文网上很多,感兴趣可以找找。
http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 这是libsvm的官网,也有原作者的论文以及各种下载包和一些的简单的数据。
2 Libsvm分类
这里主要是针对之前学习过的几种特征筛选算法用libsvm进行比较。
采用搜狗实验室的数据,选择商业类文本1001篇,娱乐类文本1208篇,测试集29904篇。分别采用文档频次,卡方分布,互信息,信息增益来筛选特征——词。 对于每个算法分别选出该算法认为最重要的词200个词。然后对各个测试文本进行分词,向量化,训练,测试。
2.1 TF作为特征值
特征值采用词频,归一化方法如下
其中wi表示 词wi在当前文档中出现的次数。
特征筛选算法 | 召回率 (%) | 准确率 (%) | 正确率 (%) |
文档频次 | 93.5558 | 98.593 | 95.0508 |
卡方分布 | 96.1419 | 97.2563 | 95.82 |
互信息 | 97.4928 | 96.8817 | 96.4085 |
信息增益 | 96.5887 | 96.782 | 95.7865 |
从这个结果来看效果还是不错,其中从正确率的角度来看互信息稍微好些。其实这一个效果比我之前在微软实习时候用svm做的分类效果好多了,一个可能的原因可能是这些语料确实非常干净。
2.2 TF-IDF作为特征值
2.2.1 TF计算方法
在TF作为特征值里直接用的裸TF,即tf(t,d)={词t在文档d中出现的次数},这里打算对词进行一些平滑处理,如下:
TF(t,d) = 1 + logtf(i,j)
2.2.2 IDF计算方法
IDF——逆文档频次,计算方法如下:
其中N为所有文档数,df(t)为t在文档集中出现的文档数。为什么IDF,有什么好处?从IDF的计算公式可以看出 df(t) 越大其值越小,这也说明一个词如果在越多文档中出现,那么它的重要性也就越低,反之也是成立的。这是符合我们对一个事物重要性判断的直觉的。
2.3 分类结果
当前的权重计算方法已经确定如下:
归一化方法和前面介绍的一样。
特征筛选算法 | 召回率 (%) | 准确率 (%) | 正确率 (%) |
文档频次 | 92.0894 | 99.1623 | 94.4723 |
卡方分布 | 95.1432 | 98.584 | 96.0407 |
互信息 | 90.4809 | 99.5835 | 93.7032 |
信息增益 | 96.1997 | 97.8455 | 96.2346 |
从这两个表格对比来看tfidf提高了分类的准确性,但是召回率下降了。