1

我想绘制分类向量,其先验是狄利克雷分布的乘积。类别是固定的,类别向量中的每个元素对应于不同的 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])

然而,这种方法很麻烦,因为我必须做一些数组索引才能得到分类向量。有没有更好的方法来做到这一点?

4

1 回答 1

0

您不需要指定形状。请注意,您设置它的方式有 33 个不同的分类变量;我假设这就是你的意图。这是更简单的方法:

with pm.Model() as model: 
    theta = pm.Dirichlet(name='theta',a=np.ones(4)) 
    children = [pm.Categorical(f"seq_{i}", p=theta) for i in range(33)] 
于 2020-07-26T08:34:04.720 回答