用 PyMC 计算后验概率

5
(此问题最初发布在stats.O上。我将它移到这里,因为它与pymc以及其中的更一般的问题有关:实际上,主要目的是更好地理解pymc的工作原理。如果任何管理员认为它不适合SO,我会从这里删除。)
我一直在阅读pymc教程和许多其他问题,在这里和SO中。
我试图理解如何应用贝叶斯定理来使用某些数据计算后验概率。特别是,我有一个独立参数元组

我希望从数据中推断出事件的概率 ,然后计算目标是:

一些额外的注释:

  1. 这是一种无监督学习,我知道 发生了,我想找到最大化概率 的参数 。 (*)
  2. 我还想有一个并行的过程,在这个过程中,我让 pymc 给出数据的可能性,然后对于每组参数,我想得到后验概率。
以下假设 ,似然函数是一个多维正态分布,其中 (由于独立性)。
以下是我正在使用的代码(为简单起见,假设只有两个参数)。该代码仍在开发中(我知道它无法工作!)。但我相信将其包含在内,然后根据评论和答案进行改进,以提供未来参考的框架。
class ObsData(object):
    def __init__(self, params):
        self.theta1 = params[0]
        self.theta2 = params[1]

class Model(object):
    def __init__(self, data):
        # Priors
        self.theta1 = pm.Uniform('theta1', 0, 100)
        self.theta2 = pm.Normal('theta2', 0, 0.0001)

        @pm.deterministic
        def model(
            theta1=self.theta1,
            theta2=self.theta2,
        ):
            return (theta1, theta2)
        # Is this the actual likelihood?
        self.likelihood = pm.MvNormal(
            'likelihood',
            mu=model,
            tau=np.identity(2),
            value=data,  # is it correct to put the data here?
            observed=True
        )

def mcmc(observed_data):
    data = ObsData(observed_data)
    pymc_obj = Model(data)
    model = pymc.MCMC(pymc_obj)
    model.sample(10000, verbose=0) # Does this line compute the likelihood and the normalisation factor? 
    # How do I get the posterior distribution?

以下是问题:
  1. self.likelihood是否代表贝叶斯似然函数?
  2. 如何使用数据?(我怀疑value=data是不正确的..)
  3. .sample()实际上是否计算后验概率?
  4. 如何从后验中获取信息?
  5. (*)是否应该包括任何与发生有关的内容?
  6. 作为一般性问题:是否有办法仅使用数据和先验来计算似然函数?
欢迎任何评论,以及参考其他问题或教程!
1个回答

1

首先,我认为您希望在模型定义中返回(theta1*theta2)。

model.sample是采样,而不是计算,(假设烧掉足够多的样本),给定数据的参数后验分布可以从采样后的联合后验中确定每个参数元组的特定值的似然度。

我认为您目前对 MCMC 有一些基本的误解。我想没有比指向美妙的Bayesian Methods for Hackers更好的回答您的问题了。


是的,我同意你说的,我对此非常困惑。我已经阅读了你提供的参考资料(谢谢!)。据我理解,在采样后,mcmc对象的参数跟踪会给出其似然分布 - 假设我问题中的方程式被反转,即似然是$P(\theta | E)$。我是正确的吗?(我会继续阅读以获得更多信心...) - rafforaffo
抱歉给您发送了这么多链接,但这是另一个关于交叉验证的直觉好文章 on cross validated。 MCMC正在对参数P(theta|E)的后验概率进行采样,但在给定模型下数据的似然是似然P(E|theta)。 - sjc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接