规范化一个非常小的双数列表(似然)

时间:2013-08-05 23:08:03

标签: c++ probability logarithm

我正在编写一种算法,在给定模型的情况下,我计算数据集列表的可能性,然后需要对每个可能性进行归一化(概率)。因此[0.00043,0.00004,0.00321]之类的东西可能会转换为[0.2,0.03,0.77]。 我的问题是,我正在使用的日志可能性非常小(例如,在日志空间中,值类似于-269647.432,-231444.981等)。在我的C ++代码中,当我尝试添加其中两个(通过取其指数)时,我得到了“Inf”的答案。我试图在日志空间(Summation/Subtraction of log)中添加它们,但又遇到了同样的问题。

有人可以就此分享他/她的专家意见吗?

由于

2 个答案:

答案 0 :(得分:4)

假设已经正确计算了可能性,您可以将它们中的每一个除以最大可能性。这可以通过从每个对数似然减去最大对数似然来以对数形式完成。

然后您可以转换出对数空间。最大值为1.0,因为它的归一化日志为0.较小的值将介于0和1.0之间,并表示为最大值的一小部分。

答案 1 :(得分:2)

这是标准程序。数值稳定的Matlab代码:

LL = [ . . . ];  % vector of log-likelihoods
M = max(LL);
LL = LL - M;
L = exp(LL);
L = L ./ sum(L);