21

如果 pymc 实现 Metropolis-Hastings 算法以从感兴趣的参数上的后验密度中提取样本,那么为了决定是否移动到马尔可夫链中的下一个状态,它必须能够评估与后验成比例的东西所有给定参数值的密度。

后验密度与基于观察数据乘以先验密度的似然函数成比例。

这些在 pymc 中是如何表示的?它如何从模型对象中计算出每一个数量?

我想知道是否有人可以给我该方法的高级描述或指出我在哪里可以找到它。

4

1 回答 1

3

为了表示先验,您需要一个 Stochastic 类的实例,它有两个主要属性:

value : the variable's current value
logp : the log probability of the variable's current value given the values of its parents

您可以使用您正在使用的发行版的名称初始化先验。

为了表示可能性,您需要一个所谓的数据随机指标。即,observed标志设置为的 Stochastic 类的实例True。此变量的值不能更改,也不会被采样。同样,您可以使用您正在使用的分布的名称来初始化可能性(但不要忘记将observed标志设置为True)。

假设我们有以下设置:

import pymc as pm
import numpy as np
import theano.tensor as t

x = np.array([1,2,3,4,5,6])
y = np.array([0,1,0,1,1,1])

我们可以使用以下内容运行简单的逻辑回归:

with pm.Model() as model:
    #Priors
    b0 = pm.Normal("b0", mu=0, tau=1e-6)
    b1 = pm.Normal("b1", mu=0, tau=1e-6)
    #Likelihood
    z = b0 + b1 * x
    yhat = pm.Bernoulli("yhat", 1 / (1 + t.exp(-z)), observed=y)
    # Sample from the posterior
    trace = pm.sample(10000, pm.Metropolis())

以上大部分内容来自 Chris Fonnesbeck 的 iPython笔记本

于 2014-03-28T03:19:17.787 回答