Я пытаюсь использовать LibSVM с Weka API.WEKA API LibSVM ClassPath не найден
Моя система: Win7 Weka 3.7.12 LibSVM 1.0.6 (установлен с помощью диспетчера пакетов)
Мой код:
import java.io.File;
import java.util.Random;
import javax.swing.JOptionPane;
import weka.classifiers.Evaluation;
import weka.classifiers.functions.LibSVM;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
public class LibSVMClassifier {
// Method to build a SVM classifier with a given data file
public static double buildModel(File dataSet){
// new instance of LibSVM
LibSVM clsSVM = new LibSVM();
try {
Instances data = DataSource.read(dataSet.getAbsolutePath());
// Sets the label feature
data.setClassIndex(data.numAttributes()-1);
String opts = "-S 0 -K 0 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.0010 -P 0.1";
// set the options for the algorithm
clsSVM.setOptions(weka.core.Utils.splitOptions(opts));
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(clsSVM, data, 2, new Random(1));
return eval.pctIncorrect();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
e.printStackTrace();
}
return 100;
}
}
код называется здесь:
double error = LibSVMClassifier.buildModel(trainDataSet);
Моя проблема: Когда я запускаю свой кода и сначала используйте мой классификатор J48 (код в конце), а затем LibSVM все работает нормально.
Если я бег LibSVM первым я получаю следующее сообщение об ошибке:
java.lang.Exception: libsvm classes not in CLASSPATH! weka.classifiers.functions.LibSVM.buildClassifier(LibSVM.java:1636) weka.classifiers.evaluation.Evaluation.crossValidateModel(Evaluation.java:764) weka.classifiers.Evaluation.crossValidateModel(Evaluation.java:374) totd.BuildModel.LibSVMClassifier.buildModel(LibSVMClassifier.java:34) totd.GUI.Gui$5.actionPerformed(Gui.java:215)
Если я экспортировать проект в runable банки и использовать его на другую машину без WEKA установившей ошибки также возникает, если я бегу J48. Поэтому независимо от того, что я не могу использовать LibSVM на другой машине.
Я прочитал все другие вопросы, касающиеся этой проблемы, но для меня не было никакого решения. Для того, чтобы предотвратить ответы, которые не помогут мне здесь некоторые вещи, которые не будут работать:
- Объяснение как добавить библиотеку к проекту: Ive использовал менеджер пакетов от WEKA установить LibSVM и я добавил в результате банку файл для LIBSVM AS WELL AS файл weka jar на мой путь построения
- Объяснение, как использовать LibSVM с weka gui: Я хочу использовать LibSVM вместе с weka api программным способом, он уже работает в weka gui Мне не нужно что!!!
- Объяснение, как изменить путь к классам для вашей системы: Я хочу, чтобы экспортировать свой проект в файл банки и запустить его на любой системе, я не имею доступ к классу системы пути
Возможных решений, которые я не понимаю но я думаю, что мог бы работать, если кто-то подробно объясняет:
https://stackoverflow.com/a/13766120/5006670 в этом посте упоминается получить .class файлы из SVNLib (я полагаю SVM?) и добавляя их к моему buildpath. Я не понимаю, к каким файлам он говорит, и как я буду компилировать файл make, если я его найду. Но это звучит как мое сообщение об ошибке.
https://weka.wikispaces.com/LibSVM переговоры об использовании отражающий. Im не уверен, как это используется
с использованием командного файла, чтобы запустить файл jar вместе с LibSVM.Кувшин с -classpath командой
J48 Код:
import java.io.File;
import javax.swing.JOptionPane;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.classifiers.trees.J48;
import weka.classifiers.Evaluation;
import java.util.Random;
public class J48Classifier {
// Method to build a J48 classifier with a given data file
public static double buildModel(File dataSet){
// new instance of tree
J48 clsJ48 = new J48();
try {
Instances data = DataSource.read(dataSet.getAbsolutePath());
// Sets the label feature
data.setClassIndex(data.numAttributes()-1);
String[] options = new String[1];
// unpruned tree
options[0] = "-U";
// set the options for the algorithm
clsJ48.setOptions(options);
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(clsJ48, data, 2, new Random(1));
return eval.pctIncorrect();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
e.printStackTrace();
}
return 100;
}
}
Мой путь сборки