2012-07-16 92 views
1

我試圖訓練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) 

我想知道我是什麼如果我的方法不正確,在這裏做錯了。我應該如何構造訓練數據並運行命令?

回答

0

這裏有什麼順序文件(link

所以,從你的錯誤的Hadoop文檔,似乎trainnb一步需要一個VectorWritable而不是文本。

seqdirectory step似乎在Text,Text窗體中生成數據。我相信你必須在序列文件上運行命令來生成TF或TF-IDF加權向量。

這個link通過一個關於如何做文本分析的例子。這可能值得一看。