使用LibSVM在Java代码中出现Weka错误“无法处理数字类”

时间:2013-07-18 10:16:40

标签: java classification weka libsvm

我正在尝试使用基于LibSVM的分类器使用Weka,但是我遇到了这个错误:

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 任何人都可以解释我的错误在哪里? 提前谢谢

2 个答案:

答案 0 :(得分:7)

我不能批评你的整个方法,但是你缺少的一个基本项目是告诉SVM你想做回归。 (与许多人的印象相反,LibSVM 可以进行回归;请参阅http://www.csie.ntu.edu.tw/~cjlin/libsvm/ - " LIBSVM是... for ...回归(epsilon-SVR,nu-SVR)...... ")

你需要这样做才能告诉它做回归:

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

/抢劫

PS - 我仍然无法处理数字课程'错误,直到我使用面向Java面向方法编码所有参数,使用LibSVM对象上的方法,而不是使用基于字符串的"选项"做法。我不知道为什么会这样,而且可能是红鲱鱼,但它确实存在。

答案 1 :(得分:-1)

设置要预测的列的类索引。所以试试吧,

i.setClassIndex( train.numAttributes() - 1 );
相关问题