12

我想在我的应用程序中使用带有 Weka 的 LibSVM 分类器。我怎么能(或者我在哪里可以找到好的例子)做到这一点?

4

5 回答 5

18

现在有点晚了,当然,但无论如何我都会回答。您必须在项目中使用 weka.jar、libsvm.jar 和 wlsvm.jar(libsvm 包装器)。因此,只需在构建路径或类路径或其他任何内容中包含所有 3 个 jar。

您可以从这里获取 wlsvm.jar:http: //ailab.ist.psu.edu/yasser/wlsvm.html

您可以从这里获得 weka:http ://www.cs.waikato.ac.nz/ml/weka/

你可以从这里获得 libsvm:http ://www.csie.ntu.edu.tw/~cjlin/libsvm/

我无法让它与 weka 3.7.7 或 3.7.8 一起使用,但我能够让它与 3.6.8(截至今天的最新稳定版本)一起使用。

另外,因为我必须从 svnlib 中获取 .class 文件,并将这些文件包含在我的项目的构建路径中。要构建 .class 文件,请使用 SVNLib/java 中的 make 文件。

这里有一小段代码可以帮助您入门:

        DataSource source = new DataSource(new File("mycsvinputfile"));
        System.out.println(source.getStructure());
        Instances data = source.getDataSet();

        // setting class attribute if the data format does not provide this information
        // For example, the XRFF format saves the class attribute information as well
        if (data.classIndex() == -1)
            data.setClassIndex(data.numAttributes() - 1);

        //initialize svm classifier
        LibSVM svm = new LibSVM();
        svm.buildClassifier(data);

祝你好运。

于 2012-12-07T15:33:21.097 回答
8

使用新版本,您只需要 weka.jar 并像这样调用 svm,

WekaPackageManager.loadPackages( false, true, false );
AbstractClassifier classifier = ( AbstractClassifier ) Class.forName(
            "weka.classifiers.functions.LibSVM" ).newInstance();

如果您更喜欢提供选项,请设置这样的选项

String options = ( "-S 0 -K 0 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.001 -P 0.1" );
String[] optionsArray = options.split( " " );
    classifier.setOptions( optionsArray );

最后训练分类器

classifier.buildClassifier( train );
于 2015-08-10T05:00:25.543 回答
5

使用最新版weka(3.7.9)的libSVM库,只需要使用weka应用的“包管理器”,安装libSVM包即可。

最后,从 java 项目中,您必须将“包管理器”创建的 LibSVM 库添加到类路径中。

通常它位于“ (HOME)\wekafiles\packages\LibSVM ”目录中。

于 2013-04-26T14:53:41.260 回答
5

事实证明,通过 Maven Central 提供的东西,weka 人员使用最新版本使我们的工作变得更加轻松。

只需从这里获取依赖项:http: //mvnrepository.com/artifact/nz.ac.waikato.cms.weka/LibSVM

就依赖关系而言,一切都会正常工作。不要乱用包装器并将罐子添加到类路径或类似的东西。

我使用的是 3.7.12 版本,但我认为它是可用的,因为包管理器功能已添加到 GUI。

于 2015-04-17T05:40:58.237 回答
3

按照这个链接结合 Weka 和 libsvm http://www.cs.iastate.edu/~yasser/wlsvm/

weka 可以很好地计算 ROC、recall 等……而 libsvm 可以很好地用于分类、回归等……

于 2013-04-14T14:01:08.527 回答