2013-07-18 79 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);