Вывод байесовской сети с использованием pymc (путаница для начинающих)

12

В настоящее время я прохожу курс PGM Дафни Коллер на Coursera. При этом мы обычно моделируем байесовскую сеть как причинно-следственный ориентированный график переменных, которые являются частью наблюдаемых данных. Но в учебниках и примерах PyMC я обычно вижу, что он не совсем смоделирован так же, как PGM, или, по крайней мере, я запутался. В PyMC родителями любой наблюдаемой переменной реального мира часто являются параметры распределения, которые вы используете для моделирования переменной.

Теперь мой вопрос действительно практический. Предположим, у меня есть 3 переменные, для которых наблюдаются данные (A, B, C) (давайте предположим, что все они являются непрерывными переменными только ради этого). Из некоторого знания предметной области можно сказать, что A и B вызывают C. Итак, у нас есть BN - A, B - родители, а C - дети. Теперь из уравнения BN P (A, B, C) = P (C | A, B) * P (A) * P (B)

Я могу сказать, что A и B - это некоторые нормальные распределения с некоторыми мю и сигмой, но как мне моделировать P (C | A, B)? Основная идея, которую я хочу изучить, состоит в том, как узнать этот BN с помощью PyMC, чтобы я мог запросить BN. Или мне нужно каким-то образом дополнить BN параметрами модели.

Эта проблема решаема с помощью pymc? или я неправильно понял некоторые основы?

Любая помощь будет оценена!

zubinmehta
источник

Ответы:

6

Взгляните на пост в Здоровом Алгоритме: http://healthyalgorithms.com/2011/11/23/causal-modeling-in-python-bayesian-networks-in-pymc/

также в учебнике PyMC: http://pymc-devs.github.io/pymc/tutorial.html

Может быть, вы попробуете следующий фрагмент кода (при условии, что вы импортировали pymc как mc):

A = mc.Normal('A', mu_A, tau_A)
B = mc.Normal('B', mu_B, tau_B)
p_C = mc.Lambda('p_C', lambda A=A, B=B: <<dependency spec goes here>>, doc='Pr[C|AB]')
C = mc.Bernoulli('C', p_C)
Джордж
источник