我尝试对 scipy.stats.norm 生成的标准正态分布概率密度函数使用蒙特卡罗积分,它收敛到 1/(2*sqrt(pi)) 而不是 1。
代码:
from scipy.stats import norm
from numpy import average, pi
import math
samples = norm.rvs(loc=0, scale=1, size=10000000)
average(norm.pdf(samples, loc=0, scale=1)) - (1/(2*math.sqrt(pi)))
这将返回 ~ 0。 有人可以解释一下为什么它不收敛于 1。我在这里做错了什么吗?
最佳答案
您正在评估大型正态分布样本的 PDF,然后取这些 PDF 值的平均值。实际上,您正在计算正态 PDF 相对于正态分布的期望值。这是计算该值的快速方法:
In [284]: from scipy.stats import norm
In [285]: norm.expect(norm.pdf)
Out[285]: 0.28209479177387786
In [286]: 1/(2*np.sqrt(np.pi))
Out[286]: 0.28209479177387814
关于python - scipy.stats.norm 密度函数未积分为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956528/