如何在 PyMC3 中随时间更新观察结果?
How to update observations over time in PyMC3?
我正在自学 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: Variable name changepoint already exists."。
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())
如果您有更多问题,请 post 至 https://discourse.pymc.io 提供您的模型和(模拟)数据。我们更经常地检查和回答我们的讨论。
我正在自学 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: Variable name changepoint already exists."。
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())
如果您有更多问题,请 post 至 https://discourse.pymc.io 提供您的模型和(模拟)数据。我们更经常地检查和回答我们的讨论。