2013-07-18 58 views
6

我试图用一个分类使用的Weka基于LIBSVM“无法处理数字类”中的Java代码,但我得到这个错误:Weka的错误使用SVM

Exception in thread "main" weka.core.UnsupportedAttributeTypeException:weka.classifiers.functions.LibSVM: Cannot handle numeric class! 
    at weka.core.Capabilities.test(Unknown Source) 
    at weka.core.Capabilities.test(Unknown Source) 
    at weka.core.Capabilities.test(Unknown Source) 
    at weka.core.Capabilities.testWithFail(Unknown Source) 
    at weka.classifiers.functions.LibSVM.buildClassifier(Unknown Source) 
    at imgclassifier.ImgClassifier.main(ImgClassifier.java:45) 
Java Result: 1 

这是我的代码:

try { 

    File f = new File("australian.txt"); 
    LibSVMLoader loader = new LibSVMLoader(); 
    loader.setSource(f); 
    Instances i = loader.getDataSet(); 

    LibSVM svm = new LibSVM(); 
    svm.buildClassifier(i); 

}catch (IIOException e) { 
    e.printStackTrace(); 
} 

australian.txt就是这里采用的一个例子:LibSVM DataSets 任何人都可以解释我错误在哪里? 在此先感谢

回答

7

我不能批评你的整个方法,但你缺少的一个重要项目是告诉SVM你想做回归。 (出乎很多人的印象中,LIBSVM 可以做回归;看到http://www.csie.ntu.edu.tw/~cjlin/libsvm/ - “LIBSVM是…为…回归(ε-己SVR,NU-SVR)和hellip;”)

你需要这样做告诉它做的回归:

svm.setSVMType(new SelectedTag(LibSVM.SVMTYPE_EPSILON_SVR, LibSVM.TAGS_SVMTYPE)); // -S 3=epsilon-SVR 

/抢

PS - 我还是得到了“无法处理数字类的错误,直到我编码使用Java面向对象方法的所有参数,使用的LIBSVM方法对象,而不是使用基于字符串的“选项”方法。我不知道这是为什么,可能是一只红鲱鱼,但它是。

-1

设置要预测的列的类索引。所以试试吧,

i.setClassIndex(train.numAttributes() - 1);