TensorFlow Probability正态分布密度求和不为1问题求助
问题原因及解决方法
你忽略了**连续概率分布的离散求和近似需要乘以步长(区间宽度)**这一点。
正态分布是连续分布,其概率密度函数的积分(总面积)为1,但用离散点的概率密度值直接求和,得到的是所有点密度值的累加,而非积分结果。积分的离散近似(黎曼和)需要将每个点的密度值乘以相邻点之间的区间宽度(步长)。
具体计算验证
你的样本点范围是[-7, 7],共1e4个点,步长为:
dx = (7 - (-7)) / (int(1e4) - 1) ≈ 0.00140014
原求和结果约714.21,乘以步长后:714.21 × 0.00140014 ≈ 1,正好符合预期。
修正后的代码
直接对数组批量计算概率密度,再乘以步长求和,效率更高且结果正确:
import numpy as np import tensorflow_probability as tfp tfd = tfp.distributions x = np.linspace(-7., 7., int(1e4), dtype=np.float64) dx = x[1] - x[0] # 获取相邻点的步长 prob_densities = tfd.Normal(loc=0, scale=1).prob(x) # 批量计算所有点的密度值 integral_approximation = tf.reduce_sum(prob_densities * dx) print(integral_approximation)
运行后结果会接近1,符合正态分布的密度积分性质。
内容的提问来源于stack exchange,提问作者H_Man
相关产品推荐
相关产品推荐

