新浪博客

python 指数分布的模拟 expovariate

2015-03-18 15:47阅读:
python random.expovariate(lam) 也就是实现了特征值为 lam 的指数分布CDF的逆函数来生成一系列 x。
  1. 当lam=2, x 分布的特点是 max(x) <4.5, 80%的 x < 1.0. 这一点可以通过生成 逆函数 x = -ln(1-CDF)/lam, 将CDF取 random() 的分布(bin=0.1)来对比验证。参见图一
  2. 用这个 x list, 套用 指数分布的 CDF 公式 CDF = 1 - exp(-lam * x), 就可以得到 CDF 从 [0.0, 1.0) 的均匀随机分布。举例,用expovaiate(2.0) 得到 [x],从[0.0, 4) 按照公式生成的cdf,按CDF值步长0.1为一组,共10组 (bin_cdf_by_rand_x),pmf分布很均匀, 每个bin 都在 10% 左右. 参见 图二
  3. 然而,如果用其他方法随便生成 x 系列, 按照lam 公式得到到CDF 不会在 [0.0, 1.0)均匀分布。

    例如:
    随机生成 [x] [0.0, 10), 按照公式生成的cdf,按CDF步长为0.1为一组,分成10组 (bin_cdf_by_rand_x2),pmf分布很不均匀, 有85% 的 cdf 值在 >0.9这个分组,也就是说绝大多数点都集中在cdf曲线右上侧。 参见图二



python <wbr>指数分布的模拟 <wbr>expovariate

图一:x 分布 expovariate 与 公式计算法 对比
python <wbr>指数分布的模拟 <wbr>expovariate
图二: CDF 分布对比,expovariate 计算 和 random(0,10) 生成CDF 分布对比


我的更多文章

下载客户端阅读体验更佳

APP专享