Inferencia de red bayesiana usando pymc (confusión del principiante)

12

Actualmente estoy tomando el curso PGM de Daphne Koller en Coursera. En eso, generalmente modelamos una Red Bayesiana como un gráfico dirigido de causa y efecto de las variables que forman parte de los datos observados. Pero en los tutoriales y ejemplos de PyMC, generalmente veo que no está modelado del mismo modo que PGM o, al menos, estoy confundido. En PyMC, los padres de cualquier variable del mundo real observada son a menudo los parámetros de la distribución que utiliza para modelar la variable.

Ahora mi pregunta es realmente práctica. Supongamos que tengo 3 variables para las cuales se observan datos (A, B, C) (supongamos que todas son variables continuas por el simple hecho de hacerlo). Según algunos conocimientos de dominio, se puede decir que A y B causan C. Así que tenemos un BN aquí: A, B son los padres y C son los hijos. ahora de la ecuación BN P (A, B, C) = P (C | A, B) * P (A) * P (B)

Puedo decir que A y B son algunas distribuciones normales con algo de mu y sigma, pero ¿cómo modelo P (C | A, B)? La idea general que quiero aprender es cómo aprendo este BN usando PyMC para poder consultar el BN. ¿O tengo que aumentar el BN con los parámetros del modelo de alguna manera.

¿Se puede resolver este problema usando pymc? o tengo algunos fundamentos mal?

¡Cualquier ayuda sería apreciada!

zubinmehta
fuente

Respuestas:

6

Eche un vistazo a una publicación en Algoritmo saludable: http://healthyalgorithms.com/2011/11/23/causal-modeling-in-python-bayesian-networks-in-pymc/

también en el totorial de PyMC: http://pymc-devs.github.io/pymc/tutorial.html

Quizás intente con el siguiente clip de código (suponiendo que haya importado 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)
Jorge
fuente