Genle上构建的动态贝叶斯网络

动态贝叶斯网络构建参考的b站某个搬运的国外视频


看完这个展开后的图,我决定自己试试用python实现这样一个简易动态贝叶斯网络。

python实现动态贝叶斯网络

具体的贝叶斯网络知识网上有很多,用的都是pgmpy,大概步骤都是
1)定义贝叶斯网络的节点和边;
2)定义根节点先验概率和其他节点条件概率
3)将条件概率cpd和网络关联
4)完成需要的推理
下面上代码(非专业人员,很多地方写的不好,见谅,欢迎提出宝贵意见和想法)

from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
# 定义贝叶斯网络结构,不同时刻贝叶斯网络不一样,假设每个时刻结构已知,设置为3个时间步
t=3
DBN= [BayesianNetwork() for _ in range(t+1)]
#条件概率
cpd = {}
for k in ['A','B','C','D']:#节点集合cpd.update({k:[]})
#对时间遍历,定义不同时刻的图模型,条件概率,并关联条件概率表
for i in range(0,t):cpd['A'].append(TabularCPD(variable='A' + str(i), variable_card=2, values=[[0.5], [0.5]]))#先验时序节点定义if i == 0:cpd['B'].append(TabularCPD(variable='B' + str(i), variable_card=2, values=[[0.5, 0.5], [0.5, 0.5]],evidence=['A' + str(i)], evidence_card=[2]))cpd['C'].append(TabularCPD(variable='C' + str(i), variable_card=2, values=[[0.5, 0.5], [0.5, 0.5]],evidence=['A' + str(i)], evidence_card=[2]))cpd['D'].append(TabularCPD(variable='D' + str(i), variable_card=2, values=[[1., 0.], [0., 1.]],evidence=['C' + str(i)], evidence_card=[2]))DBN[i] = BayesianNetwork([('A'+str(i), 'B'+str(i)), ('A'+str(i), 'C'+str(i)), ('C'+str(i), 'D'+str(i))])for k in ['A', 'B', 'C', 'D']:#对节点进行遍历DBN[i].add_cpds((cpd[k][i]))print(DBN[i].check_model())infer = VariableElimination(DBN[i])for k in ['B']:#待推断的并且作为下一个时刻节点输入的根节点结合temp= infer.query(variables=[k+str(i)])print(k+str(i),[[temp.values[0]], [temp.values[1]]])cpd[k][i] = TabularCPD(variable=k+str(i), variable_card=2,values=[[temp.values[0]], [temp.values[1]]])#将其更新为先验概率,即下一个时刻的根节点概率

    if i >0:cpd['B'].append(TabularCPD(variable='B' + str(i), variable_card=2, values=[[0.625, 0.3,0.6,0.1], [0.375,0.7,0.4,0.9]],evidence=['A' + str(i),'B' + str(i-1)], evidence_card=[2,2]))print(cpd['B'][1])cpd['C'].append(TabularCPD(variable='C' + str(i), variable_card=2, values=[[0.5, 0.5], [0.5, 0.5]],evidence=['A' + str(i)], evidence_card=[2]))cpd['D'].append(TabularCPD(variable='D' + str(i), variable_card=2, values=[[1,1,1,0], [0,0,0,1]],evidence=['C' + str(i),'B' + str(i-1)], evidence_card=[2,2]))DBN[i] = BayesianNetwork([('A' + str(i), 'B' + str(i)), ('A' + str(i), 'C' + str(i)), ('C' + str(i), 'D' + str(i)),('B' + str(i-1), 'B' + str(i)),('B' + str(i-1), 'D' + str(i))])#DBN[i].add_node('B' + str(i-1))#DBN[i].add_edge(('B' + str(i-1), 'B' + str(i)),('B' + str(i-1), 'D' + str(i)))#在初始贝叶斯模型上更新模型#print(DBN[i].nodes)for k in ['A', 'B', 'C', 'D']:#对节点进行遍历DBN[i].add_cpds((cpd[k][i]))for k in ['B']:  # 待推断的并且作为下一个时刻节点输入的根节点结合DBN[i].add_cpds((cpd[k][i-1]))print(DBN[i].check_model())infer = VariableElimination(DBN[i])for k in ['B']:#待推断的并且作为下一个时刻节点输入的根节点结合temp = infer.query(variables=[k + str(i)])print(k+str(i)+'的先验概率',[[temp.values[0]], [temp.values[1]]])cpd[k][i] = TabularCPD(variable=k+str(i), variable_card=2,values=[[temp.values[0]], [temp.values[1]]])#将其更新为先验概率,即下一个时刻的根节点概率
infer = VariableElimination(DBN[2])
temp = infer.query(variables=['D2'])
print(temp)


推断的概率和用软件算的应该一样,不过重要度计算和参数估计按我这样写应该不太行。

python实现简易动态贝叶斯网络的推断相关推荐

  1. 动态贝叶斯网络中TBN与DBN的区别

    Temporal Bayesian Network (TBN):  the model structure does not change over time slices,  i.e., the m ...

  2. 在Python中使用贝叶斯网络的实例

    我们在之前的文章中(请见文末给出的参考资料[1])已经介绍了贝叶斯网络的基本原理,以及基于贝叶斯网络进行概率推断(Exact Inference)的消去法.本文将结合一个具体的例子来演示在Python ...

  3. Python和贝叶斯网络:贝叶斯理论(6)

    在前面的章节中我们学习了贝叶斯网络的基本知识.本章将利用Python建立如下图所示的贝叶斯网络: 在Python中建立贝叶斯网络要引入pgmpy包和pandas包,然后编写如下代码: from pgm ...

  4. 贝叶斯分类器与贝叶斯网络

    原文地址:贝叶斯分类器与贝叶斯网络作者:yfx416 贝叶斯分类器是一种基于贝叶斯公式的分类器,是一种基于统计的分类器,它计算在某一特征向量的前提下,各种分类可能出现的概率.把概率最大的那个类当作最终 ...

  5. 西瓜书+实战+吴恩达机器学习(二一)概率图模型之贝叶斯网络

    文章目录 0. 前言 1. 贝叶斯网络结构 2. 近似推断 2.1. 吉布斯采样 3. 隐马尔可夫模型HMM 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 概率 ...

  6. 机器学习数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)

    前言: 这是coursera课程:Probabilistic Graphical Models 上的第二个实验,主要是用贝叶斯网络对基因遗传问题进行一些计算.具体实验内容可参考实验指导教材:bayes ...

  7. 贝叶斯网络(Bayesian Network)

    贝叶斯网络 贝叶斯网络(Bayesian Networks)也被称为信念网络(Belif Networks)或者因果网络(Causal Networks),是描述数据变量之间依赖关系的一种图形模式,是 ...

  8. 一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  9. 贝叶斯网络入门系列之一:资料篇

    贝叶斯网络入门之一:资料篇 基础教材 视频教程 编程实现 好文分享 基础知识篇: 基础教材 基础教材推荐的是2006年出版的<贝叶斯网络引论>[张连文,郭文鹏],总体分为四个部分: ①贝叶 ...

  10. 贝叶斯网络推理算法简单罗列

    题目:贝叶斯网络推理算法简单罗列 上一篇<贝叶斯网络与最大可能解释(MPE)问题>理清了最大可能解释(Most Probable Explanation, MPE)的概念,接下来准备在MA ...

最新文章

  1. Android 监听 Android中监听系统网络连接打开或者关闭的实现代码
  2. 数据中台产品经理面试指南(二)
  3. 【蓝桥杯省赛】冲刺练习题【循环】倒计时【15】天
  4. fatal: unable to access ‘https://github.com/***.git/‘: OpenSSL SSL_read: Connection was reset, errno
  5. 不是所有问题都适合用神经网络去搞!
  6. java访问同一个变量_java – 从另一个类访问变量
  7. 英特尔中国祝贺高亭宇夺冠:至强CPU提供更精准训练支持
  8. 性能测试很难吗?一文带你学会性能测试核心流程和概念
  9. e盾网络验证源码_趣味设计模式系列:代理模式JDK动态代理源码解析,一文便知
  10. NYOJ题目1045看美女
  11. Oracle 12C 最新补丁下载与安装操作指北
  12. 屌丝c++语言程序设计第二章 c++语言基础
  13. Java期末考试试题及参考答案(01)
  14. there.js移动端 IOS 安卓 360全景视频(vr)
  15. React State
  16. HEVC解码器的TDecCu部分
  17. 安卓手机软件开发_安卓最牛的下载神器,快收藏起来自己偷偷用
  18. 纽约理工计算机科学怎么样,纽约大学计算机科学在什么学院?_托普仕留学
  19. APP全局监听系统Home键
  20. 2021双十一京东活动脚本

热门文章

  1. 1-一、安装NVIDIA控制面板
  2. 20 个前端练手项目合集
  3. 中文字符:中国 的unicode/UTF-8/GBK编码
  4. 大数据应用的现实案例
  5. 迅通雾霾处理技术为清晰都市保驾护航
  6. 无线投影之Miracast技术 收集
  7. Lua内存泄露情况举例
  8. Windows系统win10系统压缩解压软件推荐
  9. 喜马拉雅下载文件解决办法
  10. JAVA后端开发浅谈