我正在尝试使用 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)
如果我的方法不正确,我想知道我在这里做错了什么。我应该如何构建训练数据并运行命令?