从典型的机器学习角度来看,它希望使用 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 来实现这一点,在这里你连接 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)

这类似于 sklearn regressors可用的 predict 函数 . 看起来原则上这应该是可能的而不是太困难,但对于我的生活,我可以假设这种情况经常发生 . 有没有人有想法或建议?