我想绘制分类向量,其先验是狄利克雷分布的乘积。类别是固定的,类别向量中的每个元素对应于不同的 Dirichlet 先验。这是一个长度为 33 的类别向量,有 4 个类别,使用 Dirichlet 进行先验设置。
import pymc3 as pm
with pm.Model() as model3:
theta = pm.Dirichlet(name='theta',a=np.ones((33,4)), shape=(33,4))
seq = [pm.Categorical(name='seq_{}'.format(str(i)), p=theta[i,:], shape=(1,)) for i in range(33)]
step1 = pm.Metropolis(vars=[theta])
step2 = [pm.CategoricalGibbsMetropolis(vars=[i]) for i in seq]
trace = pm.sample(50, step=[step1] + [i for i in step2])
然而,这种方法很麻烦,因为我必须做一些数组索引才能得到分类向量。有没有更好的方法来做到这一点?