如何在我的Java代码中使用LibSVM和Weka?
我想在我的应用程序中将LibSVM分类器与Weka一起使用。我该如何(或在哪里可以找到好的例子)做到这一点?
我想在我的应用程序中将LibSVM分类器与Weka一起使用。我该如何(或在哪里可以找到好的例子)做到这一点?
当然,现在有点晚了,但我还是会回答。你必须在你的项目中使用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);
祝你好运。
对于新版本,您只需要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 );