Я хотел бы построить байесовскую сеть в clojure, так как я не нашел никакого подобного проекта.
Я изучил много теории BN, но все же я не вижу, как реализуется сеть (я не то, что люди называют "гуру" для чего угодно, но особенно не для функционального программирования).
Я знаю, что BN - это не что иное, как DAG и таблица с большими вероятностями (по одному для каждого node), но теперь у меня нет клей, как реализовать DAG.
Моя первая идея была огромным набором (DAG) с некоторыми небольшими картами (node DAG), каждая карта должна иметь имя (вероятно, a: key) таблицу вероятностей (другая карта?). Вектор родителей и, наконец, вектор не -оценки.
Теперь я не знаю, как реализовать ссылку родителей и не-потомков (что я должен положить в два вектора). Я предполагаю, что указатель должен быть совершенным, но clojure недостаток его; Я мог бы вставить вектор: имя другого node, но он будет медленным, не так ли?
Я думал, что вместо вектора я мог бы использовать больше наборов, таким образом быстрее найти потомков node.
Аналогичная проблема для таблицы вероятности, где мне еще нужна ссылка на других узлах.
Наконец, я также хотел бы изучить BN (построить сеть, начиная с данных), это означает, что я буду менять много как таблицы вероятностей, края, так и узлы.
Должен ли я использовать изменяемые типы или они только увеличивали бы сложность?