この方法を書きました。ベイジアン ネットワークを書きたいのですが、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();
}
そして、ここに例外があります:
java.lang.ArrayIndexOutOfBoundsException: weka.classifiers.bayes.net.estimate.DiscreteEstimatorBayes.getProbability(DiscreteEstimatorBayes.java:106) で 4 weka.classifiers.bayes.net.estimate.SimpleEstimator.distributionForInstance(SimpleEstimator.java:183) でweka.classifiers.bayes.BayesNet.distributionForInstance(BayesNet.java:386) で weka.classifiers.Classifier.classifyInstance(Classifier.java:84) で ensembleClassifiersV2.EnsembleClassifierV2.bayesNet1(EnsembleClassifierV2.java:1090) で ensembleClassifiersV2.EnsembleClassifierV2.performing (EnsembleClassifierV2.java:800) at ensembleClassifiersV2.EnsembleClassifierV2.main(EnsembleClassifierV2.java:1267)
誰が何が間違っているのか教えてもらえますか?