为啥 weka NaiveBayes 类不实现分类实例方法?

Posted

技术标签:

【中文标题】为啥 weka NaiveBayes 类不实现分类实例方法?【英文标题】:Why doesn't weka NaiveBayes class implements classifyInstance method?为什么 weka NaiveBayes 类不实现分类实例方法? 【发布时间】:2019-06-04 02:16:56 【问题描述】:

我无法在 Weka 中使用经过训练的朴素贝叶斯模型对实例进行分类。我为此使用了java框架。我已经训练了模型并且能够为实例生成分布。我的疑问是,由于 NaiveBayes 类没有实现classifyInstance 方法,它只是从AbstractClassifier 抽象类中放出它,是否暗示我应该用我自己的规则来实现它?

【问题讨论】:

【参考方案1】:

我的疑问是,由于 NaiveBayes 类没有实现 classifyInstance 方法,它只是从 AbstractClassifier 抽象类中引入它,是否暗示我应该用我自己的规则来实现它?

不,你不应该。

AbstractClassifier 文档指出:

抽象分类器。 Weka 中用于数值或名义预测的所有方案 扩展这个类。 请注意,分类器必须要么实现 distributionForInstance() 或分类Instance()

查看source code of AbstractClassifier 告诉我们classifyInstance 调用distributionForInstance,反之亦然。因此,如果一个类继承自 AbstractClassifier 并且没有覆盖这两个方法中的至少一个,这将导致无限递归和堆栈溢出。

NaiveBayes 确实实现了distributionForInstance 并且从AbstractClassifier 继承的classifyInstance 方法将使用它。如果类属性是标称的,则返回概率最高的类索引。

【讨论】:

以上是关于为啥 weka NaiveBayes 类不实现分类实例方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NaiveBayes 分类器对 Weka 中的一个实例进行分类

Weka 中 SMO、NaiveBayes 和 BayesNet 分类器的不同结果

从命令行运行 weka - 找不到类 NaiveBayes

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

Weka 逻辑分类器不可用

朴素贝叶斯 (Weka) - 属性总数 x 实例总数 - 为啥不同?