我不明白为什么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()
错误:属性错误:' MAP'对象没有属性' tau' (对于最后一行M.tau.value())
另一方面,如果我使用MCMC代替MAP,它可以正常工作:
m = MCMC([tau, rv])
m.sample(iter = 500)
print m.trace('tau')
我想要后点具有最大概率的tau点估计,并将其与贝叶斯预测(我使用MCMC)进行比较
有关变量的一些信息:
prob_distribution是一个确定性函数,给定tau和其他一些信息返回每个游戏的预测概率分布列表。我有大约200个游戏,所以prob_distribution是200个列表的列表(每个列表包含该游戏的动作的概率分布,例如[0.4, 0.4, 0.2]
)类似地,count是200个数字的列表,count [i]表示我的次数{{玩了{1}}游戏。 data [i]是i th
游戏的观察信息,例如,如果data [i] = th
,count [i]将为26
附加说明
如果我包含以下行:
[10 10 6]
然后判断我是否使用
model = Model([rv, tau])
或M = MAP(model)
这给出了如下错误:
TypeError:hasattr():属性名称必须为字符串
有人可以解释一下发生了什么吗?
答案 0 :(得分:1)
在PyMC2中,MCMC对象将模型节点公开为实例变量,但MAP对象不公开。可能值得用pymc-devs提交功能请求。您可以通过用
替换最后一行来获取tau的MAP值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
不会被此模型中的数据告知...