未找到 WEKA API LibSVM 类路径

Posted

技术标签:

【中文标题】未找到 WEKA API LibSVM 类路径【英文标题】:WEKA API LibSVM ClassPath not found 【发布时间】:2015-08-29 13:50:30 【问题描述】:

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

我的系统: Win7 维卡 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 以及 weka jar 文件到我的构建路径 说明如何将 LibSVM 与 weka gui 一起使用:我想以编程方式将 LibSVM 与 weka api 一起使用,它已经在 weka gui 中工作我不需要了!!! 说明如何更改系统的类路径:我想将我的项目导出到一个 jar 文件并在我无权访问系统类路径的任何系统上运行它

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

https://***.com/a/13766120/5006670 在这篇文章中提到从 SVNLib(我想是 SVM?)获取 .class 文件并将这些文件添加到我的构建路径中。我不明白他在说哪些文件,如果我要找到它,我将如何编译 make 文件。但这听起来像是我的错误信息。

https://weka.wikispaces.com/LibSVM 谈论使用反射。我不确定这是如何使用的

使用批处理文件启动 jar 文件以及带有 -classpath 命令的 LibSVM.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】:

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

    搜索小时并失败 在论坛上提问 再试5分钟就成功了

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

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

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

问候

【讨论】:

以上是关于未找到 WEKA API LibSVM 类路径的主要内容,如果未能解决你的问题,请参考以下文章

使用 LibSVM 的 Java 代码中的 Weka 错误“无法处理数字类”

LibSVM 使用 Weka 命令行

如何在我的 Java 代码中使用带有 Weka 的 LibSVM?

带有 IKVM 的 C# 中 Weka 的 LIbSVM

WEKA SMO 与 LIBSVM

如何在 weka 中使用 libsvm