我正在自学 PyMC3,并且正在复制 this changepoint detection example 。我想通过随时间对 2 个不同泊松率参数的后验进行采样来扩展该示例。我将如何继续这样做?
提供更多细节:如果我有示例中的时间序列y
。我想首先使用观测值 y[0:2]
进行采样,然后对 y[0:3]
、y[0:4]
进行采样, ...,y[0:100]
。我的目标是绘制 mu0
和 mu1
(泊松率参数)随时间 2..100 的分布。
显然,我应该能够通过创建大约 98 个不同的模型并对每个模型独立进行采样来做到这一点。然而,这似乎效率相当低,我想知道是否有更好的方法用新的观察结果更新模型并继续跟踪?
我在文档或在线中找不到任何相关内容,因此我尝试仅替换变量,但随后收到“ValueError:变量名称更改点已存在。”。
TLDR;是否有一种有效的方法可以随着时间的推移更新观测值,并使用这些新观测值继续从先前的跟踪中采样?
最佳答案
您是否尝试用 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与您的模型和(模拟)数据。我们更频繁地检查和回答我们的谈话。
关于python - 如何在 PyMC3 中随时间更新观察结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517719/