Weka-数组索引超出界限

时间:2017-02-08 22:21:01

标签: java weka

我是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"));

1 个答案:

答案 0 :(得分:0)