2010-03-02 13 views
6

Qualcuno conosce un esempio di codice funzionante dell'algoritmo sum-product per la credenza (loopy) per le reti bayesiane? Ho setacciato la terra per un paio di giorni ma non ho avuto molta fortuna. Sono indifferente al linguaggio in cui si trova.Loopy Belief Esempio di codice di propagazione

Tutti i documenti che ho trovato sull'argomento sono pieni di mathspeak arcano e assurdamente ambiguo. Non sembra un algoritmo difficile, ma non posso esserne sicuro perché alcuni dei bit più difficili vengono ignorati così tanto.

In alternativa, un esempio che utilizza numeri reali (anziché nomi di variabili) probabilmente farebbe anche il trucco.

risposta

2

Ho implementato l'algoritmo di propagazione delle credenze di Pearl per le reti bayesiane. Supporta anche la propagazione ciclica, poiché terminerà quando i valori di convinzione informati convergeranno entro 0,001.

Tutto il codice è in Java, e può essere trovato nel mio Google code pen-ui svn repo.

Questo non fa esplicitamente un grafico fattore.

La classe "Supporto" ha una funzione principale e un paio di metodi statici che creano piccole reti con cui si può giocare. In particolare, ho implementato la rete Burlar-FreightTruck-Alarm a tre nodi trovata nel libro di Napoletano e il mio numero è stato estratto. (Nessuna promessa oltre a questo!)

2

Sono in una situazione simile. Sto usando il libro "Pattern Recognition and Machine Learning" di Christopher M. Bishop per un'introduzione teorica, anche se io voglio usare l'algoritmo in qualche altro contesto. Il capitolo su "max-prodotto" e "sum-product" descrive la propagazione delle credenze, sebbene sia molto matematico.

Sto ancora cercando un piccolo esempio numerico, quindi se ne trovi uno sarei molto interessato.

Nel frattempo è possibile dare un'occhiata a libDAI, una libreria open source che implementa BP.

+0

Il libro: "Learning Networks Bayesian" di Neapolitan fornisce due versioni dell'algoritmo. Nessun dettaglio è lasciato fuori, anche se ha qualche sintassi matematica crufty. Fornisce anche * numerosi esempi numerici di ciò che accade quando gli algoritmi funzionano. Posso inviarti il ​​PDF se vuoi (oltre 700 pagine, bleh). Non affronta esplicitamente la propagazione ciclica, ma è una cosa che probabilmente posso immaginare. Buone risorse qui: http://www.mcs.vuw.ac.nz/courses/COMP421/2008T1/documents/marcus/ Lo sto implementando da solo (in Java) quindi pubblicherò qualcosa quando funzionerà e è debug. –

+0

Inoltre, consultare http://www.mcs.vuw.ac.nz/courses/COMP421/2008T1/code/GM/markov.py per un'implementazione Python. Anche se sono convinto che sia bacato e non lo capisco. –

+1

Ho preso il libro di Napoletano dalla biblioteca. Davvero bello avere dei buoni esempi! Grazie per il consiglio. Sfortunatamente non spiega la relazione tra reti bayesiane, reti di markov e grafici di fattori che sembra essere il collegamento che attualmente mi manca per comprendere appieno la BP ansiosa. Alcune altre risorse in qualche modo utili: http://www.stanford.edu/~montanar/BOOK/partD.pdf http://www.kyb.tuebingen.mpg.de/bs/people/jorism /articles/thesis-mooij-hyperref.pdf – dudemeister

0

Sto implementando un algoritmo di diagramma di fattore/propagazione della credenza in Clojure, ma il codice non è ancora pronto. (Il mio codice solleva anche reti bayesiane dalla logica proposizionale alla logica del primo ordine/di ordine superiore.)

Comunque, mi piacerebbe condividere alcuni suggerimenti:

  1. Innanzitutto, si noti che anche se l'emarginazione è indicato come somma, le sue proprietà sono diverse dalla somma. In particolare, commuta con prodotti di tabelle di probabilità (noti come potenziali). Ecco perché nella derivazione matematica, somme e prodotti possono essere scambiati, mentre nella normale aritmetica non possono.

  2. Si noti che nell'algoritmo di Pearl i messaggi che vanno a monte ea valle sono diversi: le probabilità vanno a monte e le probabilità vanno a valle. (Questo è il motivo per cui la regola di Bayes funziona nella derivazione della propagazione della credenza).

  3. Nell'algoritmo del fattore grafico, i messaggi sono CPT (tabelle di probabilità condizionale) come P (A | K). I CPT di P (A | K) e P (K | A) e P (A, K) contengono essenzialmente le stesse informazioni. A un nodo terminale, dobbiamo marginalizzare e condizionare il CPT sulle variabili appropriate. Questo sembra essere oscurato nelle notazioni matematiche.