2017-02-08 16 views
0

私はwekaにはかなり新しいですが、私はこれをnaive bayesでjavaで動作させました。私はJ48を使いたいと思っていました。Weka-Array Index Out of Bounds

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1236 

それはライン上にある:私は印刷(unlabeled.instance(I))を試してみました

double clsLabel = tree.classifyInstance(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

多分まだsthがあります。あなたのarffファイルに間違いがあります。

WEKA-generated models does not seem to predict class and distribution given the attribute indexをご覧ください。

+0

私のarffには何も問題はありませんでした。私はラベルにフィルタを適用していたが、ラベルのないものを分類しようとしていた。私は、ラベルのないものにフィルタを使用して、それを分類しようとすべきでした。 – Rachel