PyMC3高斯混合模型

5
我一直在跟随这里的PyMC3高斯混合模型示例:https://github.com/pymc-devs/pymc3/blob/master/pymc3/examples/gaussian_mixture_model.ipynb,并已经成功地将其与人造数据集配合使用。 enter image description here 我尝试了一个真实数据集,但是我很难让它给出合理的结果: enter image description here 有什么想法可以缩小/扩大/改变哪些参数以获得更好的拟合?迹线似乎很稳定。这是我从示例中调整的模型片段:
model = pm.Model()
with model:
    # cluster sizes
    a = pm.constant(np.array([1., 1., 1.]))
    p = pm.Dirichlet('p', a=a, shape=k)
    # ensure all clusters have some points
    p_min_potential = pm.Potential('p_min_potential', tt.switch(tt.min(p) < .1, -np.inf, 0))


    # cluster centers
    means = pm.Normal('means', mu=[0, 1.5, 3], sd=1, shape=k)
    # break symmetry
    order_means_potential = pm.Potential('order_means_potential',
                                     tt.switch(means[1]-means[0] < 0, -np.inf, 0)
                                     + tt.switch(means[2]-means[1] < 0, -np.inf, 0))

    # measurement error
    sd = pm.Uniform('sd', lower=0, upper=2, shape=k)

    # latent cluster of each observation
    category = pm.Categorical('category', p=p, shape=ndata)

    # likelihood for each observed value
    points = pm.Normal('obs', mu=means[category], sd=sd[category], observed=data)

值得一看的是 https://www.amazon.com/Data-Analysis-Bayesian-Devinderjit-Sivia/dp/0198568320 的第4.2节,这是一本非常优秀的书。 - jtlz2
你使用了哪些先验?值得尝试查看后验分布。如果您具有重叠的先验范围,则后验可能是多峰的,然后您可能会陷入局部最大值。您还可以获得交换退化/阴影效应 :( - jtlz2
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接