matlab 贝叶斯网络

2023-10-27

第一次搭建,参考教程https://blog.csdn.net/moodytong/article/details/8122327。

我的matlab是2014a。系统win7旗舰。

下面就开始一步一步来。

一、matlab中添加FULLBNT:

FULLBNT是matlab自带贝叶斯网络工具箱,下载地址:http://www.cs.ubc.ca/~murphyk/Software/BNT/FullBNT-1.0.4.zip。

1、解压FullBNT-1.0.4.zip,将整个目录FullBNT-1.0.4复制到MATLAB的安装目录的TOOLBOX目录下。我的 目录是'D:\Program Files\MATLAB\R2014a\toolbox\';

2、打开Matlab,在MATLAB命令窗口中进入上述目录,输入以下命令:

>> cd ('D:\Program Files\MATLAB\R2014a\toolbox\FullBNT-1.0.4') %添加括号是为了防止出现参数过多的错误。

3、TOOLBOX下的BNT工具箱加到MATLAB路径中,代码如下

>> addpath(genpathKPM(pwd))
警告: 函数 assert 与某个 MATLAB 内置函数同名。建议您重命名该函数以避免潜在的名称冲突。 
> In path at 109
  In addpath at 86 
警告: 函数 isscalar 与某个 MATLAB 内置函数同名。建议您重命名该函数以避免潜在的名称冲突。 
> In path at 109
  In addpath at 86 
警告: 函数 isvector 与某个 MATLAB 内置函数同名。建议您重命名该函数以避免潜在的名称冲突。 
> In path at 109
  In addpath at 86 

也可采用如下指令:

>> addpath(genpath('D:\Program Files\MATLAB\R2014a\toolbox\FullBNT-1.0.4'))

4、永久保存上面的路径,以免下次重启MATLAB时重新添加,命令:

>>savepath

5、检验是否成功,命令行窗口输入:

>> which test_BNT.m
D:\Program Files\MATLAB\R2014a\toolbox\FullBNT-1.0.4\BNT\test_BNT.m
>> 

显示正确,成功添加工具箱。

二、构建贝叶斯网络

如图为贝叶斯网络的GAD和CPT


N=8;%8个节点,也就是8个特征
A=1;%visit to Asia到过亚洲
S=2;%somking抽烟
T=3;%tuberculosis肺结核
L=4;%lung cancer肺癌
B=5;%bronchitis支气管炎
E=6;%either tub. or lung cancer肺结核或者肺癌
X=7;%positive X-rayX光片呈阳性
D=8;%dyspnoea呼吸困难
%定义网络结构
dag=zeros(N,N);
dag(A,T)=1;
dag(S,[L,B])=1;
dag([T,L],E)=1;
dag(B,D)=1;
dag(E,[X,D])=1;
discrete_nodes=1:N;%从1取到N,也就是1-8
node_sizes=2*ones(1,N);%定义节点状态,元素值为2的1*N行向量,
bnet=mk_bnet(dag,node_sizes,'names',{'A','S','T','L','B','E','X','D'},'discrete',discrete_nodes);
%设置各个节点的边缘概率,对于A和S,定义顺序是False True;
%对于T、L和B这类,顺序是FF  FT TF TT;
%对于D这类,顺序是FFF FFT FTF FTT TFF TFT TTF TTT
bnet.CPD{A}=tabular_CPD(bnet,A,[0.99,0.01]);
bnet.CPD{S}=tabular_CPD(bnet,S,[0.5,0.5]);  
bnet.CPD{T}=tabular_CPD(bnet,T,[0.99,0.95,0.01,0.05]);  
bnet.CPD{L}=tabular_CPD(bnet,L,[0.99,0.9,0.01,0.1]);  
bnet.CPD{B}=tabular_CPD(bnet,B,[0.7,0.4,0.3,0.6]);  
bnet.CPD{E}=tabular_CPD(bnet,E,[1,0,0,0,0,1,1,1]);  
bnet.CPD{X}=tabular_CPD(bnet,X,[0.95,0.02,0.05,0.98]);  
bnet.CPD{D}=tabular_CPD(bnet,D,[0.9,0.2,0.3,0.1,0.1,0.8,0.7,0.9]); 
draw_graph(dag);%画出网络

上述代码运行结果如下图:


至此,一个简单的贝叶斯网络就构建完毕。

三、对贝叶斯网络进行推断

使用联合树推断引擎,

%网络推断,使用联合树引擎,计算P(T=True|A=False,S=True,X=True,D=False)的概率  
engine=jtree_inf_engine(bnet);
evidence=cell(1,N);%1*N的空cell类型向量,元素可以是任意类型数据
evidence{A}=1;  
evidence{S}=2;  
evidence{X}=2;  
evidence{D}=1; 
[engine,loglik]=enter_evidence(engine,evidence);
m=marginal_nodes(engine,T);

运行上述代码,在命令行窗口输入下边代码:

>> m.T

返回

ans =
    0.9566

    0.0434

由此可见,T为TRUE的概率比较大。

至此贝叶斯网络简单搭建和推理就完成啦~~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab 贝叶斯网络 的相关文章

随机推荐

  • sqlite3查看数据库中有哪些表(代码)

    说实话 用代码实现sqlite3查看数据库中有哪些表我还真的没找到现成资源 网上提供的语句还真用不了 而且大多都是命令行语句 由于的做的MFC项目要用到这个功能 特意学习了下 下面分享我的成果 希望可以帮到你 环境 VS2005 inclu
  • FPGA中值滤波实现并Modelsim仿真,与MATLAB中值滤波进行对比

    文章目录 一 中值滤波算法 二 FPGA实现中值滤波 2 1 3 3窗口的生成 2 2 排序模块 2 3中值滤波模块 2 4 整体RTL图 三 modeslim仿真 四 matlab中值滤波 五 效果对比 一 中值滤波算法 1 中值滤波算法
  • 解决wangEditor表格边框显示不出来、没有的问题

    仔细阅读文档 不过我一直找表格或者边框搜索 发现没有特定的栏目 所以忽略了 当然也有我不够仔细的原因 有点着急莽荒了 链接 在官网的这个页面 从官网贴下来的 把这段复制到想要的地方就可以了
  • 自定义表单控件 [(ngModel)]

    ngModel 拆分 ngModel 将 输入 输出组合起来 进行双向数据绑定 拆分开来 输入属性 ngModel ngModelChange 输出监听元素值的变化 并同步view value与model value
  • 头都给我找烂

    mysql5 6下载 https dev mysql com downloads file id 487425 win10添加本地用户和组 https blog csdn net qq 40151857 article details 89
  • 【Linux命令集】top命令的用法详解

    在使用linux系统中 我们最长用的查看系统性能的方式就是使用命令top 通知我们只关心总体的cpu和内存的使用情况 对其他的参数基本无视 也看不懂 下面来介绍一下top的详细参数的意义 top视图 进入top的基本视图 我们来结合这个视图
  • 电容选型及计算

    一 电容容值计算 1 电容整流波形分析 经过整流后三相电压整流为六脉波电压 电压波形如下图 上图中各时期充电过程如下 在t0 t3阶段是一个T 6周期 一个完整波头阶段 在t0 t1阶段 电容放电 给负载提供能量 此时输入电压小于电容电压
  • openEuler实验之A-Tune智能调优

    1 A Tune介绍 A Tune是一款基于AI开发的系统性能优化引擎 它利用人工智能技术 对业务场景建立精准的系统画像 感知并推理出业务特征 进而做出智能决策 匹配并推荐最佳的系统参数配置组合 使业务处于最佳运行状态 1 1 A Tune
  • redis docker安装、进入命令行后启动服务

    下载redis镜像 首先查看一下redis是否正确 docker search redis 显示 NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is an open source
  • 一文读懂工厂MES系统的详细功能介绍

    一 工单管理 MES通过工单来管理生产执行 工单状态有 创建 下达 执行 完成 取消 计划员创建工单 审核通过后释放到设备或产线 仓库可收到工单下达的通知 及时备料 产线只能看到已下达的工单 执行工单 完成后登记报工 将相关信息反馈回ERP
  • 网络编程——实现HTTP服务器端

    参考 TCP IP网络编程 尹圣雨 Web服务器端 概述 Web服务器端是 基于HTTP Hypertext Transfer Protocol 协议 将网页对应文件传输给客户端的服务器端 Hypertext 超文本 是可以根据客户端请求而
  • redis-----08-----redigo管道以及事务-管道

    1 Redis 管道 正常的情况下 redis是请求响应模式 一条请求后那么正常就会返回一个响应 例如上图 但是只存在这种情况是无法满足我们开发的需求的 所以redis给我们提供了管道 redis的管道 pipeline 相关特点 1 re
  • 概念数据模型(E-R模型)

    概念数据模型 E R模型 概念数据模型是现实世界第一层次的抽象 是数据库设计人员和用户交流的工具 因此要求概念数据模型一方面应该具有较强的语义表达能力 能够方便 直接地表达应用中的各种语义知识 另一方面应该简单 直观和清晰 能为不具备专业知
  • python前端学习-----Flask进阶

    Flask进阶 Flask请求 Request请求对象 request args get 获取表单提交的信息 请求钩子 Flask响应 json 数据格式 Cookie 和 Session Cookie 对象 Session对象 设置密钥的
  • VMware centos7 Destination Host Unreachable

    现象 不管是ping网关还是外网都出现了 root rocketmqOS ping 192 168 23 2 PING 192 168 23 2 192 168 23 2 56 84 bytes of data From 192 168 2
  • jsp文件上传图片到服务器

    jsp文件上传图片到服务器 首先利用onchange去调用uploadBookImg函数 将图片上传到服务器 返回一个地址 将地址写入到一个隐藏域里面 提交表单的时候就可以将服务器返回的地址存入到数据库里面
  • 解决Django和Flask的跨域问题

    目录 2 1 概念 什么是同源 2 2 概念 什么是跨域请求 2 3 概念 浏览器的 同源策略 2 3 1 发生了跨域请求 浏览器在遵循 同源策略 下 处理流程如下 2 3 2 没有发生跨域请求的情况下浏览器会直接发送请求 如下图 3 解决
  • 使用obsidian的模板插件templater来自动化分类笔记记录

    在记笔记的过程中 不难发现为了笔记不那么凌乱 不得不去分类笔记以及为笔记打上元数据 这些步骤基本都是机械重复的 往往有时候只是想快速将内容记录下来 但是等到分类完 元数据写完 已经快要遗忘原本需要记录的内容 即使将这些步骤挪至最后完成 也显
  • TDengine安装使用

    引言 近期 听说了时序数据库TDengine 本人的好奇心又出来了 同是时序数据库的InfluxDB不也挺好的嘛 通过一些网上的资料以及些简单的实际操作 本人得出的结论是 数据量少时 InfluxDB的性能好些 当数据量越来越大之后 TDe
  • matlab 贝叶斯网络

    第一次搭建 参考教程https blog csdn net moodytong article details 8122327 我的matlab是2014a 系统win7旗舰 下面就开始一步一步来 一 matlab中添加FULLBNT FU