0

我不明白为什么 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.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] 表示我th玩游戏的次数。data[i] 是 ith游戏的观察信息,例如如果 data[i] = [10 10 6],count[i] 将为 26

附加说明

如果我包括以下行:

model = Model([rv, tau])

然后不知道我是否使用

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

这会产生如下错误:

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

有人可以解释发生了什么吗?

4

1 回答 1

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此模型中的数据并未告知书面...

于 2014-06-05T02:37:23.433 回答