Использование weka из командного файла - PullRequest
0 голосов
/ 03 мая 2018

Я хочу делать прогнозы на основе сохраненной Weka модели, не открывая Weka Explorer или интерфейсы Simple CLI. Поэтому я создал командный файл:

@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

Кто-то уже называл weka из оболочки Windows cmd ??

1 Ответ

0 голосов
/ 03 мая 2018

Я не использовал Weka в оболочке Windows, но вы можете сделать это в 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, так как кроссплатформенность легче обрабатывать, если вы хотите расширить свой код или что-то в этом роде.

...