Java 使用weka';创建阈值文件;s命令行

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

我需要从经过训练的分类器中自动获取阈值曲线,因此我正在研究如何使用命令行(目前使用的是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 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;
}