使用预训练模型对一个实例进行分类时,NaiveBayes 分类器出错
Posted
技术标签:
【中文标题】使用预训练模型对一个实例进行分类时,NaiveBayes 分类器出错【英文标题】:error with NaiveBayes classifier when classify one instance with pretrained model 【发布时间】:2011-11-04 23:50:11 【问题描述】:我有一个训练有素的数据集,包含 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 分类器时,它运行没有问题。
感谢任何帮助\想法。
【问题讨论】:
【参考方案1】:我想我找到了解决方案。我将记录添加到数据集并再次构建分类器。然后我可以毫无问题地对其进行分类。但我不知道为什么 j48 不需要在它的数据集中有记录。
【讨论】:
【参考方案2】:您是在classifyInstance() 之后调用updateClassifier() 吗?只有当您这样做时,NaiveBayes 才会更新。 J48 不是可更新的分类器,因此自然而然,每次添加实例时都必须重新构建它。在性能方面,它并没有太大的区别,因为 J48 是一种非常快速的学习算法。
无论如何,我建议查看实现 UpdateableClassifier 的其他类(在 Eclipse 中使用 F4 来获取继承层次结构),并将您的结果与它们进行比较。 NaiveBayes 非常适合非常特定的任务,而 IBk(最近邻)在许多领域都很强大。
【讨论】:
以上是关于使用预训练模型对一个实例进行分类时,NaiveBayes 分类器出错的主要内容,如果未能解决你的问题,请参考以下文章