Question

Quelqu'un sait-il d'un exemple de code de travail de l'algorithme somme produit (Loopy) croyance pour les réseaux bayésiens? Je l'ai parcouru la terre pendant deux jours, mais ne l'ai pas eu beaucoup de chance. Je suis indifférent à quelle langue il est.

Tous les documents que j'ai trouvé sur le sujet sont pleins de mathspeak Arcane et absurdement ambigu. Il ne semble pas comme un algorithme difficile, mais je ne peux pas être sûr parce que certains des bits difficiles sont passés sous silence tant.

Alternativement, un exemple qui utilise des nombres réels (plutôt que les noms de variables) serait probablement faire l'affaire aussi bien.

Était-ce utile?

La solution 2

J'ai implémenté l'algorithme de propagation de croyance Pearl pour bayésienne Networks. Il prend en charge la propagation Loopy ainsi, car il prendra fin lorsque les valeurs de croyance éclairées convergent à l'intérieur de 0,001.

Tout le code est en Java, et il peut être trouvé dans mon Code Google stylo repo svn ui.

Cela ne fait pas explicitement un graphique des facteurs.

La classe « Support » a une fonction principale, et deux méthodes statiques qui créent de petits réseaux que vous pouvez jouer avec. En particulier, je mis à exécution les trois nœuds réseau burlar-FreightTruck-Alarm trouvé dans le livre de Naples, et mes numéros du départ. (Pas de promesses au-delà de cela!)

Autres conseils

Je suis dans une situation similaire. J'utilise le livre « Reconnaissance et apprentissage automatique » par Christopher M. Bishop pour une introduction théorique, même si je ne veux utiliser l'algorithme dans un autre contexte. Le chapitre sur « max-produit » et « somme produit » décrit la propagation de croyance, même si elle est très mathématique.

Je suis toujours à la recherche d'un petit exemple numérique, donc si vous trouvez que je serais très intéressé.

vous pouvez jeter un oeil Pendant ce temps à libDAI , une source ouverte bibliothèque qui implémente BP.

Je suis un graphique facteur de mise en œuvre / croyance algorithme de propagation dans Clojure, mais le code est pas encore prêt. (Mon code soulève également des réseaux bayésiens de logique propositionnelle à premier ordre / logique d'ordre supérieur.)

Quoi qu'il en soit, je voudrais partager quelques conseils:

  1. Tout d'abord, notez que même si la marginalisation est notée somme, ses propriétés sont différentes de sommation. En particulier, il permute aux produits de tables de probabilités (appelé potentiel). Voilà pourquoi dans la dérivation mathématique, des sommes et des produits peuvent être échangés, alors que dans l'arithmétique ordinaire, ils ne peuvent pas.

  2. Notez que dans l'algorithme de Pearl, les messages qui vont au amont et en aval sont différents - vraisemblances aller en amont et en aval probabilités vont. (Ceci est la raison pour laquelle la règle de Bayes travaille dans la dérivation de la propagation des croyances).

  3. Dans l'algorithme de graphe de facteur, les messages sont CPTs (tables de probabilités conditionnelles) tels que P (A | K). Les tubes cathodiques de P (A | K) et P (K | A) et P (A, K) contiennent essentiellement les mêmes informations. À un noeud terminal, nous devons marginaliser ainsi que l'état du CPT sur les variables appropriées. Cela semble être occulté dans les notations mathématiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top