使用Mahout进行Naive Bayes分类的情感分析

时间:2012-07-16 13:09:31

标签: machine-learning classification mahout

我正在尝试用Mahout训练朴素贝叶斯分类器。

我不太清楚的第一件事是我的训练数据应该如何。我的数据集包含一个观点,如果它是正面的或负面的(1表示正数,-1表示负数。)根据我在Mahout in Action一书中关于分类的章节所理解,我已经设置了我的训练数据,如此:

 1   'Content of positive opinion'
-1   'Content of negative opinion'

我已使用seqdirectory将此数据转换为序列文件,并且我正在使用此命令训练分类器:

$MAHOUT_HOME/bin/mahout trainnb -i seq_data/chunk-0 -o bmodel -ow

输出此错误:

Exception in thread "main" java.io.FileNotFoundException: File temp/labelIndex does not exist.

查看trainnb接受的选项,我看到了--labelIndex选项。我不确定这是做什么的,我可以对此进行一些澄清。

然后我像这样运行命令(其中lindex是我创建的文件):

$MAHOUT_HOME/bin/mahout trainnb -i seq_data/chunk-0 -o bmodel -ow -li lindex

输出此错误:

java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.mahout.math.VectorWritable
    at org.apache.mahout.classifier.naivebayes.training.IndexInstancesMapper.map(IndexInstancesMapper.java:29)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)

如果我的方法不正确,我想知道我在这里做错了什么。我应该如何构建训练数据并运行命令?

1 个答案:

答案 0 :(得分:0)

以下是有关序列文件(link

的Hadoop文档

因此,从您的错误来看,似乎trainnb步骤需要VectorWritable而不是Text。

seqdirectory 步骤似乎以文本,文本形式生成数据。我相信你必须在你的序列文件上运行 seq2sparse 命令来生成TF或TF-IDF加权向量。

link介绍了如何进行文本分析的示例。可能值得一看。