我写过这个方法。我想写一个贝叶斯网络,但我得到了一个例外的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();
}这是一个例外:
weka.classifiers.bayes.net.estimate.DiscreteEstimatorBayes.getProbability(DiscreteEstimatorBayes.java:106),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)在ensembleClassifiersV2.EnsembleClassifierV2.main(EnsembleClassifierV2.java:1267)
有人能帮我什么忙吗?
发布于 2013-06-16 15:20:45
我也有同样的问题。我的错误是我没有为测试数据设置类。就这么简单。
发布于 2016-12-23 19:51:08
我发现,在处理标称属性时,对于许多不同的分类器,distributionForInstance()方法中通常会出现此错误。
如果是这种情况,则可能是测试数据具有一个具有训练数据所缺少的属性值的标称属性。
在这种情况下,这真的取决于你所做的事情的最佳决策是什么。也许第一步就是检查数据本身的一致性,然后再从那里开始。
https://stackoverflow.com/questions/16466143
复制相似问题