2013-07-18 27 views
6

を使用してJavaコードで「数値クラスを扱うことができない」私はウェカを使用して分類器LIBSVMベースを使用しようとしているが、私はこのエラーを得た:ウェカ誤差は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 

これは私のコードです:

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)…")あなたが伝えるためにこれを行う必要

をそれは、回帰を行うには:

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

/奪う

PS - 私はLIBSVMのメソッドを使用して、Javaオブジェクト指向のアプローチを使用して、すべてのパラメータをコード化するまで、私はまだエラー「数値クラスを扱うことができない」しまいましたオブジェクトではなく、Stringベースの「オプション」アプローチを使用します。私はなぜこれが、そして赤いニシンかもしれないかもしれませんが、そこにあります。

-1

予測する列のクラスインデックスを設定します。だからこれを試してみてください。

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