pyMC3具有高优先级和MCMC的线性高斯过程回归

时间:2019-07-14 13:27:53

标签: bayesian pymc3 inference hyperparameters

我想对超先验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)

谢谢。

0 个答案:

没有答案