Mahout 用朴素贝叶斯对20 Newsgroups 数据分类的案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ichimaru_Gin_/article/details/79133935

源起

《Mahout in Action(Mahout 实战)》这本书的第14.6节有一个用朴素贝叶斯对20 Newsgroups 进行数据分类的案例,但是由于该出出版使用的是mahout0.6版本进行的实验,我用目前最新的0.13版本已经不能再重复这个实验了(mahout做了很多改动)。

ERROR MahoutDriver: : Try the new vector backed naivebayes classifier see examples/bin/classify-20newsgroups.sh

对于这个实验可以参考mahout官网给出的教程,Twenty Newsgroups Classification Example

下面是我根据官网的描述的做的实验过程(其实大家跟着官网做是一样的,而且解释的还权威。。。)

过程

1. 将数据集上传到hadoop文件系统

hadoop fs -put 20news-bydate-train hdfs://192.168.217.128:9000/user/pangying/testdata/20news-bydate-train

注意可能会报这个错误

java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at java.lang.Thread.join(Thread.java:1252)
	at java.lang.Thread.join(Thread.java:1326)
	at org.apache.hadoop.hdfs.DataStreamer.closeResponder(DataStreamer.java:973)
	at org.apache.hadoop.hdfs.DataStreamer.endBlock(DataStreamer.java:624)
	at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:801

但是此错误可以忽略(有博主说这个错误是hadoop的一个bug),检查一下HDFS,发现文件上上传成功的。

2. Convert the full 20 newsgroups dataset into a< Text, Text > SequenceFile.

将文件转成单行文本

mahout seqdirectory -i testdata/20news-bydate-train/ -o 20news-sql -ow

3. Convert and preprocesses the dataset into a < Text,VectorWritable > SequenceFile containing term frequencies for each document.

对样本进行向量化处理

mahout seq2sparse -i 20news-sql-test -o 20news-vectors-test -lnorm -nv -wt tfidf

4. Train the classifier

mahout trainnb -i 20news-vectors/tfidf-vectors -o nbmodel -li labelindex -ow -c
5. Test the classifier

mahout testnb -i 20news-vectors-test/tfidf-vectors -m nbmodel -l labelindex -ow -o 20news-testing -c
6 控制台会打印出结果

但是我的正确率竟然只有5%。。。肯定是有问题了,这个还需要再分析,但是基本的过程就是这样

展开阅读全文

没有更多推荐了,返回首页