Python pymc的后验概率

Python pymc的后验概率,python,bayesian,pymc,naivebayes,mcmc,Python,Bayesian,Pymc,Naivebayes,Mcmc,(这个问题最初发布在stats.O上。我把它移到这里是因为它确实与pymc以及其中更一般的问题有关:事实上,主要目的是更好地了解pymc的工作原理。如果任何主持人认为它不适合这样做,我将从这里删除。) 我在这里和某处都读过这本书和其他许多问题 我试图理解如何应用贝叶斯定理来计算使用某些数据的后验概率。特别是,我有一个独立参数的元组 从这些数据中,我想推断出某个事件发生的可能性。然后目标是计算 一些附加注释: 这是一种无监督学习,我知道已经发生了,我想找出使概率最大化的参数。(*) 我还希望有

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

我在这里和某处都读过这本书和其他许多问题

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

从这些数据中,我想推断出某个事件发生的可能性。然后目标是计算

一些附加注释

  • 这是一种无监督学习,我知道已经发生了,我想找出使概率最大化的参数。(*)
  • 我还希望有一个并行过程,让
    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?
    
    问题如下:

  • self.likelion
    是否表示贝叶斯似然
  • 我如何利用这些数据?(我怀疑
    value=data
    不正确.)
  • .sample()
    是否实际计算后验概率
  • 我如何从后方获取信息
  • (*)我是否应该包括任何与某个时刻发生的事实有关的内容
  • 一般问题:有没有办法使用
    pymc
    只计算给定数据和先验的可能性

  • 欢迎任何评论,也可以参考其他问题或教程

    首先,我认为您希望从模型的定义中返回(θ1*θ2)

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


    我想你现在对MCMC有一些基本的误解。我想不出更好的办法来回答你的问题,而不是向你指出精彩的

    是的,我同意你的看法,我对此感到非常困惑。我读了一些你的参考资料(谢谢!)。据我所知,采样后
    mcmc
    对象的轨迹(参数)给出了其似然分布-假设我问题中的等式被还原,即似然为$P(\theta | e)$。我说得对吗?(我会读更多的书来获得更多的信心。)很抱歉给你大量的链接,但这里还有一个很好的链接,是为了你的直觉。MCMC正在对参数P(θE)的值的后验概率进行采样,但给定模型下数据的可能性是可能性P(Eθ)