我遇到了一个常见的问题,我想知道是否有人可以提供帮助.我经常想在两种模式下使用pymc3:训练(即实际运行对参数的推断)和评估(即使用推断参数来生成预测).
总的来说,我想要一个后验过度的预测,而不仅仅是逐点估计(这是贝叶斯框架的一部分,不是吗?).当您的训练数据得到修复时,通常可以通过将类似形式的模拟变量添加到观察变量来实现.例如,
from pymc3 import *
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=2)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
Y_sim = Normal('Y_sim', mu=mu, sd=sigma, shape=len(X1))
start = find_MAP()
step = NUTS(scaling=start)
trace = sample(2000, step, start=start)
Run Code Online (Sandbox Code Playgroud)
但是如果我的数据发生了变化呢 假设我想根据新数据生成预测,但不再重复推断.理想情况下,我有一个类似的功能predict_posterior(X1_new, X2_new, 'Y_sim', trace=trace),甚至predict_point(X1_new, X2_new, 'Y_sim', …