首先列举当前主要构建贝叶斯网络的一些工具:

1. 软件:Netica、SMILE

2. MATLAB包:BNT

3. Python包:pgmpy、libpgm、pomegranate

4. R包:dbnlearn

如果是单纯的进行贝叶斯网络的学习与推理的话,那我建议用Netica或者是pgmpy这两个。其中Netica软件中文教程比较多,教育版免费使用,而且不需要写代码,只用鼠标操作即可(除了贝叶斯网络还可以很方便的手动构建动态贝叶斯网络),但是要注意这个软件是在windows系统下面的。如果是在Python环境下的话,我强烈推荐pgmpy包,因为这个pgmpy目前还有作者在进行日常维护,内部的样例代码也很好用,给作者发邮件也会得到很好的解答,而且这个包还有一个gitter的group讨论,代码也很简单,初学者很容易上手,比较适合在Python环境下有后续任务需要调用贝叶斯网络输出结果的情况。

用pgmpy进行参数学习的代码我就不放了,因为在pgmpy的github主页上已经有很详细的BN参数学习包括推理的的代码了,直接按需要修改就行。

但是关于动态贝叶斯网络(Dynamic Bayesian Network)DBN目前在pgmpy官方教程里只有通过设置CPD的方式进行后续推理而没有进行参数学习/结构学习的方法,询问过作者是因为在DBN上进行参数学习还是有些困难的。pgmpy的这个动态贝叶斯网络参数学习的问题我发现不论是在中文还是英文社区里都没有人去做这个事情。所以通过询问作者,现在在这个pgmpy包下进行DBN参数学习的唯一解决方法就是将DBN根据你设计的连接关系展开,比如说将一个动态贝叶斯网络展开成为一个具有两个时间片的普通静态贝叶斯网络(2 time slice BN, 2-TBN),相较于单个贝叶斯网络,这种展开形式多了两个时间片之间的状态转移的CPD。展开之后剩下的就是按照原来作者给的示例程序里面的普通贝叶斯网络进行相应的参数学习就行了。

用过pgmpy的看到这里基本上就知道这个问题怎么解决了,具体的代码我后面再写CSDN的时候补上。

更多推荐

在Python环境下使用pgmpy构建动态贝叶斯网络并进行参数学习(附详细代码)