2

我试图让 Weka 从命令行进行预测,但我担心我可能做错了。我阅读了《数据挖掘》一书并在他们的网站上搜索了文档,但我发现的内容充其量是模糊的,所以我希望你能帮助我。

首先,我创建了一个训练集(train.arff)。这是一个示例:

@relation test
@attribute 'A' {0,1}
@attribute 'B' {0,1}
@attribute 'C' {0,1}
@attribute 'D' {0,1}
@attribute 'E' {0,1}
@attribute 'F' {0,1}
@data
0,0,0,0,0,0
0,0,0,0,0,0
...

然后我创建了要通过预测完成的数据集(test.arff):

@relation test
@attribute 'A' {0,1}
@attribute 'B' {0,1}
@attribute 'C' {0,1}
@attribute 'D' {0,1}
@attribute 'E' {0,1}
@attribute 'F' {0,1}
@data
0,?,0,0,0,0
0,?,0,0,0,0
...

这 ”?” 标记应该预测的属性。

最后,我尝试通过在命令行上运行来获得预测:

java weka.classifiers.trees.J48 -t train.arff -T test.arff -p 0

它产生以下输出:

=== Predictions on test data ===

 inst#     actual  predicted error prediction
     1        2:1        2:1       0.939
     2        2:1        2:1       0.939

然后,我将预测列中“:”之后的数字用于预测由 inst# 标记的数据行。

以下是我的问题:

  1. 这个对吗?我担心“?” 正如我所读到的,它可能是估算的(尽管这可能仅在学习阶段)。

  2. Weka 是否支持多个预测?无论有多少字段标有“?” 我总是得到同一张表,每个实例只有一个预测值。

  3. Weka 可以生成一个完整的(预测的)ARFF 文件,还是我必须自己根据其结果构建这个文件?

如果我遗漏了一些明显的东西,请提前道歉并且任何指向相关文档的指针将不胜感激。

提前致谢!

4

1 回答 1

2

这 '?' 是未知值的通用标记。它可以用于训练和测试数据,并告诉 Weka 在这种特殊情况下,该值不可用。然后如何处理这些信息取决于实际的学习算法。所以回答你的问题:

  1. 否。要预测的属性是在通过-c参数训练模型时指定的。这个参数给出了要预测的属性的索引。默认情况下,它是最后一个,所以在你的情况下是“F”。
  2. 不,这实际上更多是实施的学习算法的问题,但 Weka 中没有一个支持这一点。这样做的方法是为不同的预测训练多个模型。
  3. 在这种情况下,这没有任何意义,因为您必须提供已知值才能让 Weka 能够评估分类器的准确性。如果这些值完全未知,则无法判断它有多好。

请注意,您可以保存经过训练的模型,然后使用它进行预测。后一页还包含您可以构建的知识流,以将其结果保存为 ARFF 文件。

于 2013-12-17T18:14:53.973 回答