我的模型有三个参数,例如 theta_1 , theta_2 和 nu 。
我想从后面采样 theta_1 , theta_2 nu 被边缘化(可以通过分析方式完成),即来自 p(theta_1,theta_2 | D)而不是 p(theta_1,theta_2,nu | D)其中 D 是数据。之后,我想根据 theta_1 和 theta_2 的新值重新取样 nu 。因此,一次采样扫描将包括步骤
换句话说,一个倒塌的吉布斯采样器。
我如何使用PyMC3解决这个问题?我认为我应该实现一个单独的步骤函数,但我不确定如何构造这里的可能性。在PyMC3中实现步进函数时,如何访问模型规范?
答案 0 :(得分:1)
步骤方法和可能性的概念在这个问题上有些混淆,但我看到你正在开车。步骤方法通常与可能性无关,可能性作为参数传递给步骤方法。例如PyMC 3中的check out the slice sampler step method。可能性是随机对象,它们以有向非循环图中父节点的值为条件返回对数似然值。
如果您正在进行Gibbs采样,您通常不关心评估可能性,因为您直接从模型参数的条件中进行迭代采样。我们目前在PyMC 3中没有Gibbs,并且在PyMC 2中有一些基本的Gibbs支持。它实现起来有点麻烦,因为它涉及识别模型中的共轭关联。此外,在PyMC 3中,您可以访问基于渐变的采样器(Hamiltonian),它比Gibbs更有效,因此您可能 想要实现Gibbs的原因有几个。
尽管如此,PyMC为实现自定义步骤方法和类似方法提供了极大的灵活性。只要步骤(astep
)函数返回一个新点,你几乎可以做你喜欢的事情。我们无法保证它会成为一个好的采样器,