2017-02-08 1 views
0

나는 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")); 

답변