2013-07-18 21 views
6

Sto cercando di usare un classificatore LibSVM-based utilizzando Weka, ma ho ottenuto questo errore:errore Weka "non può gestire classe numerico" in codice Java utilizzando LibSVM

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 

questo è il mio codice:

australian.txt è un esempio preso qui: LibSVM DataSets qualcuno può spiegarmi dov'è l'errore? grazie in anticipo

risposta

7

Non riesco a criticare l'intero approccio, ma un elemento essenziale che ti manca sta dicendo a SVM che vuoi fare la regressione. (Contrariamente all'impressione di molte persone, LibSVM può fare di regressione, vedere http://www.csie.ntu.edu.tw/~cjlin/libsvm/ - "LIBSVM è & hellip; per & hellip; regressione (epsilon-SVR, nu-SVR) & hellip;")

Hai bisogno di fare questo per dire che faccia di regressione:

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

/Rob

PS - ho ancora ottenuto l'errore 'Impossibile gestire classe numerica' fino a quando ho codificato tutti i parametri utilizzando l'approccio orientato agli oggetti Java, usando metodi sul LibSVM oggetto, invece di utilizzare l'approccio "Opzioni" basato su String. Non so perché questo sia, e potrebbe essere una falsa pista, ma è così.

-1

Impostare l'indice di classe della colonna che si desidera prevedere. Quindi prova questo,

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