Java weka.classifiers.Classifier.classifyInstance中的ArrayIndexOutOfBoundsException

Java weka.classifiers.Classifier.classifyInstance中的ArrayIndexOutOfBoundsException,java,weka,indexoutofboundsexception,Java,Weka,Indexoutofboundsexception,我写了这个方法。我想写一个贝叶斯网络,但是我在classifyInstance()方法上遇到了一个异常 这是我的密码: public static double bayesNet1(Dataset data, Dataset testingSet) throws Exception { Instances insts = convertTxtToARFF(data); K2 learner = new K2(); MultiNomialBMAEs

我写了这个方法。我想写一个贝叶斯网络,但是我在
classifyInstance()
方法上遇到了一个异常

这是我的密码:

public static double bayesNet1(Dataset data, Dataset testingSet) throws Exception {

        Instances insts = convertTxtToARFF(data);
        K2 learner = new K2();
        MultiNomialBMAEstimator estimator = new MultiNomialBMAEstimator();
        estimator.setUseK2Prior(true);

        EditableBayesNet bn = new EditableBayesNet(insts);
        bn.initStructure();
        learner.buildStructure(bn, insts);
        estimator.estimateCPTs(bn);

        double error = 0;

        Instances instsTest = convertTxtToARFF(testingSet);

        for(int i=0; i<instsTest.numInstances()-1; i++) {

        weka.core.Instance inst = instsTest.instance(i);

        double  predictedValue = bn.classifyInstance(inst);

        if(inst.value(inst.classIndex())!= predictedValue)

            error++;

        }

        return error/instsTest.numInstances();
    }
publicstaticdouble-bayesNet1(数据集数据,数据集测试集)引发异常{
实例insts=convertTxtToARFF(数据);
K2学习者=新K2();
多项式b统计量估计器=新的多项式b统计量();
估计器setUseK2Prior(真);
EditableBayesNet bn=新的EditableBayesNet(insts);
bn.initStructure();
学习者建筑结构(英国国民大学、印度科学院);
估计值。估计的CPT(bn);
双误差=0;
实例instsTest=convertTxtToARFF(测试集);

对于(int i=0;i我也有同样的问题。我的错误是我没有为测试数据设置类。就这么简单。

我发现在处理标称属性时,许多不同分类器的
distributionForInstance()
方法中通常会出现此错误

如果是这种情况,则可能是测试数据具有标称属性,且具有列车数据所缺少的属性值

在这种情况下,这实际上取决于您所做的事情的最佳决策。也许检查数据本身的一致性是第一步,然后您就可以开始了