【问题标题】:Avoiding underflow for joint probabilities using NumPy使用 NumPy 避免联合概率的下溢
【发布时间】:2012-08-09 17:56:49
【问题描述】:

我面临一个问题,即在简单的设置中估计自变量的联合概率。目前我有一个包含 100 个随机变量的数组,我想在不陷入下溢问题的情况下获得它们的联合概率。任何想法如何在 numpy 中实现这一目标?如果可能的话?

如果不能,请进一步解释一下 NumPy 例程 (logaddexp) 的作用,因为我认为在这种情况下它可能对我有帮助。

【问题讨论】:

    标签: numpy underflow


    【解决方案1】:

    logaddexp 允许您通过存储和处理它们的对数来扩展可表示值的范围(降低精度)。

    e1, e2 = np.log(p1), np.log(p2)    # convert p1, p2 to log form
    e1e2 = e1 + e2                     # e1e2 is now np.log(p1 * p2)
    e3 = np.logaddexp(e1, e2)          # e3 = np.log(p1 + p2)
    

    您只需要检查您的代码,将** 更改为** 更改为++ 更改为np.logaddexp,并在最后转换回np.exp

    普通的 64 位双精度浮点数的最小正数为 2.2E-308;存储日志可以为您提供有效的最小正数正常 1E-(1.7E308)。

    【讨论】:

    • 但是 e3 != e1e2 这是我的目标。可能我没有明白你的意思,如果我的 arr 是 x=[0.01,0.02,0.03],你能解释一下 np.logaddexp 如何帮助获得 p(X)
    • @JustInTime e1e2 等价于 p1 * p2; e3 等价于 p1 + p2。你是如何计算 p(X) 的?
    • 它的联合概率。自变量的。这意味着它是:p(x) = 0.01*0.02*0.03。想象一下,我有一个包含 100 个小概率的数组。这将导致下溢。希望我在这里说明了这一点
    • @JustInTime 在这种情况下log(p(x)) = log(0.01) + log(0.02) + log(0.03).
    猜你喜欢
    • 2016-01-30
    • 2010-10-14
    • 2017-12-17
    • 1970-01-01
    • 2022-01-05
    • 2015-06-19
    • 2022-01-10
    • 2021-05-11
    • 2011-01-13
    相关资源
    最近更新 更多