假设我有一个带有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)
所以我的问题是,如何将这个基本示例扩展到多个变量?我假设我需要定义变量之间的关系以某种方式在模型中进行编码?我觉得自己了解混合建模的基础知识,但同时又觉得自己缺少一些基本知识。
这是多维案例的工作方式:
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)
。
困难的部分将是解决可识别性问题,但是我认为这超出了问题的范围。也许看看GMM教程如何使用该pm.Potential
函数打破对称性。我希望像alpha
和的高度相关的似然函数参数化beta
会加剧此问题,因此也许考虑切换到mu
和sigma
参数化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句