4

(1) 问题的简单版本:

如何计算 log(P1+P2+...+Pn),给定 log(P1), log(P2), ..., log(Pn),而不需要任何项的 exp 来得到原始 Pi。我不想得到原始的 Pi,因为它们非常小,可能会导致数字计算机下溢。

(2) 长版问题:

我正在使用贝叶斯定理来计算条件概率 P(Y|E)。

P(Y|E) = P(E|Y)*P(Y) / P(E)

我有一千个概率相乘。

P(E|Y) = P(E1|Y) * P(E2|Y) * ... * P(E1000|Y) 

为了避免计算机数值下溢,我使用 log(p) 并计算 1000 log(p) 的总和,而不是计算 1000 p 的乘积。

log(P(E|Y)) = log(P(E1|Y)) + log(P(E2|Y)) + ... + log(P(E1000|Y))

但是,我还需要计算 P(E),即

P(E) = sum of P(E|Y)*P(Y)

log(P(E))不等于 log 的总和(P(E|Y)*P(Y))log(P(E))如果不解决P(E|Y)*P(Y)(它们是非常小的数字)并添加它们,我应该如何获得。

4

1 回答 1

2

您可以使用

log(P1+P2+...+Pn) = log(P1[1 + P2/P1 + ... + Pn/P1]) 
                  = log(P1) + log(1 + P2/P1 + ... + Pn/P1])

适用于任何 Pi。因此,将 maxP = max_i Pi 分解为

log(P1+P2+...+Pn) = log(maxP) + log(1+P2/maxP + ... + Pn/maxP)

其中所有比率均小于 1。

于 2014-03-13T16:30:56.483 回答