【发布时间】:2016-06-23 23:35:35
【问题描述】:
(这个问题最初发布在 stats.O 上。我把它移到这里是因为它确实与 pymc 以及其中的更一般的问题有关:事实上,主要目的是更好地了解 pymc 的工作原理. 如果任何版主认为它不适合 SO,我会从这里删除。)
我一直在阅读pymc tutorial 以及这里和 SO 中的许多其他问题。
我试图了解如何应用贝叶斯定理来使用某些数据计算后验概率。特别是,我有一个独立参数的元组
我想根据数据推断 的可能性,其中 是某个事件。然后目标是计算
一些额外的 cmets:
- 这是一种无监督学习,我知道 发生了,我想找出使 概率最大化的参数。 (*)
- 我还想要一个并行程序,让
pymc计算给定数据的可能性,然后对于每个参数元组我想得到后验概率。
在下文中,我将假设 和可能性是具有 的多维正态分布(因为独立性)。
以下是我正在使用的代码(为简单起见,假设只有两个参数)。代码仍在开发中(我知道它不能工作!)。但我认为包含它是有用的,然后根据 cmets 和答案对其进行改进,以提供框架供将来参考。
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.likelihood是否代表贝叶斯似然? - 如何使用这些数据? (我怀疑
value=data不正确..) -
.sample()是否真的计算后验概率? - 如何从后端获取信息?
- (*)我是否应该包含与 发生在某个时间点有关的任何内容?
-
作为一般性问题:是否可以使用
pymc仅计算给定数据和先验的可能性?
欢迎任何cmets,也欢迎参考其他问题或教程!
【问题讨论】:
标签: python bayesian pymc naivebayes mcmc