我试图通过命令行让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}@data0,0,0,0,0,00,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}@data0,?,0,0,0,00,?,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#的数据行的预测值。
我的问题如下:
-
这是正确的吗?我对“?”感到担忧,因为我读到它可能会被填补(尽管这可能只在学习阶段发生)。
-
Weka支持多重预测吗?无论标记了多少个“?”字段,我总是得到相同的表格,每个实例只有一个预测值。
-
Weka能生成一个完整的(预测的)ARFF文件,还是我必须从它的结果中自己构建这个文件?
如果我错过了什么明显的东西,提前道歉,任何指向相关文档的指导都将不胜感激。
提前感谢!
回答:
“?”是一个未知值的通用标记。它可以用于训练和测试数据,并告诉Weka在这种特定情况下,值不可用。然后如何处理这些信息取决于实际的学习算法。所以回答你的问题:
- 不是的。预测的属性是在训练模型时通过
-c
参数指定的。这个参数给出了要预测的属性的索引。默认情况下,它是最后一个,所以在你的例子中是’F’。 - 不是的。这实际上是实现的学习算法的问题,但Weka中的算法都不支持这一点。做法是为不同的预测训练多个模型。
- 在这种情况下这是没有意义的,因为你必须提供已知的值,以便Weka能够评估分类器的准确性。如果值完全未知,就无法判断它的好坏。
请注意,你可以保存一个训练好的模型,然后使用它进行预测。后一个页面还包含了你可以构建的知识流,以将这些结果保存为ARFF文件。