在java中使用朴素贝叶斯(weka)进行简单的文本分类

时间:2017-01-30 11:48:39

标签: java weka text-classification naivebayes arff

我尝试在我的java代码中进行文本分类naive bayes weka libarary,但我认为分类的结果不正确,我不知道是什么问题。我使用arff文件作为输入。

这是我的训练数据:

(stream/connect a b {:downstream? false})

这是我的testing_data:

@relation hamspam

@attribute text string
@attribute class {spam,ham}

@data
'good',ham
'good',ham
'very good',ham
'bad',spam
'very bad',spam
'very bad, very bad',spam
'good good bad',ham

这是我的代码:

@relation test

@attribute text string
@attribute class {spam,ham}

@data
'good bad very bad',?
'good bad very bad',?
'good',?
'good very good',?
'bad',?
'very good',?
'very very good',?

结果表明应该归类为类​​别垃圾邮件的数据被分类为类别火腿,而应该归类为类​​别火腿的数据被归类为类别垃圾邮件。有什么问题?请帮帮我..

1 个答案:

答案 0 :(得分:2)

您的代码似乎没问题,但我有两点意见。

  • 首先,使用此命令filter.setInputFormat(train);设置过滤器的格式,以便使用此过滤器并使测试和训练数据兼容。您应该使用此命令再次更改格式:filter.setInputFormat(test);,因为这可能会产生兼容性问题。
  • 而不是获取第一个属性:train.attribute(0).value((int)index);(在我看来,这与属性不对应)尝试使用此命令train.classAttribute().value((int)index);

P.S。检查Load naïve Bayes model in Java code using weka jar以获取完整的工作流程和分类示例的说明(该材料曾在SO文档中使用过)。此示例使用LibLinear分类器,但逻辑是相同的。