【发布时间】:2018-05-10 23:18:18
【问题描述】:
如何以数值稳定的方式评估log(1 - normal_cdf(x))?这里normal_cdf是标准正态分布的累积分布函数。
例如,在 Python 中:
import scipy
from scipy.stats import norm
np.log(1 - norm.cdf(10))
给出-inf 和RuntimeWarning: divide by zero encountered in log,因为norm.cdf(10) 几乎等于1。有没有像logsumexp 这样可以避免数值下溢的函数?
【问题讨论】:
-
因为它不是产品的对数,所以不能利用对数函数的属性。检查此答案以了解一些有趣的事实math.stackexchange.com/questions/75074/…
-
也许
norm.cdf(10)=1-norm.cdf(-10)所以np.log(1 - norm.cdf(10))=np.log(norm.cdf(-10))
标签: python scipy numerical softmax underflow