如何以数值稳定的方式评估 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这样的函数可以避免数值下溢?
请您参考如下方法:
由于正态分布关于 0 对称,我们有
1 - F(x) = P(X > x)
= P(X < -x)
= F(-x)
因此
np.log(1 - norm.cdf(10)) = np.log(norm.cdf(-10))
= norm.logcdf(-10)
