我必须实现一个朴素的贝叶斯分类器来将文档分类为一个类。因此,在获取属于一个类的术语的条件概率以及拉普拉斯平滑时,我们具有:

prob(t | c)= Num(c类文档中的单词出现)+1 / Num(c类文档中的单词出现)+ | V |

它是一个bernoulli模型,将具有1或0,并且词汇表确实很大,例如可能有20000个单词,依此类推。因此,由于词汇量太大,拉普拉斯平滑处理不会给出很小的值,还是我做错了什么。

根据来自以下链接的伪代码:http://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html,对于bernoulli模型,我们只添加2而不是| V |。为什么这样?

最佳答案

考虑多项式朴素贝叶斯的情况。上面定义的平滑处理使您永远不可能获得零概率。

对于多元/伯努利案例,还有一个额外的约束:也不允许恰好1的概率。这是因为,当文档t中不存在来自已知词汇的某些d时,1 - prob(t | c)的概率将乘以文档概率。如果prob(t | c)为1,则将再次产生后验概率0。

(同样,当使用日志代替时,当概率为1时,未定义log(1 - prob(t | c))

因此,在伯努利方程(Nct + 1) / (Nc + 2)中,两种情况都可以防止。如果为Nct == Nc,则概率将为1/2而不是1。这也将导致产生可能性1/2的结果,而不管t是否存在(P(t | c) == 1/2)(1 - P(t | c) == 1/2

关于machine-learning - 用于朴素贝叶斯分类器的Bernoulli模型的Laplace平滑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40448784/

10-12 18:51