未找到 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 错误“无法处理数字类”