未找到WEKA API LibSVM ClassPath

时间:2015-06-13 18:07:00

标签: 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;
}
}

从这里调用代码:

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。

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

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

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

  • https://stackoverflow.com/a/13766120/5006670在这篇文章中提到从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;
}
}

我的构建路径

1 个答案:

答案 0 :(得分:5)

  

好的,了解神奇的工作方式:

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

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

现在去: (HOME)\ wekafiles \包\ LIBSVM \ LIB 在这里你会找到libsvm.jar

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

问候