贝叶斯分类测试

来源:互联网 发布:单片机编程器的作用 编辑:程序博客网 时间:2024/06/14 20:30

1.数据
      使用20 newsgroups data (http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz) ,数据集按时间分为训练数据和测试数据,总大小约为85MB,每个数据文件为一条信息,文件头部几行指定消息的发送者、长度、类型、使用软件,以及主题 等,然后用空行将期与正文隔开,正文没有固定的格式。

2.目标
      根据新闻文档内容,将其分到不同的文档类型中。

3.步骤

首先,下载数据集20news-bydate.tar.gz,在$MAHOUT_HOME下的examples/bin/下建立work文件夹(mkdir /home/hadoop/mahout-distribution-0.4/examples/bin/work/)将下载的数据集解压tar 20news-bydate.tar.gz,之后放到work文件夹下。

其次,产生Input数据集,即对训练数据集进行预处理,数据准备阶段,将各类中的数据进行分词处理,去掉标点及副词等,同时将各类中的文件读入到一个大文件中,使得每类最后只有一个文件包含起初所有的文件,mahout下处理的文件必须是SequenceFile格式的,还需要把txtfile转换成sequenceFile。等处理完看结果时就明白了,命令为$MAHOUT_HOME/bin/./mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups  \

 -p /home/hadoop/mahout-distribution-0.4/examples/bin/work/20news-bydate-train \

 -o /home/hadoop/mahout-distribution-0.4/examples/bin/work/bayes-train-input  \

 -a org.apache.mahout.vectorizer.DefaultAnalyzer  \

 -c UTF-8

完毕后将work下的bayes-train-input放到hadoop的分布式文件系统上的 20news-input,在hadoop/hadoop-0.20.2/bin输入命令hadoop dfs -put /home/hadoop/mahout-distribution-0.4/examples/bin/work/bayes-train-input 20news-input

第三,用处理好的训练数据集进行训练得出分类模型即中间结果,模型保存在分布式文件系统上,在mahout的目录下输入命令$MAHOUT_HOME/bin/ ./mahout trainclassifier \
        -i 20news-input \
        -o newsmodel \
       -type bayes \
       -ng 3 \
       -source hdfs

当然可以查看newsmodel里的内容时,先查看其里面都有什么,命令:hadoop fs -lsr /user/hadoop/newsmodel

将其导入到本地txt格式,进行查看,例如命令:./mahout seqdumper -s /user/hadoop/newsmodel/trainer-tfIdf//trainer-tfIdf/part-00000 -o /home/hadoop/out/part-1

最后,用模型进行测试,输入命令$MAHOUT_HOME/bin/ ./mahout testclassifier \ 
       -m newsmodel \ 
       -d 20news-input \ 
       -type bayes \ 
       -ng 3 \ 
       -source hdfs \ 
       -method mapreduce

这里说明下自己理解的参数ng的设置,ng就是作为属性的单词个数,默认为1,就是单个单词作为属性,这里设置为3,但是训练和测试时此参数的值要设置一样。

原创粉丝点击