PYMC3混合模型:帮助理解多变量模型

2024-04-23 16:07:32 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个带有4个变量的数据帧。我想看看我是否能在所有变量上生成伽马混合的后验值,目标是为每个观测找到簇。我猜我需要某种多元伽马分布?但是我该怎么做呢

以下是一些pymc3代码,以一个参数为例,寻找两个Gamma的混合(我选择了任意参数):

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)

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


Tags: 数据代码alpha目标参数distwithbeta
1条回答
网友
1楼 · 发布于 2024-04-23 16:07:32

以下是多维案例的工作原理:

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)


关于对称破缺的注记

困难的部分将是{a1},但我认为这超出了问题的范围。也许可以看看the GMM tutorial是如何使用pm.Potential函数打破对称的。我期望似然函数的高度相关的参数化,如^ {< CD4> }和^ {CD5> },会加剧问题,所以可能考虑切换到^ {< CD6> }和^ {< CD7> }参数化。

相关问题 更多 >