倒塌的采样/个别Metropolis-Hastings步骤

时间:2014-09-08 07:35:20

标签: pymc pymc3

我的模型有三个参数,例如 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 。因此,一次采样扫描将包括步骤

  1. p(theta_1,theta_2 | D) nu 边缘化)中绘制 theta_1 theta_2
  2. p(nu | theta_1,theta_2,D)中绘制 nu nu 被边缘化)
  3. 换句话说,一个倒塌的吉布斯采样器。

    我如何使用PyMC3解决这个问题?我认为我应该实现一个单独的步骤函数,但我不确定如何构造这里的可能性。在PyMC3中实现步进函数时,如何访问模型规范?

1 个答案:

答案 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)函数返回一个新点,你几乎可以做你喜欢的事情。我们无法保证它会成为一个好的采样器,