#python #bayesian #pymc3
#python #байесовский #pymc3
Вопрос:
Я пытаюсь подогнать модель бета-биномиальной регрессии и хотел бы указать следующие предварительные параметры a, b
:
p(a, b) ~ | (a b)^(-5/2) if a > 0 and b > 0
| 0 otherwise.
До сих пор я пытался использовать DensityDist
следующим образом:
import pymc3 as mc
logp = lambda x: mc.switch(
mc.and_(mc.gt(x[0], 0), mc.gt(x[1], 0)),
-2.5 * mc.log(x[0] x[1]),
-np.inf)
ab = mc.DensityDist('ab', logp, shape=(2,), testval=(1, 1))
но определение вероятности кусочно, подобное этому (по понятным причинам), вызывает проблемы с числовой оптимизацией, например, find_MAP
.
Я сталкивался Bounded
с, который позволяет определять ограниченные одномерные распределения, но не смог понять, как распространить это на многомерные распределения. Возможно ли реализовать вышеупомянутое идиоматическим способом, который хорошо сочетается с числовой оптимизацией?
Комментарии:
1. Вероятно, вы могли бы заменить np.inf на очень большое число. Тогда распределение вероятностей будет по существу таким же, но оптимизаторы все равно должны работать нормально.