未找到WEKA API LibSVM ClassPath

Has*_*rko 0 java classpath weka libsvm

我正在尝试将LibSVM与Weka API一起使用.

我的系统: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;
}
}
Run Code Online (Sandbox Code Playgroud)

从这里调用代码:

double error = LibSVMClassifier.buildModel(trainDataSet);

我的问题:当我运行我的代码并首先使用我的J48分类器(最后的代码)和之后的LibSVM一切正常.

如果我先运行LibSVM,我会收到以下错误:

java.lang.Exception:libsvm类不在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)

如果我将项目导出到可运行的jar并在没有安装weka的另一台机器上使用它,如果我首先运行J48算法,也会发生错误.所以不管我什么都不能在另一台机器上使用LibSVM.

我已经阅读了有关此问题的所有其他问题,但对我来说没有解决方案.为了防止答案在这里无法帮助我做一些不起作用的事情:

  • 解释如何将库添加到项目中:Ive使用weka的包管理器来安装LibSVM,并将生成的jar文件添加到LIBSVM AS WELL AS weka jar文件到我的构建路径
  • 解释如何将libSVM与weka gui一起使用:我想以编程方式将libSVM与weka api一起使用,它已经在weka gui中运行了我不需要它!
  • 解释如何更改系统的类路径:我想将项目导出到jar文件并在任何系统上运行它我无法访问系统类路径

可能的解决方案,我不理解,但我认为如果有人详细解释可能会有效:

  • /sf/answers/963628431/在这篇文章中提到从SVNLib获取.class文件(我想是SVM?)并将它们添加到我的构建路径中.我不明白他说的是哪些文件,以及如果我找到它,我将如何编译make文件.但这听起来像我的错误信息.

  • https://weka.wikispaces.com/LibSVM谈论使用反射.我不知道如何使用它

  • 使用批处理文件与带有-classpath命令的LibSVM.jar一起启动jar文件

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;
}
}
Run Code Online (Sandbox Code Playgroud)

我的构建路径

Has*_*rko 5

好的,步骤魔术如何工作:

  1. 搜索小时并失败
  2. 在论坛上提问
  3. 再尝试5分钟并取得成功

解决方案:有2个!weka包文件夹中的LibSVM.jar文件,你需要两个.因此,对于尝试使用Weka包管理器使用LibSVM的所有人,请访问:(HOME)\ wekafiles\packages\LibSVM在那里您可以找到第一个FIRST LibSVM.jar

现在转到:(HOME)\ wekafiles\packages\LibSVM\lib这里你会发现libsvm.jar

将这些JAR添加到您的构建路径中!

问候