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