所以我试图评估分类器在测试实例上的性能,当我尝试获取 ROC 下的区域时,会引发以下错误:
Java.lang.NullPointerException at weka.classifiers.evaluation.ThresholdCurve.getROCArea(ThresholdCurve.java:268) at weka.classifiers.Evaluation.areaUnderROC(Evaluation.java:382) at Classifier_Search.runAda(Classifier_Search.java:74) at Classifier_Search .acrossTest(Classifier_Search.java:142) 在 Sun.reflect.NativeMethodAccessorImpl 的 Classifier_Search.main(Classifier_Search.java:511) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl .invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)
引发错误的代码是这样的:
Evaluation eval = new Evaluation(train);
String[] options = {"-P 100", "-S 1", "-I " + it, "-W weka.classifiers.trees.DecisionStump"};
AdaBoostM1 cls = new AdaBoostM1();
cls.setOptions(options);
cls.buildClassifier(train);
eval.evaluateModel(cls, test);
int index = test.classIndex();
return eval.areaUnderROC(index);
当我查找用于评估的 javadoc(用于评估的javadoc)时,它说 areaUnderROC 需要由 evaluateClassifier 方法设置。不存在这样的方法。其他类似的方法(例如 falsePositive)也可以正常工作。有没有人遇到过这个问题?我在 OldNabble(Weka 的帮助网站)上找不到任何东西。
谢谢!
编辑:澄清一下,测试和训练都是使用以下代码创建的 Instances 对象:
private static Instances readFile(File filename) throws IOException
{
CSVLoader loader = new CSVLoader();
loader.setSource(filename);
Instances data = loader.getDataSet();
data.setClassIndex(data.numAttributes() - 1);
return data;
}
它们是从 .csv 文件中读取的。通常,如果测试或训练有问题,则会在此处抛出错误。