2017-02-08 3 views
0

Я довольно новичок в 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")); 

ответ

0

Возможно, что еще есть место. неправильно с вашим файлом arff.

Посмотрите на WEKA-generated models does not seem to predict class and distribution given the attribute index.

+0

Не было ничего плохого в моем arff. Я применял фильтр для маркировки, а затем пытался классифицировать немаркированные. Я должен был использовать фильтр на немаркированном, а затем попытался его классифицировать. – Rachel

Смежные вопросы