0

我的模型有三个参数,比如theta_1theta_2nu

我想从后部采样theta_1theta_2 , nu边缘化(可以分析完成),即从p(theta_1, theta_2 | D)而不是p(theta_1, theta_2, nu | D)其中D是数据。之后,我想根据theta_1theta_2的新值重新采样nu。因此,一次采样扫描将包括以下步骤

  1. p(theta_1, theta_2 | D)绘制theta_1theta_2(将nu边缘化)
  2. p(nu | theta_1, theta_2, D)绘制nunu被边缘化)

换句话说,一个折叠的 Gibbs 采样器。

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

4

1 回答 1

1

步骤方法和可能性的概念在问题中有些混为一谈,但我明白你在说什么。Step 方法通常独立于可能性,它作为参数传递给 step 方法。例如,查看PyMC 3 中的切片采样器步骤方法。可能性是随机对象,它们返回对数似然值,条件是有向无环图中其父项的值。

如果您进行 Gibbs 抽样,您通常不关心评估可能性,因为您是直接从模型参数的条件中迭代抽样。我们目前在 PyMC 3 中没有 Gibbs,并且在 PyMC 2 中有一些基本的 Gibbs 支持。通常实现起来有点麻烦,因为它涉及识别模型中的共轭关联。此外,在 PyMC 3 中,您可以访问基于梯度的采样器(Hamiltonian),它比 Gibbs 高效得多,因此您可能不想实现 Gibbs 有几个原因

也就是说,PyMC 为实现自定义步骤方法和可能性提供了极大的灵活性。只要 step ( astep) 函数返回一个新点,你几乎可以做你喜欢做的事情。不能保证它会是一个好的采样器,

于 2014-09-25T18:32:37.810 回答