[英]Mixture of gaussians not converging in pyMC3
我混合了3個高斯,但無論我如何調整先驗值,我都無法獲得后驗方法來從其先驗值中轉移出來。
k = 3
n1 = 1000
n2 = 1000
n3 = 1000
n = n1+n2+n3
mean1 = 17.3
mean2 = 42.0
mean3 = 31.0
precision = 0.1
sigma = np.sqrt(1 / precision)
print "Standard deviation: %s" % sigma
data1 = np.random.normal(mean1,sigma,n1)
data2 = np.random.normal(mean2,sigma,n2)
data3 = np.random.normal(mean3,sigma,n3)
data = np.concatenate([data1 , data2, data3])
hist(data, bins=200, color="k", histtype="stepfilled", alpha=0.8)
plt.title("Histogram of the dataset")
plt.ylim([0, None])
with pm.Model() as model:
dd = pm.Dirichlet('dd', a=np.array([float(n/k) for i in range(k)]), shape=k)
sd = pm.Uniform('precs', lower=1, upper=5, shape=k)
means = pm.Normal('means', [25, 30, 35], 0.01, shape=k)
category = pm.Categorical('category', p=dd, shape=n)
points = pm.Normal('obs',
means[category],
sd=sd[category],
observed=data)
tr = pm.sample(100000, step=pm.Metropolis())
pm.traceplot(tr, vars=['means', 'precs', 'dd'])
輸出:
Standard deviation: 3.16227766017
[-----------------100%-----------------] 100000 of 100000 complete in 157.2 sec
如您所見,沒有收斂,均值也不會偏離其初始值
不幸的是,這是一個已知問題:我們正在努力的https://github.com/pymc-devs/pymc/issues/452和https://github.com/pymc-devs/pymc/issues/443 。
請注意,還有其他步驟方法可以用於分類中,如問題中的示例模型中所述。 但是,即使那樣也不會導致收斂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.