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

时间:2013-05-23 20:20:46

标签: python bayesian mcmc pymc

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

要表示可能性,您需要一个所谓的数据随机数据。也就是说,Stochastic类的实例,其observed标志设置为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笔记本here