Как я могу указать произвольное ограниченное многомерное распределение?

#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 на очень большое число. Тогда распределение вероятностей будет по существу таким же, но оптимизаторы все равно должны работать нормально.