Python pymc如何表示先验分布和似然函数?

Python pymc如何表示先验分布和似然函数?,python,bayesian,mcmc,pymc,Python,Bayesian,Mcmc,Pymc,如果pymc实施Metropolis-Hastings算法,从感兴趣的参数的后验密度中得出样本,那么为了决定是否移动到马尔可夫链中的下一个状态,它必须能够计算与所有给定参数值的后验密度成比例的某个值 后验密度与基于观测数据的似然函数乘以前验密度成比例 这些在pymc中是如何表示的?它如何从模型对象计算这些数量 我想知道是否有人能给我一个高层次的方法描述,或者告诉我在哪里可以找到它 要表示优先级,您需要随机类的一个实例,它有两个主要属性: value : the variable's curren

如果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
您可以使用正在使用的分发的名称初始化Previor

为了表示可能性,您需要一个所谓的随机数据。也就是说,其
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笔记本。

考虑到似乎没有人能够回答你,我建议在这里提问:这似乎是一份适合你的工作。它相对较短,而且你对算法有着明显的理解,也许快速浏览一下对你来说比对我来说更具启发性。虽然这个链接可能会回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。Ben,您正在混合使用pymc2和pymc3表示法<代码>观察值=真为pymc2。然后必须在
value
中给出值。pymc3将这两个关键字连接起来,数据直接用
observed=y
给出,这意味着(observed=true)。如果b0是一个向量,其所有元素都是独立的,该怎么办。i、 e.先验值可以写成密度的乘积吗?你怎么用pymc写这个?