sklearn.feature_extraction.text提供了4种文本特征提取方法:
每一类都是由题目组成,但是每个题目长度都不长,分词筛选后也只剩下几个关键词,因此计算各个词的tf的时候结果基本都是1/题目分词数,所以我便想着能不能计算出每一类的各个词的tf,而不是对单独的每个题目计算tf。
因此我将同一类的所有题目分词都组合到一个文档,这样就可以在同一类上计算词频tf,而不是在每个题目上面单独计算。
首先根据tf值排序做词典筛选:
初始词典中词的数目为7000。
实验采用
model = OneVsRestClassifier(svm.SVC(kernel=’linear’))模型进行实验。
特征提取采用了tf-idf和tf两种,tf-idf在tf的基础上加入了逆文档词频idf。
f1-macro,f1-micro,f1-sample分别是应用于多标签分类的评价标准,评价的基本标准依然是f1值,只是计算方式有所不同。
词典中的词数 | 100 | 500 | 1000 | 3000 | 5000 |
---|---|---|---|---|---|
f1-macro(tf-idf) | 0.8066 | 0.8387 | 0.8410 | 0.8196 | 0.8112 |
f1-micro(tf-idf) | 0.8693 | 0.9004 | 0.9000 | 0.8736 | 0.8643 |
f1-sample(tf-idf) | 0.8838 | 0.9170 | 0.9173 | 0.8924 | 0.8830 |
f1-macro(tf) | 0.8027 | 0.8572 | 0.8553 | ||
f1-micro(tf) | 0.8723 | 0.9088 | 0.9105 | ||
f1-sample(tf) | 0.8846 | 0.9257 | 0.9269 |
在取1000维词的基础上进行了以下实验:
在最初的时候我对题目tf的计算进行了改动,接下来我测试了不改动的tf特征,此时tf的计算是在每一道题目上单独进行。
00266367
65168539
09187254
词典中的词数 | 每类上计算tf | 每个文档上计算tf |
---|---|---|
f1-macro(tf-idf) | 0.8553 | 0.8533 |
f1-micro(tf-idf) | 0.9105 | 0.9078 |
f1-sample(tf-idf) | 0.9269 | 0.9254 |