对非常小的双数(可能性)的列表进行规范化

normalizing a list of very small double numbers (likelihoods)

本文关键字:列表 可能性 行规 规范化 非常      更新时间:2023-10-16

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

有人能分享他/她的专家意见吗?

感谢

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

然后可以转换对数空间。最大的将是1.0,因为它的标准化日志是0。较小的值将分别在0和1.0之间,并表示为最大值的一部分。

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

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