math – 如何根据组件日志条件计算日志(术语总和)

(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)).如何在没有求解P(E | Y)* P(Y)(它们是非常小的数字)并添加它们的情况下得到log(P(E)).

最佳答案 您可以使用

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的地方.

点赞