Inferência de rede bayesiana usando pymc (confusão do iniciante)

12

Atualmente, estou fazendo o curso PGM de Daphne Koller no Coursera. Nesse sentido, geralmente modelamos uma Rede Bayesiana como um gráfico direcionado de causa e efeito das variáveis ​​que fazem parte dos dados observados. Mas, nos tutoriais e exemplos do PyMC, geralmente vejo que não é exatamente modelado da mesma maneira que o PGM ou pelo menos estou confuso. No PyMC, os pais de qualquer variável observada no mundo real geralmente são os parâmetros da distribuição que você usa para modelar a variável.

Agora, minha pergunta é realmente prática. Suponha que eu tenha 3 variáveis ​​para as quais os dados são observados (A, B, C) (vamos supor que sejam todas variáveis ​​contínuas apenas por causa disso). De algum conhecimento de domínio, pode-se dizer que A e B causam C. Portanto, temos um BN aqui - A, B são os pais e C são os filhos. agora da equação BN P (A, B, C) = P (C | A, B) * P (A) * P (B)

Posso dizer que A e B são algumas distribuições normais com algum mu e sigma, mas como eu modelo P (C | A, B)? A idéia geral que quero aprender é como eu aprendo esse BN usando PyMC para que eu possa consultar o BN. Ou eu tenho que aumentar o BN com os parâmetros do modelo de alguma forma.

Esse problema é solucionável usando o pymc? ou eu entendi errado alguns fundamentos?

Qualquer ajuda seria apreciada!

zubinmehta
fonte

Respostas:

6

Dê uma olhada em uma postagem no Healthy Algorithm: http://healthyalgorithms.com/2011/11/23/causal-modeling-in-python-bayesian-networks-in-pymc/

também no totorial do PyMC: http://pymc-devs.github.io/pymc/tutorial.html

Talvez você tente o seguinte clipe de código (supondo que você importou o pymc como 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)
George
fonte