我正在使用 Weka 中的朴素贝叶斯分类器进行 NLP 分类项目。我打算使用半监督机器学习,因此使用未标记的数据。当我在一组独立的未标记测试数据上测试从标记的训练数据中获得的模型时,Weka 会忽略所有未标记的实例。谁能指导我如何解决这个问题?之前已经有人在这里问过这个问题,但没有提供任何合适的解决方案。这是一个示例测试文件:
@relation referents
@attribute feature1 NUMERIC
@attribute feature2 NUMERIC
@attribute feature3 NUMERIC
@attribute feature4 NUMERIC
@attribute class{1 -1}
@data
1, 7, 1, 0, ?
1, 5, 1, 0, ?
-1, 1, 1, 0, ?
1, 1, 1, 1, ?
-1, 1, 1, 1, ?
最佳答案
问题是,当您指定一个训练集 -t train.arff
和一个测试集 test.arff
,运行方式是根据测试集来计算模型的性能。但是你不能在不知道实际等级的情况下计算任何类型的性能。没有实际的类(class),你怎么知道你的预测是对还是错?
我使用了您作为 train.arff
和 test.arff
提供的数据以及我分配的任意类标签。相关的输出行是:
=== Error on training data ===
Correctly Classified Instances 4 80 %
Incorrectly Classified Instances 1 20 %
Kappa statistic 0.6154
Mean absolute error 0.2429
Root mean squared error 0.4016
Relative absolute error 50.0043 %
Root relative squared error 81.8358 %
Total Number of Instances 5
=== Confusion Matrix ===
a b <-- classified as
2 1 | a = 1
0 2 | b = -1
和
=== Error on test data ===
Total Number of Instances 0
Ignored Class Unknown Instances 5
=== Confusion Matrix ===
a b <-- classified as
0 0 | a = 1
0 0 | b = -1
Weka 可以为您提供训练集的统计数据,因为它知道实际的类标签和预测的标签(将模型应用于训练集)。对于测试集,它无法获得任何关于性能的信息,因为它不知道真正的类标签。
你可能想要做的是:
java -cp weka.jar weka.classifiers.bayes.NaiveBayes -t train.arff -T test.arff -p 1-4
在我的例子中会给你:
=== Predictions on test data ===
inst# actual predicted error prediction (feature1,feature2,feature3,feature4)
1 1:? 1:1 1 (1,7,1,0)
2 1:? 1:1 1 (1,5,1,0)
3 1:? 2:-1 0.786 (-1,1,1,0)
4 1:? 2:-1 0.861 (1,1,1,1)
5 1:? 2:-1 0.861 (-1,1,1,1)
因此,您可以获得预测,但不能获得性能,因为您有未标记的测试数据。
关于nlp - Weka 忽略未标记的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16432121/