3

我正在使用 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, ?
4

1 回答 1

5

问题是当你指定一个训练集 -t train.arff和一个测试集 test.arff时,操作的模式是根据测试集来计算模型的性能。但是你不能在不知道实际班级的情况下计算任何类型的表现。如果没有实际的课程,你怎么知道你的预测是对还是错?

我将您提供的数据train.arfftest.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)

因此,您可以获得预测,但无法获得性能,因为您有未标记的测试数据。

于 2013-05-08T13:50:24.873 回答