Обусловливающая случайная величина PyMC3 для нескольких дискретных родителей - PullRequest
0 голосов
/ 30 марта 2019

Я недавно начал заниматься вероятностным программированием с использованием PyMC3. В моем сценарии у меня есть 3 случайные величины: On, Triangle и X, так что X зависит от треугольника и On. Треугольник и Ве следуют за распределениями Бернулли, и в зависимости от того, какое значение они принимают, значение X, которое следует за нормальным, изменяется.

Я написал несколько фиктивных кодов для проверки этой концепции, и этот код не очень хорош, в основном потому, что вы не можете вызывать numpy.isnan() в дистрибутивах PyMC3. Я только начал работать в этой среде и знаю, что не пишу код, который будет работать, но я публикую это здесь, чтобы вы могли увидеть, что я сделал.

with pymc3.Model() as model:
    on = pymc3.distributions.discrete.Bernoulli('on', p=.7)
    x_on = pymc3.distributions.continuous.Normal('x_on', 10, .4)

    pTriangle_given_on = 1
    pTriangle_given_not_on = .7
    pTriangle = pymc3.math.switch(on, pTriangle_given_on, pTriangle_given_not_on)
    triangle = pymc3.distributions.discrete.Bernoulli('triangle', p=pTriangle)

    name = None
    x_triangle = None

    if triangle:
        name = pymc3.distributions.discrete.Categorical('name', p=[.3, .2, .1, .1, .2, .1])
    else:
        name = pymc3.distributions.discrete.Categorical('name', p=[.1, .5, .4])

    if on:
        x_triangle = pymc3.Deterministic('x_triangle', x_on)
    elif triangle:
        x_triangle = pymc3.Normal('x_triangle', 5, 1)
    else:
        x_triangle = numpy.nan

    trace = pymc3.sample()
    pymc3.plot_posterior(trace)

Я не уверен, как указать условную зависимость X от треугольника и от. Мы будем очень признательны за любые ваши мысли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...