现在的位置: 首页 > 综合 > 正文

weka文本分类的试验

2013年10月14日 ⁄ 综合 ⁄ 共 2248字 ⁄ 字号 评论关闭

试验机器是i686平台32ubuntu系统,500G
ROM,4G RAM,1.46GH双核CPU

1.下载weka数据挖掘软件,安装到系统,将weka.jar添加到classpath环境变量当中

2.下载文本数据集

使用的是路透新闻语料Reuters21578,直接下载的数据集不适合weka处理,需要转换成arff格式。可以从此处下载厦门大学邹博士已经处理好的数据
Reuters21578-Apte-90Cat

3.数据预处理

Reuters21578-Apte-90Cat数据集解压后,训练数据和测试数据分别放在不同的目录下,并且还有下一的子目录,在子目录中每个类别与一个文件夹对应,这个文件夹的就是对应类别的文本文档。


(1)将所有训练目录下的文本文档转换为一个arff文件:

 java weka.core.converters.TextDirectoryLoader -dir my_data_folder > my_arff_save _path/data.arff

其中,my_data_folder是包含样本txt的文件夹,如果是二值化的分类问题,则该文件夹应该包含两个子文件夹,每个子文件夹装每个类的样本,多类的分类问题就是多个子文件夹,类同。子文件夹的名字就是该类的类标签,在生成的arff文件可以看到这一点。  my_arff_save
_path
是想要保存文件的目录,data.arff是生成的数据文件,也可以是自己想要的任何名字。

e.g: 

 java weka.core.converters.TextDirectoryLoader -dir ./training/ > text_example.arff


(2)使用过滤器将文本转换为矢量(以下获取的是TF-IDF特征)

java weka.filters.unsupervised.attribute.StringToWordVector -I -C -i my_arff_save _path/data.arff -o my_arff_save_path/data_vsm.arff -c last 

可以在wekaStringToWordVector类说明里面看到如下选项的意义:

-C  word进行词频计数而不是二值化表示

-I  将词频转化为fij*log(文档数目/包含词i的文档数目)(即TF-IDF特征),fij是词i出现在文档j里面的频率

 后面的选项是通用的选项:

-i  输入

-o  输出

-c  指明类标签的位置,last表明标签为最后一个属性,first表明标签为第一个属性。

e.g: 

java weka.filters.unsupervised.attribute.StringToWordVector -I -C -i ./text_example.arff -o ./text_example_wordvector_vsm.arff -c last



(3)数据离散化

转化后的数据还不能直接用来分类,需要进行离散化:

java weka.filters.supervised.attribute.Discretize -i my_arff_save_path/data_vsm.arff -o my_arff_save_path/data_D_vsm.arff -c first


(4)数据分为训练集和测试集

将数据分成训练集和测试集:

java weka.filters.supervised.instance.StratifiedRemoveFolds -i my_arff_save_path/data_D_vsm.arff -o my_arff_save_path/data_vsm_train.arff -c first -N 4 -F 1 –V

 

同样可以参见StratifiedRemoveFolds类说明:

-N 4  指定将数据集分成的折数为4

-F 1  指定第1折被选中

-V    取反,设置-V将导致剩下没被选中的作为输出

可以加个-S的选项在分折的时候随机选择样本

 

测试集:

java weka.filters.supervised.instance.StratifiedRemoveFolds -i my_arff_save_path/data_D_vsm.arff -o my_arff_save_path/data_vsm_test.arff -c first -N 4 -F 1

 

经过上述操作后,数据被分成了4折,其中3折作为训练集,还有1折数据作为测试集。


4.模型训练

训练模型:

java weka.classifiers.bayes.NaiveBayes -t my_arff_save_path/data_D_vsm.arff -i -k -d my_arff_save_path/data_vsm_nb.model -c first > my_arff_save_path/data_vsm_nb.model

在测试集上检验效果:

java weka.classifiers.bayes.NaiveBayes -l my_arff_save_path/data_vsm_nb.model -T my_arff_save_path/data_vsm_test.arff –c first > my_arff_save_path/data_vsm_NB_r.txt

5.模型使用

训练好的模型已经序列化保存,后面可以直接使用


PS: 1.以上记录都是在bash命令行下

       2.可以使用weka GUI图形界面去操作,也可在simple CLI下输入以上命令去试验

抱歉!评论已关闭.