我想对超先验p(θ)
执行线性多元高斯过程回归,从而由Metropolis MCMC首先确定最佳超参数(θ = ℓ, a, σ)
(请参见下面的代码),然后然后确定最佳回归权重参数β
(y = βX + ε
)以执行预测y_new = βX_new
。但是我不太确定如何在pyMC3中正确实现这一点。
因此,我的理解是参数μ
和Σ
(请参见下面的代码)对应于p(β)
之前的模型的均值和协方差。我想知道,下面的代码是否仅从每个超参数的定义分布中提取了一个随机样本,然后对模型p(β | y, X, θ)
进行了MCMC采样以获得回归权重?还是对超参数p(θ | y, X)
的后验和模型后p(β | y, X, θ)
进行MCMC采样?如果是前者,我该如何更改我的代码以实现超优先级并使用Metropolis MCMC对其进行优化,最后执行对y
的预测?
侧面说明-我的超参数上的先验信息不足。我什至不知道它们是否为Gamma / HalfCauchy / HalfNormal分布等。我所知道的是,它们的值都应大于0。
我的数据及其形状:
X (t x N)
:N
个预测变量的矩阵,并带有t
个观测值用于模型训练。
y (t,)
:目标向量(我想预测的东西):
X_new (1 x N)
:每个预测变量的测试用例向量,以便执行预测。
with pm.Model() as model:
ℓ = pm.Gamma('ℓ', alpha=1, beta=10, shape=X.shape[1])
a = pm.HalfCauchy('a', beta=10)
σ = pm.HalfCauchy("σ", beta=10)
μ = pm.gp.mean.Zero()
Σ = a * pm.gp.cov.ExpQuad(input_dim=2,active_dims=np.arange(X.shape[1]),ls=ℓ)
gp = pm.gp.Marginal(mean_func=μ, cov_func=Σ)
y_ = gp.marginal_likelihood('y_',X=X, y=y, noise=σ)
MAP = pm.find_MAP()
method = pm.Metropolis()
trace = pm.sample(1000, method, MAP, random_seed=1, progressbar=True)
func = gp.conditional('func', Xnew=X_new)
fmean, fvar = gp.predict(Xnew=X_new, point=MAP)
谢谢。