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

2022-09-05 00:18:52

我想在我的应用程序中将LibSVM分类器与Weka一起使用。我该如何(或在哪里可以找到好的例子)做到这一点?


答案 1

当然,现在有点晚了,但我还是会回答。你必须在你的项目中使用weka.jar,libsvm.jar和wlsvm.jar(libsvm wrapper)。因此,只需将所有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);

祝你好运。


答案 2

对于新版本,您只需要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 );

推荐