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

Ikr*_*lah 4 c++ logarithm probability

我正在编写一个算法,在该算法中,给定一个模型,我计算一组数据集的可能性,然后需要对每个可能性进行归一化(概率)。所以像 [0.00043, 0.00004, 0.00321] 这样的东西可能会被转换为可能像 [0.2, 0.03, 0.77]。我的问题是我正在使用的对数似然非常小(例如,在对数空间中,值类似于 -269647.432、-231444.981 等)。在我的 C++ 代码中,当我尝试添加其中两个(通过取指数)时,我得到“Inf”的答案。我试图将它们添加到 log-space (Summation/Subtraction of log) 中,但再次偶然发现了同样的问题。

任何人都可以分享他/她对此的专家意见吗?

谢谢

Pat*_*han 5

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

然后,您可以转换出对数空间。最大的将是 1.0,因为它的归一化日志是 0。较小的每个都在 0 到 1.0 之间,并表示为最大的一小部分。