2015-06-13 2 views
0

Я пытаюсь использовать 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; 
} 
} 

Мой путь сборки

ответ

5

Okay, steps how magic work:

  1. Search for hours and fail
  2. Ask on a forum
  3. Try for 5 more minutes and succeed

РЕШЕНИЕ: Есть 2! LibSVM.jar в папке пакета weka, и вам нужно ОБА. Так что для всех, которые пытаются использовать LibSVM с помощью менеджера ВЕКА пакета перейдите по ссылке: (HOME) \ wekafiles \ пакеты \ LibSVM Там вы найдете первый ПЕРВЫЙ LibSVM.jar

теперь переходим к: (HOME) \ wekafiles \ packages \ LibSVM \ lib здесь вы найдете libsvm.jar

ДОБАВИТЬ ОБ ЭТОМ JAR К ВАШЕЙ СТРОИТЕЛЬНОЙ ПУТЬ !!!

Приветствия

Смежные вопросы