pymc如何代表先前的分布和似然函数?

use*_*297 21 python bayesian mcmc pymc

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

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

如何在pymc中代表这些?它如何从模型对象计算这些数量?

我想知道是否有人能给我一个关于这种方法的高级描述,或者指出我能找到它的地方.

Ben*_*Ben 3

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

value : the variable's current value
logp : the log probability of the variable's current value given the values of its parents
Run Code Online (Sandbox Code Playgroud)

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

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

假设我们有以下设置:

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])
Run Code Online (Sandbox Code Playgroud)

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

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())
Run Code Online (Sandbox Code Playgroud)

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