class_prior 实际上是啥?

Posted

技术标签:

【中文标题】class_prior 实际上是啥?【英文标题】:What is class_prior actually?class_prior 实际上是什么? 【发布时间】:2021-05-12 04:39:19 【问题描述】:

我正在读一本关于机器学习的书。在朴素贝叶斯一章中,我遇到了一个问题:

# Create Bernoulli Naive Bayes object with prior probabilities of each class
classifer = BernoulliNB(class_prior=[0.25, 0.5])

目标向量只有两个类别(Binary Classification)。

为什么class_prior 列表的值总和不等于 1?两个可能的类别,两个先验概率。所以这似乎是一个矛盾。我是否忘记了统计中的某些内容?我是否以错误的方式理解class_prior

【问题讨论】:

这取决于BernoulliNB 到底是什么。 应该等于1;可能是印刷错误 当前sklearn 版本(0.24)检查先验总和为1 here;我还没有深入研究修订历史,看看它是否可能会在内部重新调整,但更有可能是印刷错误。 天啊!这些链接是针对GaussianNB 的,对于BernoulliNB 没有进行类似的检查。 【参考方案1】:

这似乎是一个印刷错误。 GaussianNB 检查先验总和为 1 here,但基于 _BaseDiscreteNB 的模型没有。请参阅_update_class_log_prior 和fit。

模型似乎默默地按原样接受先验。来自predict_proba 的最终输出似乎产生了相同的输出,就好像你缩放先验以获得单位总和一样;联合对数似然是均匀移动的,我猜数学是可行的(我还没有检查过),所以实际的预测是一样的。有兴趣的可以看看this notebook。

【讨论】:

如果我建议一个带有虚拟数据的简单示例确实会引发错误,我会问很多吗? :) @desertnaut ,我想说“是的,但无论如何我都会这样做”;但在尝试它时,它实际上并没有抛出错误。我想,那就更深入地挖掘,除非你已经知道发生了什么...... 不,我不...!

以上是关于class_prior 实际上是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C4250 VC++ 警告是啥意思?

sklearn-朴素贝叶斯

module是啥?

findBugs 这个报的是啥错误

如何为 scikit-learn 的朴素贝叶斯指定先验概率

问下在java中 xxx.class是啥意思。额 我不是问class文件是啥意思,我问的是代码中xxx.class的意思