Я довольно новичок в weka, но у меня это работало в java с наивными байками - я переключился на желание использовать J48 и продолжаю сталкиваться с этой ошибкой.Weka-Array Index Из-за границы
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1236
Это на линии:
double clsLabel = tree.classifyInstance(unlabeled.instance(i));
Я пытался печати (unlabeled.instance (I)); и это дает мне пример. Просто, когда я пытаюсь использовать «classify instance», я получаю сообщение об ошибке.
Учебная часть программы работает нормально: я получаю распечатку из того, сколько ее правильно классифицировано и т. Д. Я попытался скопировать некоторые данные из моего тестового файла 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