我在使用Weka中经过训练的朴素贝叶斯模型对实例进行分类时遇到了麻烦。我正在为此使用Java框架。我已经训练了模型,并能够生成实例的分布。我的疑问是,由于NaiveBayes类未实现classifyInstance方法,它只是从AbstractClassifier抽象类中引入了该方法,是否隐含我应该使用自己的规则来实现它?
答案 0 :(得分:2)
我在这里的疑问是,由于NaiveBayes类没有实现
classifyInstance
方法,它只是将其从AbstractClassifier
抽象类中引入,我是否应该使用我自己的规则?
不,你不应该。
AbstractClassifier
文档指出:
抽象分类器。 Weka中用于数字或名义预测的所有方案 扩展此类。 请注意,分类器必须实现 distributionForInstance()或classifyInstance()。
查看source code of AbstractClassifier可以发现classifyInstance
呼叫distributionForInstance
,反之亦然。因此,如果一个类从AbstractClassifier
继承而没有覆盖这两种方法中的至少一种,则将导致无限递归和堆栈溢出。
NaiveBayes
确实实现了distributionForInstance
,从classifyInstance
继承的AbstractClassifier
方法将使用它。如果class属性是名义的,它将以最高的概率返回类索引。