我尝试在我的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',?
结果表明应该归类为类别垃圾邮件的数据被分类为类别火腿,而应该归类为类别火腿的数据被归类为类别垃圾邮件。有什么问题?请帮帮我..
答案 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分类器,但逻辑是相同的。