使用预训练模型对一个实例进行分类时,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 分类器出错的主要内容,如果未能解决你的问题,请参考以下文章

为啥预训练的深度学习模型的性能会下降?

我应该如何使用预训练模型优化神经网络以进行图像分类

使用 tf slim 重新训练预训练的 ResNet-50 模型以进行分类

keras中使用预训练模型进行图片分类

使用预先训练的BERT模型对多类文本分类进行错误分类

加载Pytorch中的预训练模型及部分结构的导入