用于朴素贝叶斯分类器的伯努利模型的拉普拉斯平滑
Laplace Smoothing for Bernoulli model for naive bayes classifier
我必须实现一个朴素的贝叶斯 class 化器来 class 将文档转化为 class。因此,在获得属于 class 的项的条件概率以及拉普拉斯平滑时,我们有:
prob(t | c) = Num(单词在 class c 的文档中出现的次数) + 1 / Num(class c 中的文档) + |V|
它是一个伯努利模型,它要么有 1 要么有 0,而且词汇量非常大,大概有 20000 个单词等等。那么,拉普拉斯平滑不会因为词汇量很大而给出非常小的值,还是我做错了什么。
根据此 link 中的伪代码:http://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html,对于伯努利模型,我们只需添加 2 而不是 |V|。为什么会这样?
考虑多项朴素贝叶斯的情况。您在上面定义的平滑使得您永远无法获得零概率。
对于 multivariate/Bernoulli 的情况,还有一个额外的限制:恰好为 1 的概率也是不允许的。这是因为当文档 d
中不存在已知词汇表中的某些 t
时,1 - prob(t | c)
的概率将乘以文档概率。如果 prob(t | c)
是 1,那么这将再次产生 0 的后验概率。
(同样,当使用对数代替时,当概率为 1 时,log(1 - prob(t | c))
未定义)
所以在伯努利方程(Nct + 1) / (Nc + 2)
中,这两种情况都受到保护。如果 Nct == Nc
,则概率将是 1/2 而不是 1。无论 t
是否存在 (P(t | c) == 1/2
),这也会产生 1/2 的可能性(1 - P(t | c) == 1/2
)
我必须实现一个朴素的贝叶斯 class 化器来 class 将文档转化为 class。因此,在获得属于 class 的项的条件概率以及拉普拉斯平滑时,我们有:
prob(t | c) = Num(单词在 class c 的文档中出现的次数) + 1 / Num(class c 中的文档) + |V|
它是一个伯努利模型,它要么有 1 要么有 0,而且词汇量非常大,大概有 20000 个单词等等。那么,拉普拉斯平滑不会因为词汇量很大而给出非常小的值,还是我做错了什么。
根据此 link 中的伪代码:http://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html,对于伯努利模型,我们只需添加 2 而不是 |V|。为什么会这样?
考虑多项朴素贝叶斯的情况。您在上面定义的平滑使得您永远无法获得零概率。
对于 multivariate/Bernoulli 的情况,还有一个额外的限制:恰好为 1 的概率也是不允许的。这是因为当文档 d
中不存在已知词汇表中的某些 t
时,1 - prob(t | c)
的概率将乘以文档概率。如果 prob(t | c)
是 1,那么这将再次产生 0 的后验概率。
(同样,当使用对数代替时,当概率为 1 时,log(1 - prob(t | c))
未定义)
所以在伯努利方程(Nct + 1) / (Nc + 2)
中,这两种情况都受到保护。如果 Nct == Nc
,则概率将是 1/2 而不是 1。无论 t
是否存在 (P(t | c) == 1/2
),这也会产生 1/2 的可能性(1 - P(t | c) == 1/2
)