我有一个包含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分类器时,它运行没有问题。
感谢任何帮助\想法。
答案 0 :(得分:0)
我想我找到了解决方案。我将记录添加到数据集并再次构建分类器。然后我可以毫无问题地对它进行分类。但我不知道为什么j48不需要在其数据集中记录。
答案 1 :(得分:0)
你在classifyInstance()之后调用updateClassifier()吗? NaiveBayes只会在您这样做时更新。 J48不是可更新的分类器,因此,每次添加实例时都必须重建它。在性能方面,它没有产生如此大的差异,因为J48是一种极快的学习算法。
在任何情况下,我都建议查看实现UpdateableClassifier的其他类(在Eclipse中使用F4来获取继承层次结构),并将结果与它们进行比较。 NaiveBayes适用于非常特定任务,而IBk(最近邻)在许多域中都很健壮。