如果pymc实现Metropolis-Hastings算法从感兴趣的参数中提取后验密度的样本,那么为了决定是否移动到马尔可夫链中的下一个状态,它必须能够评估一些比例所有给定参数值的后密度。
后验密度与基于观察数据乘以先前密度的似然函数成比例。
如何在pymc中代表每一个?它如何从模型对象计算这些数量?
我想知道是否有人能给我一个关于这种方法的高级描述,或者指出我能找到它的地方。
答案 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。