2010-03-02 7 views
6

¿Alguien sabe de un código de trabajo que ejemplifica el algoritmo de suma de producto para la creencia (de bucle) para Bayesian Networks? He recorrido la tierra durante un par de días, pero no he tenido mucha suerte. Soy indiferente al idioma en el que se encuentra.Ejemplo de código de propagación de Loopy Belief

Todos los documentos que he encontrado sobre el tema están llenos de expresiones matemáticas arcaicas y absurdamente ambiguas. No parece un algoritmo difícil, pero no puedo estar seguro porque algunas de las partes más difíciles se pasan por alto demasiado.

Alternativamente, un ejemplo que usa números reales (en lugar de nombres de variables) probablemente también lo haga.

Respuesta

2

Implementé el algoritmo de propagación de creencias de Pearl para Bayesian Networks. También es compatible con la propagación de bucle, ya que terminará cuando los valores de creencia informados converjan dentro de 0.001.

Todo el código está en Java, y se puede encontrar en mi Google code pen-ui svn repo.

Esto no explícitamente hacer una gráfica de los factores.

La clase "Soporte" tiene una función principal y un par de métodos estáticos que crean redes pequeñas con las que puede jugar. En particular, implementé la red Burlar-FreightTruck-Alarm de tres nodos que se encuentra en el libro de Napolitano, y mis números salen. (Sin promesas más allá de eso!)

2

Estoy en una situación similar. Estoy utilizando el libro "Reconocimiento de patrones y aprendizaje automático" de Christopher M. Bishop para una introducción teórica, aunque quiero usar el algoritmo en otro contexto. El capítulo sobre "max-product" y "sum-product" describe la propagación de creencias, aunque es muy matemática.

Todavía estoy buscando un pequeño ejemplo numérico, así que si encuentra uno, estaría muy interesado.

Mientras tanto, puede echar un vistazo a libDAI, una biblioteca de código abierto que implementa BP.

+0

El libro: "Learning Bayesian Networks" de Napolitano ofrece dos versiones del algoritmo. No se deja ningún detalle, aunque tiene una sintaxis matemática difícil de descifrar. También da * copiosos * ejemplos numéricos de lo que ocurre cuando se ejecutan los algoritmos. Puedo enviarle el PDF si lo desea (más de 700 páginas, bleh). No aborda explícitamente la propagación de bucle, pero eso es algo que probablemente pueda resolver. Buenos recursos aquí: http://www.mcs.vuw.ac.nz/courses/COMP421/2008T1/documents/marcus/ Lo estoy implementando yo mismo (en Java) así que publicaré algo cuando funcione y está depurado –

+0

También, consulte http://www.mcs.vuw.ac.nz/courses/COMP421/2008T1/code/GM/markov.py para una implementación de Python. Aunque estoy convencido de que tiene errores, y no lo entiendo. –

+1

Tengo el libro de Napolitano de la biblioteca. ¡Es realmente bueno tener algunos buenos ejemplos! Gracias por el consejo. Lamentablemente, no explica la relación de las redes bayesianas, las redes de markov y los gráficos factoriales, que parece ser un vínculo que actualmente me falta para comprender por completo la BP descabellada. Algunos otros recursos que encontré útiles: http://www.stanford.edu/~montanar/BOOK/partD.pdf http://www.kyb.tuebingen.mpg.de/bs/people/jorism /articles/thesis-mooij-hyperref.pdf – dudemeister

0

Estoy implementando un algoritmo de propagación de gráficos/creencias en Clojure, pero el código aún no está listo. (Mi código también eleva las redes bayesianas de la lógica proposicional de primer orden/lógica de orden superior.)

De todos modos, me gustaría compartir algunos consejos:

  1. En primer lugar, tenga en cuenta que a pesar de la marginación se denota como sumatoria, sus propiedades son diferentes de la sumatoria. En particular, conmuta con productos de tablas de probabilidad (conocidas como potenciales). Es por eso que en la derivación matemática, las sumas y los productos pueden intercambiarse, mientras que en la aritmética ordinaria no pueden.

  2. Tenga en cuenta que en el algoritmo de Pearl, los mensajes que van en sentido ascendente y descendente son diferentes: las probabilidades van en sentido ascendente y las probabilidades van en sentido descendente. (Esta es la razón por la cual la regla de Bayes funciona en la derivación de la propagación de creencias).

  3. En el algoritmo de gráfico de factores, los mensajes son CPT (tablas de probabilidad condicional) como P (A | K). Los CPT de P (A | K) y P (K | A) y P (A, K) contienen esencialmente la misma información. En un nodo terminal, tenemos que marginar y condicionar el CPT sobre las variables apropiadas. Esto parece estar oscurecido en las notaciones matemáticas.