用于朴素贝叶斯分类器的伯努利模型的拉普拉斯平滑
Posted
技术标签:
【中文标题】用于朴素贝叶斯分类器的伯努利模型的拉普拉斯平滑【英文标题】:Laplace Smoothing for Bernoulli model for naive bayes classifier 【发布时间】:2017-03-19 19:53:26 【问题描述】:我必须实现一个朴素贝叶斯分类器来将文档分类为一个类。因此,在获得属于类的术语的条件概率时,连同拉普拉斯平滑,我们有:
prob(t | c) = Num(c 类文档中的单词出现次数) + 1 / Num(c 类文档) + |V|
它是一个伯努利模型,它有 1 或 0,词汇量非常大,可能有 20000 个单词等等。那么,由于词汇量很大,拉普拉斯平滑不会给出非常小的值,还是我做错了什么。
根据此链接中的伪代码:http://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html,对于伯努利模型,我们只需添加 2 而不是 |V|。为什么会这样?
【问题讨论】:
计算机科学交流? 你找到答案了吗? 【参考方案1】:考虑多项式朴素贝叶斯的情况。您在上面定义的平滑是这样的,您永远不会得到零概率。
对于多变量/伯努利案例,还有一个额外的约束:也不允许恰好为 1 的概率。这是因为当已知词汇表中的一些t
不存在于文档d
中时,1 - prob(t | c)
的概率乘以文档概率。如果prob(t | c)
为 1,那么这将再次产生 0 的后验概率。
(同样,当使用日志时,log(1 - prob(t | c))
在概率为 1 时未定义)
因此,在伯努利方程(Nct + 1) / (Nc + 2)
中,两种情况都受到保护。如果Nct == Nc
,那么概率将是 1/2 而不是 1。无论t
是否存在 (P(t | c) == 1/2
) (1 - P(t | c) == 1/2
)
【讨论】:
以上是关于用于朴素贝叶斯分类器的伯努利模型的拉普拉斯平滑的主要内容,如果未能解决你的问题,请参考以下文章
NLTK 和 scikit-learn 中的伯努利朴素贝叶斯结果不同
Python机器学习之垃圾短信分类(用朴素贝叶斯算法的伯努利模型和多项式模型分类垃圾短信数据集SMSSpamCollection.txt)