在Weka Java API中构建和评估FilteredClassifier

在Weka Java API中构建和评估FilteredClassifier,java,machine-learning,weka,text-classification,Java,Machine Learning,Weka,Text Classification,当我试图构建和评估一个分类模型(NaiveBayesUpdateable)时,我遇到了一个关于Weka Java API的问题。CSV文件还被用作培训和测试数据集,包含ID、类和文本列(监督数据集)。目前使用的代码: String absAddressTrain = "MedhelpTrainDataset.csv"; String absAddressTest = "MedhelpTestDataset.csv"; //Reading the

当我试图构建和评估一个分类模型(NaiveBayesUpdateable)时,我遇到了一个关于Weka Java API的问题。CSV文件还被用作培训和测试数据集,包含ID、类和文本列(监督数据集)。目前使用的代码:

        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)...
我做错了什么

我们非常感谢您的回复。thx