使用预训练模型对一个实例进行分类时,NaiveBayes分类器出错

时间:2011-08-27 06:51:46

标签: java classification weka bayesian

我有一个包含125条记录的经过培训的数据集。我将使用NaiveBayesUpdatable对新实例进行分类。但是当我运行naiveBayes(在windows下,使用weka 3.4)时,我得到了 以下错误:

java.lang.ArrayIndexOutOfBoundsException: 126
    at weka.estimators.DiscreteEstimator.getProbability(Unknown Source)
    at weka.classifiers.bayes.NaiveBayes.distributionForInstance(Unknown Source)
    at weka.classifiers.Classifier.classifyInstance(Unknown Source)
    at Classifier.NaiveBayes.classifyInstance(NaiveBayes.java:190)
    at Classifier.NaiveBayes.classifyWebPage(NaiveBayes.java:106)

当我运行J48分类器时,它运行没有问题。

感谢任何帮助\想法。

2 个答案:

答案 0 :(得分:0)

我想我找到了解决方案。我将记录添加到数据集并再次构建分类器。然后我可以毫无问题地对它进行分类。但我不知道为什么j48不需要在其数据集中记录。

答案 1 :(得分:0)

你在classifyInstance()之后调用updateClassifier()吗? NaiveBayes只会在您这样做时更新。 J48不是可更新的分类器,因此,每次添加实例时都必须重建它。在性能方面,它没有产生如此大的差异,因为J48是一种极快的学习算法。

在任何情况下,我都建议查看实现UpdateableClassifier的其他类(在Eclipse中使用F4来获取继承层次结构),并将结果与​​它们进行比较。 NaiveBayes适用于非常特定任务,而IBk(最近邻)在许多域中都很健壮。