从典型的机器学习的角度来看,在建模过程中通常会考虑两个阶段:培训和评分。我想用pymc
实现类似的功能,但我发现这非常困难。在
考虑一些简单的事情,比如线性回归。我有一个输入数据矩阵X
和一个目标向量y
。也许我通过一个确定性函数给X
添加一些新的变量,这样X_det
就是一个确定性变量。正如通常所做的那样,我们定义了一个确定性y_hat
,它结合了系数b
和数据{
@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)
我还可以添加一个模拟变量来方便地捕捉预测的后验点:
^{pr2}$我可以很容易地为此创建模型,运行MCMC来获得系数b
和预测Y_sim
的后验点。在
但是,有没有一种简单的方法来生成一个新的预测后验概率(即在推断中没有使用)预测数据,比如X_test
?据我所知,您可能可以通过使用numpy.ma.MaskedArray
来实现这一点,在这里您连接X
和{X_concat
),并将{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
回归函数。原则上看来,这应该是可能的,也不太难,但对我来说,我找不到一个好的方法来实现这一点。但我想这种情况经常出现。有人有什么想法或建议吗?在
目前没有回答
相关问题 更多 >
编程相关推荐