如何在PyMC3中更新观察结果?

时间:2018-01-30 09:15:33

标签: python time-series pymc3

我正在自学PyMC3,我正在复制this changepoint detection example。我想通过对2个不同泊松率参数的后验随时间进行采样来扩展该示例。我该怎么做呢?

提供更多详细信息:如果我有示例中的时间序列y。我想首先对观察y[0:2],然后y[0:3]y[0:4],...,y[0:100]进行抽样。我的目标是绘制mu0mu1(泊松率参数)随时间变化的分布2..100。 显然,我应该能够通过创建大约98个不同的模型并独立地从每个模型中抽样来做到这一点。然而,这似乎相当低效,我想知道是否有更好的方法只是用新观察更新模型并继续追踪?

我无法在文档或在线找到任何相关信息,所以我尝试更换变量,但后来我得到了一个" ValueError:变量名称变更点已经存在。"。

TLDR;有没有一种有效的方法可以随着时间的推移更新观测结果并继续使用这些新的观测值从上一次跟踪中采样?

1 个答案:

答案 0 :(得分:3)

您是否尝试使用theano.shared包装y并更新每一步的y值?类似的东西:

yshared = theano.shared(y[0:2])
with pm.Model() as m:
    # setup model
    y_obs = pm.SOMEDISTRIBUTION('',..., observed=yshared)
# inference
with m:
    trace.append(pm.sample())
# update value
yshared.set_value(y[0:3])
# inference again
with m:
    trace.append(pm.sample())

如果您有更多问题,请使用您的模型和(模拟)数据发布到https://discourse.pymc.io。我们会更频繁地检查和回答我们的话语。