如何将LibSVM导入我的Java代码

时间:2017-07-07 14:26:46

标签: java weka libsvm

在Java编程中,我们首先应该将weka.jar添加到我们的类路径中,因此我们可以通过以下代码的形式在WEKA中调用所有分类或聚类算法,

import weka.classifiers.trees.RandomForest; 
...
RandomForest rf = new RandomForest(); // RandomForest object

但不幸的是,我们不能用这种方式导入LibSVM算法,因为weka.jar中没有这样的类。

所以,我的问题是如何将LibSVM导入我的Java代码?任何帮助将不胜感激:))

2 个答案:

答案 0 :(得分:2)

首先,我想说有很多方法可以解决这个问题。我提到的解决方案非常简单,但StackOverflow的其他答案并没有详细描述,浪费了太多时间来验证。所以我很高兴与所有WEKA初学者分享:)

a)从Maven资源库中心下载LibSVM.jar。请注意,此LibSVM.jarChih-Chung Chang and Chih-Jen Lin;

开发的libsvm.jar不同

b)将LibSVM.jar添加到Java项目的类路径中;

c)在需要时调用分类器LibSVM,请参阅以下Java代码。

import weka.classifiers.functions.LibSVM; // contained in LibSVM.jar

String path = "file/train.arff";
Instances train = DataSource.read(path); // load the dataset
train.setClassIndex(train.numAttribute()-1); // set class index

LibSVM svm = new LibSVM(); // load the svm classifier
svm.buildClassifier(train);

Evaluation eval = new Evaluation(train);
eval.crossValidateModel(svm, train, 10, new Random(1)); // 10-fold cross-validation

答案 1 :(得分:0)

请参阅:https://weka.wikispaces.com/LibSVM

使用Weka的软件包管理器安装LibSVM。假设“weka.jar”在你当前的文件夹中,而不是运行它:

<!DOCTYPE html>
<meta charset="utf-8">
<head>
  <script src="jsnetworkx.js"></script>
  <script src="https://d3js.org/d3.v4.js"></script>
</head>
<body>

      <script>
      var G = new jsnx.Graph();

      G.addWeightedEdgesFrom([[2,3,10]]);
      G.addStar([3,4,5,6], {weight: 5}); 
      G.addStar([2,1,0,-1], {weight: 3});

     jsnx.draw(G, {
          element: '#canvas',  
          weighted: true,
          edgeStyle: {
              'stroke-width': 10
          }
     });
   </script>

</body>
</html>

在安装过程中,它会显示:

java -cp weka.jar weka.core.WekaPackageManager -install-package LibSVM

您可以看到某处安装了“LibSVM.jar”。就我而言,它位于:

[DefaultPackageManager] Tmp file: /tmp/LibSVM1.0.107382715397815864641.zip
[DefaultPackageManager] Installing: Description.props
[DefaultPackageManager] Installing: LibSVM.jar
[DefaultPackageManager] Installing: build_package.xml
...