【问题标题】: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 没有进行类似的检查。

标签: python machine-learning scikit-learn classification naivebayes


【解决方案1】:

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

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

【讨论】:

  • 如果我建议一个带有虚拟数据的简单示例确实会引发错误,我会问很多吗? :)
  • @desertnaut ,我想说“是的,但无论如何我都会这样做”;但在尝试它时,它实际上并没有抛出错误。我想,那就更深入地挖掘,除非你已经知道发生了什么......
  • 不,我不...!
猜你喜欢
  • 2011-08-01
  • 2011-12-26
  • 1970-01-01
  • 2018-09-26
  • 2011-03-11
  • 2010-11-26
  • 2015-06-23
  • 2018-08-08
  • 2017-12-26
相关资源
最近更新 更多