PYMC3混合模型:帮助理解多变量模型
PYMC3 Mixture model: help understanding multiple variables model
假设我有一个包含 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)
.
关于对称破缺的注意事项
困难的部分是 resolving identifiability issues, but I think that's beyond the scope of the question. Maybe have a look at how the GMM tutorial 使用 pm.Potential
函数打破对称性。我预计似然函数的高度相关参数化,如 alpha
和 beta
,会加剧这个问题,所以也许考虑切换到 mu
和 sigma
参数化.
假设我有一个包含 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)
.
关于对称破缺的注意事项
困难的部分是 resolving identifiability issues, but I think that's beyond the scope of the question. Maybe have a look at how the GMM tutorial 使用 pm.Potential
函数打破对称性。我预计似然函数的高度相关参数化,如 alpha
和 beta
,会加剧这个问题,所以也许考虑切换到 mu
和 sigma
参数化.