Я не понимаю, почему 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')
Мне нужна точечная оценка тау, при которой апостериорная вероятность имеет максимальную вероятность, и сравнить ее с байесовским прогнозом (для которого я использую MCMC)
Немного информации о переменных:
prob_distribution — это детерминированная функция, которая с учетом tau и некоторой другой информации возвращает список прогнозируемых распределений вероятностей для каждой игры. У меня около 200 игр, поэтому prob_distribution — это список из 200 списков (каждый из которых содержит распределение вероятностей по действиям для этой игры, например [0.4, 0.4, 0.2]
). Точно так же count — это список из 200 чисел, count[i] обозначает количество раз, когда была сыграна ith
игра. data[i] — это наблюдаемая информация для игры ith
, например, если data[i] = [10 10 6]
, count[i] будет 26
Дополнительное примечание
Если я включу следующую строку:
model = Model([rv, tau])
то независимо от того, использую ли я
M = MAP(model)
or m = MCMC(model)
это дает ошибку следующим образом:
TypeError: hasattr(): имя атрибута должно быть строкой
Может кто-нибудь объяснить, что происходит?