首页 > 解决方案 > 从批处理文件中使用 weka

问题描述

我想在不打开 Weka Explorer 或简单 CLI 界面的情况下从 Weka 保存的模型中进行预测。所以我创建了一个批处理文件:

@ECHO ON

title Weka caller

set root=C:\Program Files\Weka-3-8\

cd /D %root%

java -classpath weka.jar weka.classifiers.functions.LinearRegression -T Z:\ARFF_FILES\TestSet_regression.arff -l Z:\WEKA_MODELS\Regression_model_03_05_2018.model -p 0

我有这个错误信息:

C:\Program Files\Weka-3-8>java -classpath weka.jar weka.classifiers.functions.LinearRegression -T Z:\ARFF_FILES\TestSet_regression.arff -l Z:\WEKA_MODELS\Regression_model_03_05_2018.model -p 0
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: no/uib/cipr/matrix/Matrix
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.privateGetMethodRecursive(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: no.uib.cipr.matrix.Matrix
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more

有人已经从 Windows cmd shell 调用 weka 了吗?

标签: windowsbatch-filecommand-lineweka

解决方案


我没有在 Windows shell 中使用 Weka,但你可以在 Linux 中使用的方法如下:

#!/bin/bash
export CLASSPATH=/home/stalai/Weka/weka-3-9-1/weka.jar:.
echo $CLASSPATH
# Code that loops through various classification routines and saves the results in a corresponding text file
# Defult values
CV=103      # Cross Validation: change to 10 or keep leave one out cross validation [change by (-x)]
files=dataset.csv   # Look at the required .csv files and process them 
for i in {100..10};
 do
   java weka.classifiers.meta.AttributeSelectedClassifier -t $files -x $CV >> $CorAttEvalResults -E "weka.attributeSelection.CorrelationAttributeEval " -S "weka.attributeSelection.Ranker -T -1.7976931348623157E308 -N $i" -W weka.classifiers.lazy.IBk -- -K 1 -W 0 -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\""
done

在此示例中,我们通过使用基于相关性的特征排名器将前 100 个特征消除到 10 个,并在留一交叉验证后将结果保存在 CorAttEvalResults 中。CV=103 实际上是 dataset.csv 文件中的类总数。

确定所需模型后,更改相应的标志值并重新加载模型。如果您需要更多帮助,请告诉我!

另外,我建议使用 CSV 而不是 Arff,因为如果您想扩展代码或类似的东西,它更容易处理跨平台。


推荐阅读