如果pymc实现了Metropolis-Hastings算法以根据目标参数从后验密度中提取样本,那么为了决定是否要移动到马尔可夫链中的下一个状态,它必须能够评估与后验成比例的事物所有给定参数值的密度。
后验密度与基于观测数据乘以先验密度的似然函数成正比。
这些在pymc中如何表示?它如何从模型对象计算这些量的每一个?
我想知道是否有人可以向我提供这种方法的高级描述,或者指出我在哪里可以找到它。
最佳答案
为了表示先验,您需要一个随机类的实例,该实例具有两个主要属性:
value : the variable's current value
logp : the log probability of the variable's current value given the values of its parents
您可以使用您使用的发行版的名称来初始化先验。
为了表示这种可能性,您需要一个所谓的数据随机性。也就是说,随机类的实例,其
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。
关于python - pymc如何表示先验分布和似然函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16723179/