簡體   English   中英

未找到 WEKA API LibSVM 類路徑

[英]WEKA API LibSVM ClassPath not found

我正在嘗試將 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,並將生成的 LIBSVM jar 文件以及 weka jar 文件添加到我的構建路徑中
  • 解釋如何將 LibSVM 與 weka gui 一起使用:我想以編程方式將 LibSVM 與 weka api 一起使用,它已經在 weka gui 中工作了,我不需要那個!!!
  • 說明如何為您的系統更改類路徑:我想將我的項目導出到一個 jar 文件並在我無權訪問系統類路徑的任何系統上運行它

我不明白但我認為如果有人詳細解釋可能會起作用的可能解決方案:

  • https://stackoverflow.com/a/13766120/5006670在這篇文章中提到從 SVNLib(我想是 SVM?)獲取 .class 文件並將這些文件添加到我的構建路徑中。 我不明白他在談論哪些文件,以及如果我找到它我將如何編譯 make 文件。 但這聽起來像我的錯誤信息。

  • https://weka.wikispaces.com/LibSVM談論使用反射。 我不確定這是如何使用的

  • 使用批處理文件與 LibSVM.jar 一起使用 -classpath 命令啟動 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. 搜索數小時並失敗
  2. 在論壇上提問
  3. 再嘗試 5 分鍾並成功

解決方案:有 2 個! weka 包文件夾中的 LibSVM.jar 文件,您需要兩者。 因此,對於所有嘗試使用 weka 包管理器使用 LibSVM 的人,請轉到: (HOME)\\wekafiles\\packages\\LibSVM 在那里您可以找到第一個 LibSVM.jar

現在去: (HOME)\\wekafiles\\packages\\LibSVM\\lib 在這里你會找到 libsvm.jar

將這兩個 JAR 添加到您的構建路徑中!!!

你好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM