我是weka的新手,但是我在java中使用了朴素的bayes - 我已经切换到想要使用J48,并继续遇到这个错误。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1236
它就行了:
double clsLabel = tree.classifyInstance(unlabeled.instance(i));
我试过打印(unlabeled.instance(i));它给了我一个实例。每当我尝试使用"分类实例"我收到一个错误。
该程序的培训部分似乎工作正常 - 我打印出正确分类的数量等等。我尝试将我的测试arff文件中的一些数据复制到arff文件中被分类,并没有停止错误,所以我觉得我的arff文件被分类格式正常。
我将发布下面的其余代码 - 正如我所说,当我使用朴素的贝叶斯时它工作得很好。关于我为什么遇到这个问题的任何线索?
ConverterUtils.DataSource source = new ConverterUtils.DataSource("training.arff");
Instances train = source.getDataSet();
train.setClassIndex(train.numAttributes() - 1);
StringToWordVector stringToWord = new StringToWordVector();
stringToWord.setInputFormat(train);
Instances newData = Filter.useFilter(train, stringToWord);
J48 tree = new J48();
tree.buildClassifier(newData);
// evaluate classifier and print some statistics
Evaluation eval = new Evaluation(train);
train.setClass((newData.attribute("class")));
eval.evaluateModel(tree, newData);
System.out.println(eval.toSummaryString("\nResults\n======\n", false));
eval.crossValidateModel(tree, newData, 10, new Random(1));
Instances unlabeled = new Instances(new BufferedReader(new FileReader("input.arff")));
unlabeled.setClassIndex(unlabeled.numAttributes() - 1);
Instances labeled = Filter.useFilter(unlabeled, stringToWord);
for (int i = 0; i < unlabeled.size(); i++) {
double clsLabel = tree.classifyInstance(unlabeled.instance(i));
labeled.instance(i).setClassValue(clsLabel);
}
BufferedWriter writer = new BufferedWriter(new FileWriter("outputgroup.arff"));
答案 0 :(得分:0)
也许还有......你的arff文件有问题。
请查看WEKA-generated models does not seem to predict class and distribution given the attribute index。