我想在我的应用程序中使用带有Weka的LibSVM分类器。我怎么能(或者我在哪里可以找到好的例子)这样做?
答案 0 :(得分:16)
现在有点晚了,当然,但无论如何我都会回答。您必须在项目中使用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);
祝你好运。
答案 1 :(得分:7)
对于新版本,你只需要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 );
答案 2 :(得分:4)
要将libSVM库与最新版本的weka(3.7.9)一起使用,您只需使用weka应用程序的“Package Manager”并安装libSVM软件包。
最后,从java项目中,您必须将“程序包管理器”创建的LibSVM库添加到类路径中。
通常位于“(HOME)\ wekafiles \ packages \ LibSVM ”目录中。
答案 3 :(得分:4)
事实证明,通过Maven Central提供的东西,weka家伙使我们的工作变得更轻松了。
只需从这里获得依赖: http://mvnrepository.com/artifact/nz.ac.waikato.cms.weka/LibSVM
并且一切都将依赖于依赖。没有搞乱包装并将jar添加到类路径或类似的东西。
我使用的是3.7.12版本,但我认为自从将程序包管理器功能添加到GUI以来它已经可用。
答案 4 :(得分:2)
按照此链接结合Weka和libsvm http://www.cs.iastate.edu/~yasser/wlsvm/
weka很好计算ROC,召回等等.... 和libsvm有利于分类,回归等...