从概念上讲,我需要巧合地将每个事件的概率相乘。由于可能涉及很多事件,我让计算机添加对数以避免下溢。
但突然之间我无法说服自己在开始添加之前将返回值初始化为零。我知道零是添加的标识元素,我记得这就是我的方法,但是,看一下graph of the logarithm,我可以清楚地看到零的反对数是负无穷大。
因此,将返回值初始化为零应相当于将所有概率乘以负无穷大,这绝对不正确。我做错了什么?
答案 0 :(得分:7)
如果要将值相乘,它们看起来像这样:
product = 1*p1*....*pn
如果你采用双方的自然对数,它看起来像这样:
ln(product) = ln(1) + ln(p1) + .... + ln(pn)
但是ln(1) = 0
,这就是你如何初始化对数之和。将其设置为零。
记住你在这里总结的内容:每个概率的对数加入总概率的对数中。完成总和后,您可以获得如下产品:
product = exp(ln(product)) = exp(ln(sum of ln(pn))
答案 1 :(得分:6)
零的反对数是1,而不是负无穷大。这意味着对数的开始加零与开始乘以概率本身的一个相同。
答案 2 :(得分:0)
如果您正在计算事件的交集。只需乘以它们。无需进入对数空间。如果它变得非常小,则事件交集的概率为零。