(此问题最初发布在stats.O上。我将它移到这里,因为它与pymc以及其中的更一般的问题有关:实际上,主要目的是更好地理解pymc的工作原理。如果任何管理员认为它不适合SO,我会从这里删除。)
我一直在阅读pymc教程和许多其他问题,在这里和SO中。
我试图理解如何应用贝叶斯定理来使用某些数据计算后验概率。特别是,我有一个独立参数元组
。
,似然函数是一个多维正态分布,其中
(由于独立性)。
以下是我正在使用的代码(为简单起见,假设只有两个参数)。该代码仍在开发中(我知道它无法工作!)。但我相信将其包含在内,然后根据评论和答案进行改进,以提供未来参考的框架。
以下是问题:
我一直在阅读pymc教程和许多其他问题,在这里和SO中。
我试图理解如何应用贝叶斯定理来使用某些数据计算后验概率。特别是,我有一个独立参数元组
我希望从数据中推断出事件的概率
,然后计算目标是:
一些额外的注释:
- 这是一种无监督学习,我知道
发生了,我想找到最大化概率
的参数
。 (*)
- 我还想有一个并行的过程,在这个过程中,我让
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.likelihood
是否代表贝叶斯似然函数?- 如何使用数据?(我怀疑
value=data
是不正确的..) .sample()
实际上是否计算后验概率?- 如何从后验中获取信息?
- (*)是否应该包括任何与
发生有关的内容?
- 作为一般性问题:是否有办法仅使用数据和先验来计算似然函数?
mcmc
对象的参数跟踪会给出其似然分布 - 假设我问题中的方程式被反转,即似然是$P(\theta | E)$。我是正确的吗?(我会继续阅读以获得更多信心...) - rafforaffo