如何改善Poisson混合模型在PyMC3中的拟合?

时间:2018-05-21 21:47:44

标签: python-3.x statistics pymc3 mixture-model

我有一些看起来像这样的数据:

my data

我想尝试使用带有2个组件的Poisson混合模型对此数据进行建模。由于我是PyMC3的新手,我使用了以下链接:PyMC3 GMM tutorial和此处:PyMC3 Mixture API尝试执行此操作。我的代码在这里:

with pm.Model() as model:
    lam1 = pm.Exponential('lam1', lam=1)
    lam2 = pm.Exponential('lam2', lam=1)
    pois1 = pm.Poisson.dist(mu=lam1)
    pois2 = pm.Poisson.dist(mu=lam2)
    w = pm.Dirichlet('w', a=np.array([1, 1]))
    like = pm.Mixture('like', w=w, comp_dists=[pois1, pois2], observed=data)
with model:
    trace = pm.sample(5000, n_init=10000, tune=10000, random_seed=SEED)[1000:]
with model:
    ppc_trace = pm.sample_ppc(trace, 5000, random_seed=SEED)
fig, ax = plt.subplots(figsize=(8, 6))
ax.hist(data, bins=30, normed=True,
        histtype='step', lw=2,
        label='Observed data')
ax.hist(ppc_trace['like'], bins=30, normed=True,
        histtype='step', lw=2,
        label='Posterior predictive distribution')
ax.legend(loc=1)
plt.show()

但结果如下:bad result

如何改善健康状况?我试图摆弄lambdas无济于事。

1 个答案:

答案 0 :(得分:0)

您似乎正在绘制参数的后部。请勿将其与基于模型的随机样本分布混淆。也就是说,很明显,橙色线不是蓝色线的“适合”,而是指示组件的参数在哪里。我对pymc并不熟悉,但是也应该有一种方法可以从模型中真正采样而不是对模型进行采样。一种替代选择是读取后验最大值(MAP解决方案),并使用numpy.random函数进行采样。