Sis*_*cia 14 algorithm functional-programming clojure directed-acyclic-graphs
我想在clojure中建立一个贝叶斯网络,因为我还没有找到任何类似的项目.
我已经研究了很多BN的理论,但我仍然看不出如何实现网络(我不是人们称之为"大师"的任何东西,尤其不是函数式编程).
我知道BN只不过是一个DAG和很多概率表(每个节点一个)但现在我没有胶水如何实现DAG.
我的第一个想法是一个巨大的集合(DAG)与一些小地图(DAG的节点),每个地图应该有一个名称(可能是:键)概率表(另一个地图?)父母的矢量,最后一个矢量的非下载.
现在我不知道如何实现父母和非后代的引用(我应该把它放在两个向量中).我猜一个指针应该是完美的,但是clojure缺乏它; 我可以在向量中放入:另一个节点的名称,但它会很慢,不是吗?
我在想,而不是矢量,我可以使用更多的集合,这样可以更快地找到节点的后代.
对于概率表的类似问题,我仍然需要在其他节点处进行一些引用.
最后,我也想学习BN(建立网络由数据开始),这意味着我将改变很多既概率表,边和节点.
我应该使用可变类型还是只会增加复杂性?
你可以尝试更扁平化,拥有几张由节点 id 索引的地图:一张用于概率表,一张用于父母,一张用于非后代(我不是 BN 专家:这是什么,它是如何使用的等等?它感觉就像可以从父母表^W关系^W映射中重新计算的东西)。
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |