2013-07-18 7 views
6

Ich versuche, einen Klassifikator zu verwenden-LibSVM Basis Weka, aber ich habe diesen Fehler:Weka Fehler „kann nicht numerische Klasse behandeln“ in Java-Code mit 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 

dies ist mein Code:

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 ist ein Beispiel hier: LibSVM DataSets kann mir jemand erklären, wo ist der Fehler? Vielen Dank im Voraus

Antwort

7

Ich kann Ihre gesamte Vorgehensweise nicht kritisieren, aber ein wesentliches Element, das Sie vermissen, teilt SVM mit, dass Sie eine Regression durchführen möchten. (Im Gegensatz zu vielen Menschen Eindruck, LibSVM kann Regression tun, siehe http://www.csie.ntu.edu.tw/~cjlin/libsvm/ - "LIBSVM ist & hellip; für & hellip; Regression (epsilon-SVR, nu-SVR) & hellip;")

Sie müssen dies tun, um zu sagen, es Regression zu tun:

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

/rob

PS - ich habe immer noch die Fehlermeldung ‚Kann nicht numerische Klasse behandeln‘, bis ich alle Parameter codierte, um die Java objektorientierten Ansatz, mit Methoden auf dem LibSVM Objekt, anstatt den String-basierten "Optionen" -Ansatz zu verwenden. Ich weiß nicht, warum das so ist, und vielleicht ein Ablenkungsmanöver, aber da ist es.

-1

Legen Sie den Klassenindex der Spalte fest, die Sie vorhersagen möchten. Also versuchen Sie es einfach,

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