首页 > 解决方案 > 使用 PyMC3 的高斯混合模型进行贝叶斯回归

问题描述

我正在尝试对二维数据集执行贝叶斯回归。
参考二维数据。 二维数据

我想将其表述为高斯的总和,为此,我将高斯混合模型与 PyMC3 一起使用。代码片段如下所示。

nbr_gauss = 15
data = np.column_stack((x_train, y_train))

# standardize the data
x_train = normalize(x_train,norm='max', axis=0)
y_train = normalize(y_train,norm='max',axis = 0)

with pm.Model() as multiVarModel:
    # Proportion of each component (Prior) -> Mixture weights
    p = pm.Dirichlet('p', a=np.ones(nbr_gauss))

    # Prior on means (mu_k)
    mu = pm.Normal(
        'mu',
        mu=np.linspace(x_train.min(), 1, nbr_gauss),
        sigma=0.1,
        transform=pm.transforms.ordered,
        shape=(nbr_gauss,),
        testval=np.linspace(x_train.min(), 1, nbr_gauss)
    )

    # Prior on the precision matrix (or the inv of covariance matrix)
    tau= pm.Gamma('tau', alpha=10, beta=1.0, shape=(nbr_gauss,))

    # Likelihood
    Y_obs = pm.NormalMixture('Y_obs', w=p, mu=mu, tau=tau, observed=y_train)

    prior_checks = pm.sample_prior_predictive(samples=50, random_seed=seed)

    # Start the sampler
    trace = pm.sample(draws=3000, tune=1000, step=pm.NUTS(), chains=1, cores=1)

    # sample posterior predictive samples
    ppc_trace = pm.sample_posterior_predictive(trace,
                                               var_names=["mu", "tau", "p", "Y_obs"],
                                               keep_size=True)

在估计参数(p、mu、tau)后,我目前无法检索原始曲线。实施是否正确?

标签: regressiongaussianpymc3mcmc

解决方案


推荐阅读