2013-07-18 6 views
6

Próbuję użyć klasyfikator LibSVM opartego użyciu WEKA, ale mam ten błąd:błąd Weka „nie może obsługiwać klasę numeryczny” w kodzie Javy za pomocą 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 

To jest mój kod:

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 to przykład tutaj: LibSVM DataSets Czy ktoś może mi wyjaśnić, gdzie jest błąd? Z góry dzięki

Odpowiedz

7

Nie mogę krytykować całego twojego podejścia, ale jedną ważną rzeczą, której brakuje, jest poinformowanie SVM, że chcesz zrobić regresję. (Wbrew wrażeniu wielu ludzi, LibSVM może zrobić regresji; patrz http://www.csie.ntu.edu.tw/~cjlin/libsvm/ - "LIBSVM jest & hellip; za & hellip; regresji (epsilon-SVR, nu-SVR) & hellip;")

Trzeba to zrobić, aby powiedzieć to zrobić regresji:

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

/rob

PS - nadal mam błąd „nie można obsługiwać klasę numerycznej” dopóki nie kodowane wszystkich parametrów z wykorzystaniem podejścia obiektowego Java, przy użyciu metod na LibSVM obiekt, zamiast używać opartego na ciągach podejścia "Opcje". Nie wiem, dlaczego tak jest i może być czerwonym śledziem, ale jest.

-1

Ustaw indeks klasy kolumny, którą chcesz przewidzieć. Więc spróbuj tego,

i.setClassIndex(train.numAttributes() - 1); 
Powiązane problemy