PyMC中的地图出现意外错误

2024-06-08 23:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么MAP会给出错误,因为MCMC在同一场景中工作正常? 我在下面写代码的相关部分。你知道吗

tau = Uniform('tau', lower=0.01, upper=5, doc='tau') rv = [ Multinomial("rv"+str(i), count[i], prob_distribution[i], value = data[i], observed =True) for i in xrange(0, len(count)) ] M = MAP([rv, tau]) M.fit() tau_hat = M.tau.value()

错误:AttributeError:'MAP'对象没有属性'tau'(对于最后一行M。τ值())

另一方面,如果我用MCMC代替MAP,它工作得很好:

m = MCMC([tau, rv]) m.sample(iter = 500) print m.trace('tau')

我想要tau的点估计,在这个点上后验概率最大,并将其与贝叶斯预测(我使用MCMC)进行比较

有关变量的一些信息:

概率分布是一个确定性函数,给定tau和一些其他信息,它返回一个预测概率分布列表。我有大约200个游戏,所以概率分布是一个200个列表的列表(每个列表包含该游戏动作的概率分布,例如[0.4, 0.4, 0.2])。同样,count是一个200个数字的列表,count[I]表示Ith游戏被玩的次数。数据[i]是ith游戏的观察信息,例如,如果数据[i]=[10 10 6],计数[i]将是26

附加注释

如果我包括以下行:

model = Model([rv, tau])

那我就看看我用不用

M = MAP(model)m = MCMC(model)

这会产生如下错误:

TypeError:hasattr():属性名必须是字符串

有人能解释一下发生了什么事吗?你知道吗


Tags: 数据信息游戏map列表model属性value
1条回答
网友
1楼 · 发布于 2024-06-08 23:02:20

在PyMC2中,MCMC对象将模型节点公开为实例变量,而MAP对象不公开。向pymc开发者提交一个特性请求是值得的。您可以通过将最后一行替换为

tau_hat = tau.value

此解决方案的一个完整的、最少的示例如下:

from pymc import *

count = [10, 10]
prob_distribution = [[.5, .5], [.1, .2, .7]]
data = [[2, 8], [2, 3, 5]]

tau = Uniform('tau', lower=0.01, upper=5)
rv = [ Multinomial("rv"+str(i), count[i], prob_distribution[i], value = data[i], observed=True) for i in xrange(0, len(count)) ]
M = MAP([rv, tau])
M.fit()
tau_hat = tau.value

请注意,tau并不是由这个模型中的数据通知的。。。你知道吗

相关问题 更多 >