pymc3 Шаговая функция Хевисайда - PullRequest
1 голос
/ 20 февраля 2020

В pymc3, как можно использовать пошаговую функцию Хевисайда в качестве детерминированного c преобразования?

Любая пошаговая функция будет работать, но я спрашиваю о пошаговой функции Хевисайда специально для устранения ее неоднозначности. документация называется «функцией шага», которая говорит о выборке шагов, которые не имеют отношения к тому, что я ищу, и затрудняют поиск соответствующей документации, если она существует. Также я не смог найти где-нибудь, что все поддерживаемые преобразования задокументированы.

Я хочу 1 if x >= 0 else 0, но писать это буквально так не получится, потому что предположительно x >= 0 оценивает объект, и так выражение if сразу оценивается как 1, а затем h всегда будет равно 1.

import pymc3 as pm

with pm.Model() as model:
    x = pm.Normal('x', mu=0, sigma=1)
    h = pm.Deterministic('h', 1 if x >= 0 else 0)  # ???

1 Ответ

1 голос
/ 21 февраля 2020

Попробуйте использовать theano.tensor.switch. То есть

import pymc3 as pm
import theano.tensor as tt

with pm.Model() as model:
    x = pm.Normal('x', mu=0, sigma=1)
    h = pm.Deterministic('h', tt.switch(x < 0, 0, 1))
...