从典型的机器学习角度来看,它希望使用 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
的后验 .
但是,对于我来说,有一种简单的方法可以为新的(即未用于推理)预测数据生成预测后验,比如 X_test
?据我所知,你可以通过使用 numpy.ma.MaskedArray
来实现这一点,在这里你连接 X
和 X_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)
这类似于 sklearn
regressors可用的 predict
函数 . 看起来原则上这应该是可能的而不是太困难,但对于我的生活,我可以假设这种情况经常发生 . 有没有人有想法或建议?