2013-05-09 57 views
0

我寫過這個方法。我想寫一個貝葉斯網絡,但我在classifyInstance()方法上遇到了一個異常。weka.classifiers.Classifier.classifyInstance中的ArrayIndexOutOfBoundsException

這裏是我的代碼:

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:4在 weka.classifiers.bayes.net.estimate.DiscreteEstimatorBayes.getProbability (DiscreteEstimatorBayes.java:106) at weka.classifiers.bayes.net.estimate.SimpleEstimator.distributionForInstance(SimpleEstimator.java:183) at weka.classifie rs.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) 在 ensembleClassifiersV2.EnsembleClassifierV2.main(EnsembleClassifierV2.java:1267)

誰能幫我什麼是錯?

回答

0

我有同樣的問題。我的錯是我沒有爲測試數據設置類。就如此容易。

0

我發現這個錯誤通常發生在distributionForInstance()方法中,當您處理名義屬性時,許多不同的分類器出現此錯誤。

如果是這種情況,可能是測試數據具有名義屬性和列車數據缺乏的屬性值。

在這種情況下,它確實取決於您正在做什麼的最佳決策。也許檢查數據本身的一致性是第一步,然後你從那裏開始。

相關問題