【问题标题】:How does pymc represent the prior distribution and likelihood function?pymc 如何表示先验分布和似然函数?
【发布时间】:2013-05-19 08:37:01
【问题描述】:

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

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

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

我想知道是否有人可以对这种方法进行高级描述或指出我在哪里可以找到它。

【问题讨论】:

  • 考虑到好像没人能回答你,我建议在这里问:github.com/pymc-devs/pymc/issues
  • 这似乎是the source 的工作。它相对较短,而且您对算法有明显的了解,也许快速浏览一下对您来说比对我更有启发。

标签: python bayesian mcmc pymc


【解决方案1】:

要表示先验,您需要一个 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 notebook here

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 本,你正在混合 pymc2 和 pymc3 表示法。 observed=true 用于 pymc2。然后必须在value 中给出值。 pymc3 将这两个关键字连接起来,数据直接用observed=y 给出,表示(observed=true)。
  • 如果 b0 是一个向量并且它的所有元素都是独立的怎么办。即先验可以写成密度的乘积?这个在pymc里怎么写?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 2014-10-08
  • 1970-01-01
  • 2014-10-24
  • 2014-12-12
  • 1970-01-01
  • 2020-03-26
相关资源
最近更新 更多