そのため、テスト インスタンスで分類器のパフォーマンスを評価しようとしています。ROC の下の領域を取得しようとすると、次のエラーがスローされます。
Java.lang.NullPointerException で weka.classifiers.evaluation.ThresholdCurve.getROCArea(ThresholdCurve.java:268) で weka.classifiers.Evaluation.areaUnderROC(Evaluation.java:382) で Classifier_Search.runAda(Classifier_Search.java:74) で Classifier_Search .acrossTest(Classifier_Search.java:142) at Classifier_Search.main(Classifier_Search.java:511) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl .invoke (不明なソース) で java.lang.reflect.Method.invoke (不明なソース) で 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 ) を調べると、 evaluateClassifier メソッドで areaUnderROC を設定する必要があると書かれています。そのような方法は存在しません。他の同様のメソッド (falsePositive など) は問題なく機能します。誰かがこの問題に遭遇しましたか? OldNabble (Weka のヘルプ サイト) で何も見つかりません。
ありがとう!
編集:明確にするために、テストとトレーニングは両方とも、次のコードで作成されたインスタンス オブジェクトです。
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 ファイルから読み取られます。通常、test または train に問題がある場合、ここでエラーがスローされます。