2017-02-08 43 views
0

我對weka相當陌生,但是我在java中使用樸素貝葉斯 - 我已經轉向想要使用J48,並且一直在遇到這個錯誤。Weka-陣列指數出界

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

回答