pymc

时间:2016-03-09 14:22:45

标签: python bayesian pymc naivebayes mcmc

(这个问题最初发布在stats.O。我把它移到这里是因为它确实与pymc有关,而且其中包含更多一般性问题:事实上,主要目的是更好地理解{{1}如果任何主持人认为它不适合SO,我会从这里删除。)

我在这里和在SO中都在阅读pymc tutorial和许多其他问题。

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

根据数据,我想推断出的可能性,其中是某个特定事件。然后目标是计算

其他一些评论

  1. 这是一种无监督学习,我知道发生了,我想找出最大化概率的参数。 (*)
  2. 我还希望有一个并行程序让pymc计算给定数据的可能性,然后计算每个参数元组我想得到后验概率
  3. 在下文中,我假设并且可能性是具有的多维正态分布(由于独立性)。

    以下是我使用的代码(为简单起见,假设只有两个参数)。代码仍处于开发阶段(我知道它无法正常工作!)。但我认为包含它是有用的,然后在注释和答案之后对其进行优化,以便为将来的参考提供框架。

    pymc

    问题如下:

    1. 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? 代表贝叶斯似然吗?
    2. 如何使用数据? (我怀疑self.likelihood不正确..)
    3. value=data是否实际计算后验概率?
    4. 如何从后方获取信息?
    5. (*)我是否应该包含与在某个时刻发生的事实有关的任何内容?
    6. 作为一般性问题:是否可以使用.sample()仅计算给定数据和先验的可能性?
    7. 欢迎任何评论,以及其他问题或教程的参考!

1 个答案:

答案 0 :(得分:1)

首先,我想你想从你的模型定义中返回(theta1 * theta2)。

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

我认为您目前对MCMC存在一些根本性的误解。我无法想出一个更好的方式回答你的问题,而不是指向你的精彩Bayesian Methods for Hackers