Java 使用weka';创建阈值文件;s命令行
我需要从经过训练的分类器中自动获取阈值曲线,因此我正在研究如何使用命令行(目前使用的是Weka的SimpleCLI)来实现这一点。根据Java 使用weka';创建阈值文件;s命令行,java,command-line,machine-learning,classification,weka,Java,Command Line,Machine Learning,Classification,Weka,我需要从经过训练的分类器中自动获取阈值曲线,因此我正在研究如何使用命令行(目前使用的是Weka的SimpleCLI)来实现这一点。根据java weka.classifiers.functions.Logistic-h的输出,我尝试使用-threshold文件参数,如下所述: -threshold-file <file> The file to save the threshold data to. The format is determined by the ex
java weka.classifiers.functions.Logistic-h的输出,我尝试使用-threshold文件
参数,如下所述:
-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.lang.NullPointerException
或者这个(或者两者都有):
(从Windows cmd.exe执行此命令时,我得到的消息大致相同。请注意,我在Windows 7计算机(64位)和Java 7(更新55)中使用的是Weka 3.7.11。)
请注意,删除最后一部分将使命令正常工作,但不会创建所需的阈值文件
我尝试过这一系列的许多变体,结果都是一样的。我不熟悉java。我需要的是知道我是怎么做的
提前谢谢
更新:有人向我指出,weka.classifiers.evaluation.ThresholdCurve.getCurve(ThresholdCurve.java:125)
行是:
if ((predictions.size() == 0)
|| (((NominalPrediction) predictions.get(0)).distribution().length <= classIndex)) {
return null;
}
if((predictions.size()==0)
||(((NominalPrediction)predictions.get(0)).distribution().length用于调用简单cli分类器的代码不会生成任何计算结果,您可以根据这些结果获得阈值曲线。
您可以执行以下操作
- 删除-no cv参数
- 使用-T选项指定测试文件
非常感谢@UditG,你说得对。我仍然不需要为培训指定测试文件,因为我需要它。我发现的另一个选项是:使用-t选项(-t.\data\iris.arff
)指定用于培训的同一文件。即使使用-no-cv
选项,这也可以工作。
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)
if ((predictions.size() == 0)
|| (((NominalPrediction) predictions.get(0)).distribution().length <= classIndex)) {
return null;
}