pymc 的后验概率

Posterior probability with pymc

(这个问题最初是在 stats.O 上发布的。我把它移到这里是因为它确实与 pymc 和其中更一般的问题有关:事实上,主要目的是为了更好地理解pymc 的工作原理。如果任何版主认为它不适合 SO,我将从这里删除。)

我一直在阅读 pymc tutorial 以及此处和 SO 中的许多其他问题。

我正在尝试了解如何应用贝叶斯定理 来计算使用某些数据的后验概率。特别是,我有一个独立参数的元组

根据数据,我想推断 的可能性,其中 是特定事件。那么目标就是计算

一些补充意见:

  1. 这是一种无监督学习,我知道发生了,我想找出使概率最大化的参数。 (*)
  2. 我还想有一个并行过程,让 pymc 计算给定数据的可能性,然后 为每个参数元组 我想得到后验概率。

在下文中,我将假设 并且可能性是具有 的 multi-dimensional 正态分布(由于独立性)。

以下是我正在使用的代码(为简单起见,假设只有两个参数)。代码仍在开发中(我知道它行不通!)。但我相信包含它是有用的,然后根据评论和答案对其进行完善,以提供一个框架供将来参考。

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. 作为一般性问题:是否可以使用 pymc 仅计算给定数据和先验的可能性?

欢迎任何意见,也欢迎参考其他问题或教程!

对于初学者,我认为您想从您的模型定义中 return (theta1*theta2)。

model.sample 是采样,而不是计算,给定数据后参数的后验分布(假设有足够的老化等),并且可以确定每个参数元组的特定值的可能性取样后的关节后部。

我认为您目前对 MCMC 有一些根本性的误解。我想不出比向您指出精彩 Bayesian Methods for Hackers

更好的方式来回答您的问题