我可以修复你那里的代码,但这对你没有多大好处。MOA有自己选择的任务和评估器,用于在更高级别上运行这些实验。这就是如何正确运行评估,而不是深入代码。我将假设几件事:
-
我们使用
PairedLearners
作为我们的分类器。
-
我们评估了流分类性能。
-
我们在
预测序列
(顺序)方式,即训练,然后对序列中的每个示例进行测试。
因此,我们可以非常简单地定义我们的任务,如下所示。
public class PairedLearnersExample {
public static void main(String[] args) {
ArffFileStream fs = new ArffFileStream(PairedLearnersExample.class.getResource("abalone.arff").getFile(), -1);
fs.prepareForUse();
PairedLearners learners = new PairedLearners();
BasicClassificationPerformanceEvaluator evaluator = new BasicClassificationPerformanceEvaluator();
EvaluatePrequential task = new EvaluatePrequential();
task.learnerOption.setCurrentObject(learners);
task.streamOption.setCurrentObject(fs);
task.evaluatorOption.setCurrentObject(evaluator);
task.prepareForUse();
LearningCurve le = (LearningCurve) task.doTask();
System.out.println(le);
}
}
如果你想做其他任务,你可以很高兴地调出评估者、流和学习者来完成你想做的任何事情。
如果您参考
MOA Manual
你会看到,我所做的一切都是模仿命令行命令——如果你愿意,你也可以在命令行上执行这个评估。
例如
java -cp .:moa.jar:weka.jar -javaagent:sizeofag.jar moa.DoTask \
"EvaluatePrequential -l PairedLearners \
-e BasicClassificationPerformanceEvaluator \
-s (ArffFileStream -f abalone.arff) \
-i 100000000 -f 1000000" > plresult_abalone.csv