【问题标题】:PYMC3 Mixture model: help understanding multiple variables modelPYMC3混合模型:帮助理解多变量模型
【发布时间】:2020-04-26 02:54:47
【问题描述】:

假设我有一个包含 4 个变量的数据框。我想看看我是否可以在所有变量上生成伽马混合的后验,目的是为每个观察找到聚类。我猜我需要某种多元伽玛分布?但是我该怎么做呢?

这里是一些 pymc3 代码作为一个参数的示例,寻找两个伽马的混合(我选择了任意参数):

with pm.Model() as m:
     p = pm.Dirichlet('p', a = np.ones(2))

     alpha = pm.Gamma('means',alpha = 1, beta = 1, shape = 2)
     beta = pm.Gamma('means',alpha = 1, beta = 1, shape = 2)

     x = pm.Gammma('x', alpha, beta)

     comp_dist = pm.Gamma.dist(means, scale, shape = (2,))
     like = pm.Mixture('y', w = p,comp_dists = comp_dist, observed = data)

     trace = pm.sample(1000)

所以我的问题是,如何将这个基本示例扩展到多个变量?我假设我需要以某种方式定义变量之间的关系以在模型中对它们进行编码?我觉得我了解混合建模的基础知识,但同时又觉得我缺少一些非常基础的东西。

【问题讨论】:

    标签: python pymc3 mixture-model gamma-distribution hierarchical-bayesian


    【解决方案1】:

    以下是多维案例的工作方式:

    J = 4 # num dimensions
    K = 2 # num clusters
    
    with pm.Model() as m:
        p = pm.Dirichlet('p', a=np.ones(K))
    
        alpha = pm.Gamma('alpha', alpha=1, beta=1, shape=(J,K))
        beta  = pm.Gamma('beta',  alpha=1, beta=1, shape=(J,K))
        gamma = pm.Gamma.dist(alpha=alpha, beta=beta, shape=(J,K))
    
        like = pm.Mixture('y', w=p, comp_dists=gamma, observed=X, shape=J)
    
        trace = pm.sample(1000)
    

    X.shape 应该是 (N,J)


    关于对称破缺的注意事项

    困难的部分将是resolving identifiability issues,但我认为这超出了问题的范围。也许看看the GMM tutorial 如何使用pm.Potential 函数打破对称性。我预计似然函数的高度相关参数化,如alphabeta,会加剧这个问题,所以也许考虑切换到musigma 参数化。

    【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2016-05-28
    • 2016-02-13
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多