You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyMC中指数采样异常:生成与拟合lambda参数不符问题排查

问题分析与修正
  • 核心错误:指数分布的参数定义混淆
    np.random.exponential的参数是尺度参数(scale),对应指数分布的均值1/λ;而pm.Exponential的lam参数是率参数(rate),也就是λ,两者互为倒数关系。

    你生成数据时传入的lambda_param=0.25是numpy的尺度参数,对应的真实率参数是1/0.25=4,所以拟合结果的lambda均值接近4是完全正确的——不是程序有bug,是你搞混了两个库对指数分布参数的定义方式。

  • 修正后的代码
    如果想让生成数据的率参数(即PyMC模型里的lam)为0.25,只需要调整numpy生成数据时的参数为1/lambda_param:

    import numpy as np
    import arviz as az
    import pymc as pm
    
    lambda_param = 0.25
    random_size = 1000
    # numpy用尺度参数=1/率参数,所以这里传入1/lambda_param
    x = np.random.exponential(1 / lambda_param, random_size)
    
    basic_model = pm.Model()
    
    with basic_model:
        _lam_ = pm.HalfNormal("lambda", sigma = 1)
        Y_obs = pm.Exponential("Y_obs", lam = _lam_, observed = x)
        start = pm.find_MAP(model = basic_model)
        idata = pm.sample(1000, start = start)
    
    summary = az.summary(idata, round_to = 6)
    summary
    

    运行这段代码后,拟合得到的lambda均值会接近0.25,和你预期一致。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:21:37