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