2016-01-28 2 views
2

Мой вопрос заключается в том, как использовать пакет PYMC3 для выполнения условных вероятностных моделей.Условная вероятность использования Pymc3

У меня есть набор данных a_observed, b_observed, c_observed, и я хочу найти отношения между ними. Я подозреваю, что a, b, c - все нормальные распределения, b зависит от a, c зависит от a, b. Мне нужно найти параметры.

До сих пор у меня есть:

with model: 

    # define priors 
    muA = pm.Uniform('muA', lower=0, upper=24) 
    muB = pm.Uniform('muB', lower=0, upper=24) 
    muC = pm.Uniform('muC', lower=0, upper=24) 

    sigmaA = pm.Uniform('sigmaA', lower=0, upper=1000) 
    sigmaB = pm.Uniform('sigmaB', lower=0, upper=1000) 
    sigmaC = pm.Uniform('sigmaC', lower=0, upper=1000) 

    distributionA = pm.Normal('a', mu = muA, sd = sigmaA, observed = a_observed) 
    distributionB = pm.Normal('b', mu = muB, sd = sigmaB, observed = b_observed) 
    distributionC = pm.Normal('c', mu = muC, sd = sigmaC, observed = c_observed) 

    start = pm.find_MAP() 
    step = pm.Slice() 

Теперь я хочу, чтобы быть независимым, B | A, C | A, B. Каков наилучший подход в PYMC3 для этого? Я видел здесь лямбда-функции http://healthyalgorithms.com/2011/11/23/causal-modeling-in-python-bayesian-networks-in-pymc/, но этот подход дает условную вероятность напрямую.

Кроме того, я хочу знать, как легко расширить модель до более чем трех переменных с более сложными зависимостями. Благодаря!

ответ

1

Пожалуйста, обратите внимание на следующий вопрос: Simple Bayesian Network via Monte Carlo Markov Chain ported to PyMC3. В связанном gist я портировал пример PyMC2, который вы ссылаетесь выше на PyMC3. Ключ должен использовать pm.Deterministic() и pm.math.switch(). Надеюсь, это поможет.

Смежные вопросы