Пример кода распространения Loopy Belief - PullRequest
8 голосов
/ 03 марта 2010

Кто-нибудь знает пример работающего кода алгоритма суммирования для (циклического) убеждения для байесовских сетей? Я обыскивал землю пару дней, но мне не повезло. Мне безразлично, на каком это языке.

Все документы, которые я нашел по этой теме, полны тайных и нелепо неоднозначных математических высказываний. Это не кажется сложным алгоритмом, но я не могу быть уверен, потому что некоторые из хитрых кусков затушеваны так много.

С другой стороны, пример, который использует действительные числа (а не имена переменных), вероятно, тоже добился бы успеха.

Ответы [ 3 ]

2 голосов
/ 09 марта 2010

Я реализовал алгоритм распространения убеждений Перла для Байесовских сетей. Он также поддерживает петлевое распространение, так как он прекратит работу, когда информированные значения убеждений сходятся в пределах 0,001.

Весь код написан на Java, и его можно найти в моем Google code pen-ui svn repo.

Это явно не создает фактор-граф.

Класс «Поддержка» имеет основную функцию и пару статических методов, которые создают небольшие сети, с которыми вы можете играть. В частности, я реализовал трехузловую сеть Burlar-FreightTruck-Alarm, описанную в книге Неаполитана, и мои цифры подтвердились. (Больше никаких обещаний!)

2 голосов
/ 04 марта 2010

Я в похожей ситуации. Я использую книгу «Распознавание образов и машинное обучение» Кристофера М. Бишопа для теоретического введения, хотя я хочу использовать алгоритм в каком-то другом контексте. Глава о «максимальном продукте» и «суммарном продукте» описывает распространение убеждений, хотя оно очень математическое.

Я все еще ищу маленький числовой пример, так что, если вы найдете тот, я был бы очень заинтересован.

Тем временем вы можете взглянуть на libDAI , библиотеку с открытым исходным кодом, которая реализует BP.

0 голосов
/ 19 августа 2012

Я реализую алгоритм распространения графа / мнений в Clojure, но код еще не готов. (Мой код также поднимает байесовские сети из логики высказываний в логику первого / высшего порядка.)

В любом случае, я хотел бы поделиться некоторыми советами:

  1. Во-первых, обратите внимание, что даже несмотря на то, что маргинализация обозначена как суммирование, ее свойства отличаются от суммирования. В частности, он коммутирует с произведениями таблиц вероятностей (известных как потенциалы). Вот почему в математическом выводе суммы и произведения можно обменивать, тогда как в обычной арифметике они не могут.

  2. Обратите внимание, что в алгоритме Перла сообщения, которые идут вверх и вниз по потоку, отличаются - вероятности идут вверх по течению, а вероятности идут вниз по течению. (Это причина, по которой правило Байеса работает в процессе распространения убеждений).

  3. В алгоритме факторного графа сообщения являются CPT (таблицами условной вероятности), такими как P (A | K). CPT P (A | K) и P (K | A) и P (A, K) содержат по существу одну и ту же информацию. В терминальном узле мы должны маргинализировать, а также обусловить CPT соответствующими переменными. Это кажется неясным в математических обозначениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...