我需要自动从训练好的分类器中获取阈值曲线,因此我要弄清楚如何使用命令行执行此操作(目前使用Weka的SimpleCLI)。根据{{1}}的输出,我尝试使用java weka.classifiers.functions.Logistic -h
参数,描述为:
-threshold-file
这是我尝试从SimpleCLI执行的行(为便于阅读而分为两部分):
-threshold-file <file>
The file to save the threshold data to.
The format is determined by the extensions, e.g., '.arff' for ARFF
format or '.csv' for CSV.
这给了我这个:
java weka.classifiers.functions.Logistic -t ".\data\iris.arff" -no-cv -R 1.0E-8 -M -1 \
-threshold-file "C:\Temp\somefile.csv"
或者这个(或两者):
java.lang.NullPointerException
(从Windows cmd.exe执行此操作会给我大致相同的消息。请注意,我在Windows 7计算机(64位)和Java 7(更新55)中使用Weka 3.7.11。)
请注意,删除最后一部分会使命令正常,但不会创建所需的阈值文件。
我尝试过这一行的许多变种,结果相同。我不熟悉java。我需要知道我是怎么做错的。
提前致谢。
更新:有人向我指出,weka.classifiers.evaluation.ThresholdCurve.getCurve(ThresholdCurve.java:125)
weka.classifiers.evaluation.Evaluation.evaluateModel(Evaluation.java:1739)
weka.classifiers.Evaluation.evaluateModel(Evaluation.java:650)
weka.classifiers.AbstractClassifier.runClassifier(AbstractClassifier.java:359)
weka.classifiers.functions.Logistic.main(Logistic.java:1134)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
weka.gui.SimpleCLIPanel$ClassRunner.run(SimpleCLIPanel.java:199)
at weka.classifiers.evaluation.ThresholdCurve.getCurve(ThresholdCurve.java:125)
at weka.classifiers.evaluation.Evaluation.evaluateModel(Evaluation.java:1739)
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:650)
at weka.classifiers.AbstractClassifier.runClassifier(AbstractClassifier.java:359)
at weka.classifiers.functions.Logistic.main(Logistic.java:1134)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at weka.gui.SimpleCLIPanel$ClassRunner.run(SimpleCLIPanel.java:199)
行是:
weka.classifiers.evaluation.ThresholdCurve.getCurve(ThresholdCurve.java:125)
(source)
所以似乎问题出现了,因为根本没有预测。我不知道为什么会发生这种情况以及如何扭转它。
答案 0 :(得分:1)
用于调用简单cli分类器的代码不会生成任何评估结果,您可以根据该结果获得阈值曲线。
您可以执行以下操作。