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 实际上是啥?的主要内容,如果未能解决你的问题,请参考以下文章
问下在java中 xxx.class是啥意思。额 我不是问class文件是啥意思,我问的是代码中xxx.class的意思