pymc的后验概率

raf*_*ffo 5 python bayesian mcmc pymc naivebayes

(这个问题最初发布于stats.O我搬到这里,因为它不具有关联.pymc在它与更普遍的问题:其实主要目的是为了有一个更好地了解如何pymc工作的.如果任版主的不要信.为了适合SO,我会从这里删除.)

我一直在这里和在SO中阅读pymc教程和许多其他问题.

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

从数据中我想推断出可能性 ,哪里 是一个特定的事件.然后目标是计算

一些额外的评论:

  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?
Run Code Online (Sandbox Code Playgroud)

问题如下:

  1. 是否self.likelihood代表贝叶斯可能性?
  2. 我如何利用这些数据?(我怀疑value=data是不正确的..)
  3. .sample()实际上是否计算后验概率?
  4. 我如何从后方获取信息?
  5. (*)我是否应该包括与此事实相关的任何内容 发生在某个时刻?
  6. 作为一般性问题:是否可以使用任何方式来pymc计算给定数据和先验的可能性?

欢迎任何评论,以及其他问题或教程的参考!

sjc*_*sjc 1

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

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

我认为您目前对 MCMC 存在一些根本性的误解。我想不出比向您介绍精彩的黑客贝叶斯方法更好的方法来回答您的问题