本文主要参考:

贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)

贝叶斯网络工具箱(FullBNT-1.0.4)使用说明(一).md

贝叶斯网络结构学习方法简介

贝叶斯网络结构学习若干问题解释

贝叶斯网络结构学习(基于BDAGL工具箱的MATLAB实现)

以及自己对该工具箱的一点认识。通过借助该工具箱中的一个测试函数 k2demo1.m 了解整个贝叶斯网络工具箱的使用。

工具箱的下载地址:MATLAB贝叶斯网络工具箱FullBNT-1.0.7

1.给定一个贝叶斯网络结构

N = 4;%节点个数,即参数的个数
dag = zeros(N,N);
C = 1; S = 2; R = 3; W = 4;
dag(C,[R S]) = 1;
dag(R,W) = 1;
dag(S,W)=1;

2.给定该贝叶斯网的条件概率表(即参数)

ns = 2*ones(1,N); %每个节点都只有两个取值,即一个父节点最多有两个子节点false = 1;
true = 2;bnet = mk_bnet(dag, ns);%构造贝叶斯网络
%如果我们不指定CPT,那么算法会构造随机参数,每一列CPT会从均匀分布中提取。
bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);%已知CPD,构造CPT
bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);

3.根据定义的贝叶斯网来生成随机采样的数据集

seed = 0;
rand('state', seed);%state 0 指的是以后产生的随机数都与第一次运行产生的相同,用于保证实验的可重复性
randn('state', seed);
ncases = 100;%数据的个数为100个
data = zeros(N, ncases);
for m=1:ncasesdata(:,m) = cell2num(sample_bnet(bnet));%sample_bnet:从生成好的贝叶斯网络中随机采样一个数据
end

4.分别利用两种评分函数(贝叶斯评分、BIC评分)学习网络结构

order = [C S R W];
max_fan_in = 2;%将数据集前50个每5个分成一小份,%第1次使用数据集前5个,第2次使用数据集前10个,第3次使用数据集前15个...%每次将学得的网络结构与真实的网络结构作对比。
sz = 5:5:50;
for i=1:length(sz)dag2 = learn_struct_K2(data(:,1:sz(i)), ns, order, 'max_fan_in', max_fan_in);%默认使用贝叶斯评分函数correct(i) = isequal(dag, dag2);
end
correctfor i=1:length(sz)dag3 = learn_struct_K2(data(:,1:sz(i)), ns, order, 'max_fan_in', max_fan_in, 'scoring_fn', 'bic', 'params', []);%使用BIC评分函数correct(i) = isequal(dag, dag3);
end
correct

通过结果可以发现,当数据集大于30时即可基本学习到正确的贝叶斯网络结构。

correct =0     0     0     0     0     1     1     1     1     1correct =0     0     0     0     0     1     0     1     1     1

5.完整代码

%% 给定一个贝叶斯网络结构
N = 4;%节点个数,即参数的个数
dag = zeros(N,N);
C = 1; S = 2; R = 3; W = 4;
%C = 4; S = 2; R = 3; W = 1; %任意顺序
dag(C,[R S]) = 1;
dag(R,W) = 1;
dag(S,W)=1;%% 给定该贝叶斯网的条件概率表(即,参数)
false = 1;
true = 2;
ns = 2*ones(1,N); %每个节点都只有两个取值,即一个父节点最多有两个子节点bnet = mk_bnet(dag, ns);%构造BN
%如果我们不指定CPT,那么算法会构造随机参数,每一列CPT会从均匀分布中提取。
bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);%已知CPD,构造CPT
bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);%% 根据定义的贝叶斯网来生成随机采样的数据集
seed = 0;
rand('state', seed);%state 0 指的是以后产生的随机数都与第一次运行产生的相同,用于保证实验的可重复性
randn('state', seed);
ncases = 100;%数据的个数为100个
data = zeros(N, ncases);
for m=1:ncasesdata(:,m) = cell2num(sample_bnet(bnet));%sample_bnet:从BN中随机采样一个数据
end%% 分别采用了两种评分函数(贝叶斯评分、BIC评分)根据数据集使用K2算法学习网络结构,并比较网络结构与真实结构的差异。
order = [C S R W];
max_fan_in = 2;%dag2 = learn_struct_K2(data, ns, order, 'max_fan_in', max_fan_in, 'verbose', 'yes');%将数据集前50个每5个分成一小份,%第1次使用数据集前5个,第2次使用数据集前10个,第3次使用数据集前15个...%每次将学得的网络结构与真实的网络结构作对比。
sz = 5:5:50;
for i=1:length(sz)dag2 = learn_struct_K2(data(:,1:sz(i)), ns, order, 'max_fan_in', max_fan_in);%max_fan_in:每个节点允许的最大父节点数量correct(i) = isequal(dag, dag2);
end
correctfor i=1:length(sz)dag3 = learn_struct_K2(data(:,1:sz(i)), ns, order, 'max_fan_in', max_fan_in, 'scoring_fn', 'bic', 'params', []);correct(i) = isequal(dag, dag3);
end
correct

另外,关于如何使用该工具箱进行结构学习,请移步:

【Matlab】贝叶斯网络理论之结构学习理论介绍及其工具箱安装

【Matlab】利用贝叶斯网络工具箱中的K2算法进行结构学习

【Matlab】贝叶斯网络工具箱简介相关推荐

  1. 安装matlab贝叶斯网络工具箱

    安装matlab贝叶斯网络工具箱 下载工具箱 安装工具箱 安装matlab贝叶斯网络工具箱 1. 下载工具箱 下载链接: 官方下载:http://www.cs.ubc.ca/~murphyk/Soft ...

  2. 【Matlab】利用贝叶斯网络工具箱中的K2算法进行结构学习

    下面首先介绍一个结构学习方法,接着利用Matlab中的贝叶斯网络工具箱的K2算法学习该贝叶斯网络的结构.有关贝叶斯网络工具箱的使用,请看[Matlab]贝叶斯网络工具箱简介. 问题:服务器数据传送 现 ...

  3. matlab 贝叶斯网络

    第一次搭建,参考教程https://blog.csdn.net/moodytong/article/details/8122327. 我的matlab是2014a.系统win7旗舰. 下面就开始一步一 ...

  4. matlab贝叶斯优化工具箱_经济学人的神器——BEAR(贝叶斯估计、分析和回归工具包)...

    武林至尊,宝刀屠龙, 号令天下,莫敢不从, 倚天不出,谁与争锋. --金庸·<倚天屠龙记> Bayesian Estimation, Analysis and Regression(简写为 ...

  5. matlab2016a贝叶斯工具箱,matlab贝叶斯工具箱

    matlab贝叶斯工具箱是由Kevin Murphy开发的编程学习工具,该工具采用MATLAB语言编制,可实现贝叶斯网络结构学习.参数学习.推理和构建贝叶斯分类器,此工具箱在贝叶斯学习编程方面非常灵活 ...

  6. matlab设l创建网络,利用matlab进行简单的贝叶斯网络构建 | 学步园

    matlab的安装 第一次装matlab,装好后发现没有在桌面生成图标,还以为是最后提示的编译器没有安装.结果发现,matlab的图标在其安装的bin目录下面,进行初始化就能开始使用了 关于贝叶斯网络 ...

  7. matlab bnt(贝叶斯网络)实例

    #matlab bnt下的贝叶斯网络实例 #贝叶斯网络实例#详细教程 1.向matlab中添加FULLBNT 参照链接:https://blog.csdn.net/moodytong/article/ ...

  8. matlab中nsamples 10,贝叶斯网络-使用matlab工具集

    提纲: 最近工作: B-COURSE工具学习 BNT研究与学习 BNT相关实验及结果 手动建立贝叶斯网及简单推理 参数学习 结构学习 下一步工作安排 最近工作: 1. B-COURSE 工具学习 B- ...

  9. 基于MapReduce的贝叶斯网络算法研究参考文献

    原文链接(系列):http://blog.csdn.net/XuanZuoNuo/article/details/10472219 论文: 加速贝叶斯网络:Accelerating Bayesian ...

  10. 贝叶斯网络算法java,java贝叶斯网络算法.doc

    java贝叶斯网络算法.doc 贝叶斯网络提纲:最近工作:B-COURSE工具学习BNT研究与学习BNT相关实验及结果手动建立贝叶斯网及简单推理参数学习结构学习下一步工作安排最近工作:1.B-COUR ...

最新文章

  1. PHPMaker 2020中文版
  2. 接口java_JAVA 初识接口
  3. UCOSIII移植问题说明
  4. Xilinx zynq-7000 SOC 设计导论
  5. java加快内存回收_java内存管理之垃圾回收及JVM调优
  6. [luogu3676]小清新数据结构题
  7. 解决eclipse中jsp没有代码提示问题
  8. 543. 二叉树的直径 golang
  9. 社会生活、工作中的著名法则
  10. Spring Cloud Alibaba迁移指南(三):极简的 Config
  11. 利用可视化软件navicat查看表的sql语句
  12. Shutter - 带有众多功能的屏幕截图工具
  13. Android Studio的TableLayout的使用(自定义列拉伸,收缩,隐藏,横跨列)
  14. iOS底层探索之dyld(上):动态链接器流程分析
  15. 阿里巴巴Java开发文档2020版学习-OOP 规约
  16. Dbf文件转Excel
  17. 直播系统源码,教您如何搭建直播系统平台
  18. 王阳明让你内心强大的100句名言
  19. iPhone真机测试Crash信息分析
  20. OPPO VIVO 三星 小米破网络锁,改全网通与案例分析

热门文章

  1. JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@xxx] will not be managed by Spring
  2. 【二】HTML:图像标签和超链接标签
  3. 好文推荐(十六)——Git使用详细教程
  4. 自助装机配置专家点评2
  5. QT报错: ‘C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe‘ failed
  6. python360_Python实现360账号登录
  7. 政务内网、政务外网、政务专网
  8. Linux常用命令:系统信息、关机重启、文件和目录操作、文件搜索、文件权限、挂载、磁盘空间、用户及群组、解压缩、备份等操作。
  9. 前端js常用剪贴板(复制粘贴)操作和应用,以及navigator.clipboard新粘贴板API使用
  10. android多悬浮窗口播放器,Android实现悬浮播放器