我有一个pm.NormalMixture()
的模型,当我从普通混合物中采样时,我也想知道哪些混合分布是从中采样的。
import numpy as np
import pymc3 as pm
obs = np.concatenate([np.random.normal(5,1,100),
np.random.normal(10,2,200)])
with pm.Model() as model:
mu = pm.Normal('mu', 10, 10, shape=2)
sd = pm.Normal('sd', 10, 10, shape=2)
x = pm.NormalMixture('x', mu=mu, sd=sd, observed=obs)
我从该模型中采样,然后使用该跟踪从后验预测分布中采样,我想知道的是后验预测轨迹中的每个x
,两个正态分布中的哪一个是从它属于。如果不手动完成,可以在PyMC3中实现吗?
答案 0 :(得分:1)
This example演示了后验预测检查(PPC)的工作原理。 PPC的要点是您首先从迹线中绘制随机样本。跟踪基本上总是多变量的,在模型中,单个样本将由向量(mu[i,0], mu[i,1], sd[i,0], sd[i,1])
定义。然后,对于每个跟踪样本,从为可能性指定的分布中生成随机数,其参数值等于跟踪样本的参数值。在您的情况下,这将是NormalMixture(mu[i,:], sd[i,:])
。在您的模型中,x
是似然函数,而不是跟踪的单个点。
一些实用说明: