使用pymc模型生成对新数据的预测

时间:2015-08-12 17:23:29

标签: python pymc

从典型的机器学习角度来看,通常会考虑建模的两个阶段:培训和评分。我希望使用pymc来实现类似的功能,但我发现它非常困难。

考虑一些简单的事情,例如线性回归。我有一个输入数据矩阵X和一个目标向量y。也许我通过确定性函数向X添加一些新的附加变量,以便X_det是一个确定性变量。通常情况下,我们定义一个确定性y_hat,它结合了系数b和数据X_det,以及随机观察变量Y_obs

@pymc.deterministic
def y_hat(b=b, X=X_det):
    return np.dot(X, b)

Y_obs = pymc.Normal(name='Y', mu=y_hat, tau=tau, value=y, observed=True)

我还可以添加一个模拟变量来方便地捕获预测的后验:

Y_sim = pymc.Normal(name='Y_sim', mu=y_hat, tau=tau)

我可以轻松地为此创建模型,运行MCMC以获得系数b和预测Y_sim的后验。

但是,有一种简单的方法可以为 new (即未在推理中使用)预测数据生成预测后验,比如X_test?据我了解,您可以使用numpy.ma.MaskedArray来实现此目的,您可以在其中连接XX_test(调用此X_concat)并将y与某些连接起来虚拟值以匹配X_concat的长度,并屏蔽虚拟值。但是,这感觉很笨,需要一个固定的X_test。如果我想得分X_test2,我将不得不再次运行MCMC采样。由于您已经拥有跟踪数据,因此感觉有些过分。

我想我正在搜索的是某种与pymc.Model相关联的函数,它接受随机变量的值并返回确定性变量的值。

可能是一些东西
model = pymc.Model([X_det, Y_obs, Y_sim, b, y_hat, tau, ...])
mcmc = pymc.MCMC(model)

# Score new data:
y_predicted = model.magic_function(X_test, mcmc.trace)

这类似于predict回归量可用的sklearn函数。看起来原则上这应该是可能的而不是太困难,但对于我的生活,我找不到一个很好的方法来实现这一目标。但我假设这种情况经常出现。有没有人有想法或建议?

0 个答案:

没有答案