У меня проблема с Weka Java API, когда я пытаюсь построить и оценить модель классификации (NaiveBayesUpdateable). Также CSV-файлы использовались в качестве набора данных для обучения и тестирования с идентификаторами столбцов, Class и Text (набор данных Supervised). Код, используемый в настоящее время:
String absAddressTrain = "MedhelpTrainDataset.csv";
String absAddressTest = "MedhelpTestDataset.csv";
//Reading the trained dataset
File inputFileTrain = new File(absAddressTrain);//Training corpus file
CSVLoader sourceTrain = new CSVLoader();
sourceTrain.setFile(inputFileTrain);
Instances dataTrain = sourceTrain.getDataSet(); // Read in training documents
dataTrain.setClassIndex(dataTrain.numAttributes() - 1);
LOG.info("Instances : " + dataTrain.toString());
//Reading the test dataset
File inputFileTest = new File(absAddressTest);//Training corpus file
CSVLoader sourceTest = new CSVLoader();
sourceTest.setFile(inputFileTest);
Instances dataTest = sourceTest.getDataSet(); // Read in training documents
dataTest.setClassIndex(dataTest.numAttributes() - 1);
LOG.info("Instances : " + dataTest.toString());
//the base classifier
NaiveBayesUpdateable nb = new NaiveBayesUpdateable();
//the filter
StringToWordVector filter = new StringToWordVector();
filter.setInputFormat(dataTrain);
filter.setIDFTransform(true);
LovinsStemmer stemmer = new LovinsStemmer();
filter.setStemmer(stemmer);
filter.setLowerCaseTokens(true);
StringToWordVector filter2 = new StringToWordVector();
filter2.setInputFormat(dataTest);
filter2.setIDFTransform(true);
LovinsStemmer stemmer2 = new LovinsStemmer();
filter2.setStemmer(stemmer2);
filter2.setLowerCaseTokens(true);
//Create the FilteredClassifier object
FilteredClassifier fc = new FilteredClassifier();
//specify filter
fc.setFilter(filter);
//specify base classifier
fc.setClassifier(nb);
//Build the meta-classifier
fc.buildClassifier(dataTrain);
LOG.info("Tree : " + nb);
Evaluation eval = new Evaluation(dataTrain);
eval.evaluateModel(fc, dataTest);
LOG.info(eval.toSummaryString("\nResults\n======\n", false));
LOG.info("F-measure : "+eval.weightedFMeasure());
LOG.info("precision : "+eval.weightedPrecision());
LOG.info("recall : "+eval.weightedRecall());
При запуске этого фрагмента кода была получена следующая ошибка:
Thu Mar 12 11:40:55 MUT 2020
There was an unexpected error (type=Internal Server Error, status=500).
Index 1230 out of bounds for length 1230
java.lang.ArrayIndexOutOfBoundsException: Index 1230 out of bounds for length 1230
at weka.classifiers.evaluation.Evaluation.updateMargins(Evaluation.java:4488)
at weka.classifiers.evaluation.Evaluation.updateStatsForClassifier(Evaluation.java:4268)
at weka.classifiers.evaluation.Evaluation.evaluationForSingleInstance(Evaluation.java:1905)
at weka.classifiers.evaluation.Evaluation.evaluationForSingleInstance(Evaluation.java:1959)
at weka.classifiers.evaluation.Evaluation.evaluateModelOnceAndRecordPrediction(Evaluation.java:1999)
at weka.classifiers.evaluation.Evaluation.evaluateModel(Evaluation.java:1874)
at mu.socialMedia.mining.building_model.BuildingModel.buildTweetsModel2(BuildingModel.java:286)
at mu.socialMedia.mining.controller.rest.restController.buildTweetsModel2(restController.java:338)...
Что я делаю неправильно?
Любой ответ высоко ценится. ТНХ