如果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/

10-12 16:58