基于Matlab的贝叶斯网络工具箱BNT是kevinp.murphy基于Matlab语言开发的关于贝叶斯网络学习的开源软件包,提供了许多贝叶斯网络学习的底层基础函数库,支持多种类型的节点(概率分布)、精确推理和近似推理、参数学习及结构学习、静态模型和动态模型,是学习贝叶斯网络的主要仿真工具。

贝叶斯网络学习由结构学习和参数学习两部分组成:结构学习是利用训练样本集,尽可能结合先验知识,确定合适的贝叶斯网络拓扑结构;参数学习是在给定贝叶斯网络拓扑结构的情况下,确定各节点处的条件概率。BNT工具箱中提供了较为丰富的学习函数,现将其归纳如下:

Learning参数学习

Full obs全部结点可观察                 Partial obs局部可观测

Learn_params最大似然估计             Learn_params_em最大期望EM法

Bayes_update_params贝叶斯方法     Learn_struct_SEM结构最大期望法

Learn_struct_K2 K2算法     Learn_struct_EM学习树扩展贝叶斯网络结构

Learn_struct_gs贪婪搜索GS算法       Learn_struct_EM最大期望EM算法

Learn_struct_he爬山算法  Learn_struct_mcmc马尔科夫链蒙特卡罗算法

除了确定贝叶斯网络的结构和学习方法以外,为了提高运算速度,使各种推理算法能够有效应用,BNT工具箱还采用了多种推理引擎机制,不同的引擎根据不同的算法来完成模型转换、细化和求解。总结下来包括以下四种引擎:a)联合树推理引擎jtree—inf_engine();b)全局联合树推理引擎global_joint_inf_engine();c)信念传播推理引擎belprop_inf_engine();d)变量消元推理引擎var_elim_inf_engine()。其中运算速度最快的是全局联合树推理引擎。

创造贝叶斯网络

为了去定义一个贝叶斯网络,我们必须具体化图结构和变量。

图结构

为了说明这个有向无环图(dag),我们创建了一个邻接矩阵:

对应的贝叶斯网络的矩阵的表达形式为:

并对节点进行了编号:Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4。这些节点的编号必须拓扑有序,也就是说,父节点必须在子节点之前。但是对于复杂的图,这也许有点不方便。

创建贝叶斯网络框架

为了定义图结构,我们必须定义每个节点的大小和类型。如果节点是离散的,它的大小是它每个节点可以选取值的数量。如果这个值是连续的,它可以是一个向量,它的大小是这个向量的长度。在这种情况下,我们假设所有节点是离散和二元的。

现在手工创建一个贝叶斯网络:

同时,我们可以定义哪些节点是可以被观察的。如果不清楚或者提前没有确定,那么可以使用空列表(默认)。

变量

一个模型包括图结构和变量。变量是通过CPD来表达的(CPD= Conditional ProbabilityDistribution),它定义了父节点所给出的概率分布。最简单的CPD的种类是一个表(多维数组),它适合于所有节点都是离散值。需要注意的是离散值并没有假设成有序的。也就是说,它们表述了明确的数量,例如男性和女性,而不是序数数量,例如低、中、高。

TabularCPDs,也叫做CPTs(条件概率表),它存储了多维数组,维数和节点是排列成相同的顺序。例如:对于节点4(WetGrass)是被Sprinkler洒水(2)

、Rain (3)和WetGrass (4)本身所索引的。因此孩子节点总是最后一维。如果一个节点没有父节点,那么它的CPT是列向量来代表它的前面节点。在MATLAB中,数列是从1开始检索的,并且顺序排列在内存中,因此第一个被最快触发索引。节点4的CPT如下:

在这里,我们使用惯例false=1,true=2.在MATLAB中创建了这个CPT:

实际上,我们并不需要重塑这个数列,因为CPD构造器可以为我们构造。因此我们可以执行:

其它的节点也可以相似的建立:

画出建立好的贝叶斯网络:

如图所示:

推理

当创建完贝叶斯网络时,我们就可以用它来推断。这里有许多的算法用于贝叶斯网络推断,这就可以在速度、复杂性、一般性和精确性之间做出不同的权衡。BNT因此提出了不同的推断“引擎”。在这里,我们使用的是推断树引擎,它是所有扩展的推断算法中的母算法。可以被如下创建:

其它的引擎也有相同的构造器,但是会加上额外的,具体算法的变量。一旦它们被创建,所有的引擎都以相同的方式被使用。我们通过下面一部分来表述这些:

计算边缘分布

假设我们想要计算在已知草坪湿的情况下是洒水原因的概率。证据包括W=2(草坪是湿的)。所有其它的节点是隐藏的(不可观察的)、我们可以如下定义:

我们使用了一维细胞(cell)序列而不是向量去处理是因为这些节点可能是不同长度的向量。除此之外,值[]可以用来表示“没有证据”,而不是定义观察模型作为一个独立的论点。

我们对引擎添加一个证据:

这个函数的功能是具体化算法。在jtree引擎的情况下,enter_evidence实现了双行程信息通过的模式。第一个返回的变量包括了合并证据的改进后的引擎。第二个返回的变量包括证据的对数似然函数。

最后,我们计算p=P(S=2|W=2)如下:

我们可以看出p=0.4298。

现在添加下雨的证据,来计算它们之间的不同之处:

可以看出p = P(S=2|W=2,R=2) =0.1945,这比之前的要低很多,这是因为下雨可以解释草坪是湿的的事实。

我们通过使用bar函数来绘制一个离散变量的边缘分布的条形图:

条形图如下:

已观察到的节点

一个已观察到的离散节点通常只有1值(已观察到的那一个),其它的值都是0.BNT对于以观察到的点都是假设它们设置为1:

另外我们添加一个证据通过一个可选变元:

结果显示P(W=1|W=2) = 0和 P(W=2|W=2) = 1。

计算联合分布

我们也可以在一组节点上计算联合概率:

m是一个结构,T字段代表一个包含在特定节点上的联合概率分布的多维数组(在这个案例中,是3维的数组)

我们可以看出P(S=1,R=1,W=2) = 0,这是因为如果既没有下雨有没有洒水,草坪不可能是湿的。

参考文献:

1.  https://code.google.com/p/bnt/

2.  张慧莹 宁媛 邵晓非 机器学习中的贝叶斯网络及其推理分析 2012

基于BNT的贝叶斯模型仿真分析相关推荐

  1. 基于LVD、贝叶斯模型算法实现的电商行业商品评论与情感分析案例

    文章目录 一. 项目需求 1.1 语言处理相关库(snownlp,jieba,gensim) 1.2 LDA主题模型 1.3 相关模型的比较 二.代码: 2.1 导入数据-评论提取-文本去重 2.2 ...

  2. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  3. python基于朴素贝叶斯模型的预测概率和标签信息可视化ROC曲线

    python基于朴素贝叶斯模型的预测概率和标签信息可视化ROC曲线 目录 python基于朴素贝叶斯模型的预测概率和标签信息可视化ROC曲线

  4. matlab贝叶斯编程代码,bnt 基于matlab的贝叶斯工具箱 各种程序与算法,在 网络编程中作为调用 238万源代码下载- www.pudn.com...

    文件名称: bnt下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Others 文件大小: 12067 KB 上传时间: 2014-03-12 下载次数: 1 详细说明:基于matla ...

  5. 小勇rust_基于领域和贝叶斯网络的P2P电子商务细粒度信任模型

    基于领域和贝叶斯网络的 P2P 电子商务细粒度信任模型 田俊峰 田 瑞 [摘 要] 摘 要 针对现有 P2P 电子商务模型信任粒度比较粗糙 , 不能很好体现节 点真实行为的问题 . 提出一种细粒度信任 ...

  6. 一个基于Flask框架做的仿QQ邮箱系统(收发邮件、贝叶斯模型训练、垃圾邮件过滤、个性化标签)

    一个基于Flask框架做的仿QQ邮箱系统(收发## 标题邮件.贝叶斯模型训练.垃圾邮件过滤.个性化标签) 1.贝叶斯邮件垃圾邮件分类 对上千封邮件进行贝叶斯模型分类训练,对基本邮件实现垃圾分类效果. ...

  7. 概率图模型基于R语言(一)贝叶斯模型

    概率图模型基于R语言[一]贝叶斯模型 条件概率 贝叶斯模型 R 参考书:<概率图模型基于R语言> 记录一些代码和自己的想法和目前版本代码的写法(书中有一些无法用了) 随时更新 条件概率 熟 ...

  8. R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

    全文下载链接:http://tecdat.cn/?p=11974 R2WinBUGS软件包提供了从R调用WinBUGS的便捷功能.它自动以WinBUGS可读的格式写入数据和脚本,以进行批处理(自1.4 ...

  9. 感知和行动的贝叶斯模型

    来源:专知 本文附链接,建议阅读5分钟本书探索的贝叶斯方法对感知建模让我们感到兴奋,因为它解释了丰富的数据,并成功地解释了许多实验的结果. 这本书对理解概率推理在感性决策和行动中的作用,提供了一个温和 ...

最新文章

  1. 使用spring aop实现业务层mysql 读写分离
  2. 台积电2nm工艺重大突破!
  3. 46:八进制到十进制
  4. malloc和free——结构体中动态内存的管理
  5. java 特殊符号正则_java利用正则表达式处理特殊字符的方法实例
  6. 八十二、归并排序求取复杂的逆序数
  7. python-55: 验证码的生成机制
  8. oracle函数大全指数运算,Oracle 基础语句 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数......
  9. RStudio 下载R包的几种方法
  10. 利用图像来测量的技术——数字图像相关法(DIC)
  11. 面试必杀技:异步FIFO
  12. MacBook连接显示器发热的解决方法
  13. 4 数据校验和防碰撞
  14. 微服务项目后台技术栈
  15. 医疗器械软件网络安全相关
  16. 哈佛《幸福课》 第2课 为什么要学积极心理学
  17. java+static知乎_用Java抓取知乎日报信息
  18. Computer Organization and Architecture 10th - William Stallings
  19. 雅腾php怎么样_2018年09月26日
  20. 2011-2020年股票的收益率上下波动比率数据集

热门文章

  1. SSO单点登录(Client端集成)
  2. [C/C++]_[初级]_[ 线程pthread学习之互斥锁和条件变量的应用 ]
  3. 【小型游戏开发---街头霸王2(使用js,html等完成)(附全部源代码,你确定不看看? !)能看完的真的太棒了!!!】
  4. 亚马逊新手卖家选品究竟要坚持什么样的原则?
  5. 带领全网朋友,完成粉笔登录加密分析,再次换种玩法
  6. 华为鸿蒙系统试用版3.0,华为鸿蒙系统2.0
  7. POX及组件启动分析
  8. python获取本年度每月第一天,每月最后一天,时间-1天,日期分季度
  9. 不平衡数据集处理办法
  10. 矩阵乘法之叉乘和点乘