나는 weka에 상당히 새로운 편이지만, 나는 순진한 베이와 자바에서 작업했다. 나는 J48을 사용하기를 바랬다. 그리고이 에러를 계속 실행했다.Weka- 배열 인덱스 바운스
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