使用weka的命令行创建阈值文件

时间:2014-06-05 20:25:14

标签: java command-line machine-learning classification weka

我需要自动从训练好的分类器中获取阈值曲线,因此我要弄清楚如何使用命令行执行此操作(目前使用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

所以似乎问题出现了,因为根本没有预测。我不知道为什么会发生这种情况以及如何扭转它。

1 个答案:

答案 0 :(得分:1)

用于调用简单cli分类器的代码不会生成任何评估结果,您可以根据该结果获得阈值曲线。

您可以执行以下操作。

  • 删除-no-cv参数。
  • 使用-T选项指定测试文件。