基于MATLAB的贝叶斯网络(BNT)工具箱的使用与实例

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

推理举例
• 贝叶斯网络精确推理:计算P(S=2|W=2) 的概率
var_elim_inf_engine为变量消元法, jtree_inf_engine为联合树推理(团树传播法) 见inference1.
• 贝叶斯网络近似推理:计算P(S=2|W=2) 的概率
likelihood_weighting_inf_engine 为重要性抽要推理 见inference2.
0 0.8963 0.9085 0.9990
回顾
手动建立简单的贝叶斯网络---调用的函数有:mk_bnet tabular_CPD jtree_inf_engine 参数学习---完整数据下的最大似然估计、数据缺失下EM算法 简单的样本训练、数据加载及学习
1、MATLAB学习:下载了MATLAB教程课件,边敲代码边记笔记,更加细致地学习了变量及数 组相关内容 2、本周已初步掌握贝叶斯工具箱的使用:能够对离散型数据进行参数学习与推理。
engine = jtree_inf_engine(bnet); evidence = cell(1,4); [engine, loglik] = enter_evidence(engine, evidence); marg = marginal_nodes(engine, [R S W]); marg.T;
接着 ,查找最大似然估计的参数 bnet3 = learn_params(bnet2, samples);
最后,为了查看学习后的参数,我 们可以用下面的方法: CPT3 = cell(1,N); for i=1:N
s=struct(bnet3.CPD{i}); % violate object privacy uhui CPT3{i}=s.CPT;
推理(Inference)
BNT提供了多种多样的不同的推断引擎。 • 联合树算法:jtree_inf_engine • 变量消元算法:var_elim_inf_engine • 全局推理算法: enumerative_inf_engine, gaussian_inf_engine, and
cond_gauss_inf_engine • 快速打分算法:quickscore_inf_engine • 采样算法:likelihood_weighting_inf_engine、gibbs_sampling_inf_engine • 调用方法:所有推理算法的调用都相同:
当然,证据也可以是多维数组。 marg = marginal_nodes(engine, [S R W]); %指定计算S R W 的联合概率 分布,也就是P(S,R,W)。
无证据情况下结果为: ans(:,:,1) =
0.2900 0.0410 0.0210 0.0009 ans(:,:,2) =
推理
参数
参数学习
从完整的数据中进行最大似然参数估计:还是以湿草坪为例:
首先,我们用正向采样创建一些训练数据 。 samples = cell(N, nsamples); for i=1:nsamples
samples(:,i) = sample_bnet(bnet); End data = cell2num(samples);
0 0.3690 0.1890 0.0891
Evidence(R)=2;marg.T; 有证据情况下结果为:
ans(:,:,1) = 0.0820 0.0018
ans(:,:,2) = 0.7380 0.1782
dag=zeros(4,4); dag(1,[2 3])=1; dag(2,4)=1; dag(3,4)=1; draw_graph(dag);
然后, Make a tabula rasa
bnet2 = mk_bnet(dag, node_sizes); seed = 0; rand('state', seed); bnet2.CPD{C} = tabular_CPD(bnet2, C); bnet2.CPD{R} = tabular_CPD(bnet2, R); bnet2.CPD{S} = tabular_CPD(bnet2, S); bnet2.CPD{W} = tabular_CPD(bnet2, W);
tabul等ar_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]);
wk.baidu.com
Draw_graph(dag) 绘制图形
推理(Inference)
贝叶斯网络中有许多不同的算法来作为推断的的工具,在速度、复 杂性、普遍性和精确性上有不同的表现。BNT因此提供了多种多样的不 同的推断引擎。
• 节点数量 • 节点间关系 • 节点大小与类型 • 建立贝叶斯网络
参数 (parameters)
• 条件概率分布CPD • 最简单的是CPT: 条件概率表
图形可视化
• 绘制有向图
推理
• 联合树引擎 (junction tree engine) • 精确推断的根本
• 计算边缘分布 • 计算联合分布
网络结构 (structure)
CPT,conditional probability tables,是作 为多为数组存储的。
神经网络节点
CPT=reshape([1,0.1,0.1···0.99]
注意:子节点,通常是最后一维;
,[根2,2节,2点]);
在MATLAB中,数组索引从1开始,
按照惯例false(假)==1, true(真)==2 例如:节点w
网络结构
bnet=mk_bnet(dag,[2,2,2,2],'name s',{'C',’S',’R',’W'},'discrete', 1:4);
bnet.CPD{C} = tabular_CPD(bnet,C,[0.5 0.5]) ; 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]);
节点数量 节点间关系 节点大小与类型
N=4;%节点为4 父节点 子节点 1→ 2,3 2→ 4
建立贝叶斯网络
3→ 4 Dag=zeros(N,N);
dag(1,[2 3]) = 1;
节点均有两个 取值:F&T
dag(2,4) = 1; dag(3,4)=1;
节点类型: discrete_nodes=1:4;
后面杨海滨同学会做详细介绍。
– evidence = cell(1,N); – evidence{W} = 2;%证据为W=2 – [engine, loglik] = enter_evidence(engine, evidence);% 把证据添
加进引擎
– marg = marginal_nodes(engine, S);%指定计算S的概率分布 – marg.T;%计算 P(S=1|W=2)与 P(S=2|W=2) – marg.T(2);%计算P(S=2|W=2)的边缘概率
学习了节点4的参数:
dispcpt(CPT3{4}) Samples=20,50,100时, 节点4的参数越来越接近真实值
原概率 表
参数学 习
如果有数据,就不需要手动获取样本,只需要 将数据加载即可。
• 加载数据进行参数学习:
– 先将刚刚得到的样本保存为datatest.txt
• 参数学习
– data = load('datatest.txt'); – samples=data'; – bnet2= …… dispcpt(
3、银行个人客户数据的测试工作遇到问题:客户数据中有连续型、离散型两种,目前未能对连 续型数据进行处理。此外离散型数据中有,如日期(1-30号)、月份(1-12号),年龄(最小 18,最大87),通话时长(最短4s,最长3500s)等,如此数据应不能直接用MATLAB测试, 就算可以直接测试,效果肯定也不理想,需要进行数据预处理。
结构学习
结构学习举例:
使用K2算法,对根据wetgrass例子的CPD生成随机数列,进 行结构学习,建立贝叶斯网络图。 见:wetgrassdata.txt ; K2_wetgrassdata文件
– engine = jtree_inf_engine(bnet);%指定引擎 – [engine, loglik] = enter_evidence(engine, evidence);% 添加证据 – marg = marginal_nodes(engine, S);%指定需要计算的节点 – marg.T;显示结果
基于MATLAB的BNT工具箱的 使用与实例
工具箱的安装
• 下载FullBNT.zip文件。解压文件。 • 编辑"FullBNT/BNT/add_BNT_to_path.m"让它包含正确的工作路径。 • BNT_HOME = 'FullBNT的工作路径'; • 打开Matlab。 • 运行BNT需要Matlab版本在V5.2以上。 • 键入"add_BNT_to_path",执行这个命令。添加路径。添加所有的文件夹在
EM –数据缺失情况学习
结果: CPT4{1} =
0.4670 0.5330
CPT4{2} =
0.4616 0.5384 0.9495 0.0505
CPT4{3} = 0.8958 0.1042 0.1937 0.8063
CPT4{4} = (:,:,1) =
1.0000 0.1037 0.0915 0.0010 (:,:,2) =
• 联合树引擎-所有精确推断引擎的根本
– jtree_inf_engine
• 调用方法:
– engine = jtree_inf_engine(bnet);
• 推理计算:
– 回到上面,我们已经建立了一个关于草地湿润的例子。洒水器和 下雨均可能打湿草坪,现在计算洒水器导致草地湿润的概率。
– 题目中,证据为草地湿润即,W=2。
Matlab的路径下。 • 键入"test_BNT",看看运行是否正常,这时可能产生一些数字和一些警告信
息。(你可以忽视它)但是没有错误信息。
基于MATLAB的BNT工具箱的使用与实例
Creating your first Bayes net 创建你的第一个贝叶斯网络
网络结构 (structure)
高斯节点(连续分布)
利用tabular_CPD bnet.广CP义D线{C性}模=型节点
tabul确ar定_C型PD(bnet, C, [0.5 0.5]); bnet.CPD{R} =
tabul多ar层_C次PD(bnet, R, [0.8 0.2 0.2
最后一维
0b.n8e]t).;离CP散D型{S} =
• 参数(parameters)
创建条件概率表 CPT = zeros(2,2,2);
条件概率分布CPD
CPT(1,1,1) = 1.0; CPTTa(b2u,1la,1r )n=od0e.s1;列表节点
• 最简单的是CPT:条件概率表
…… CPNTo(2is,2y-,o2r) n=o0d.e9s9;布尔型
节点大小:
node_sizes=[2,2,2,2];
bnet = mk_bnet(dag, node_sizes, ‘names’, {‘C’,‘S’,‘R’,‘W’}, ‘discrete’, discrete_nodes,)当然,也可以进行简写,将节点大 小和类型与贝叶斯网的建立整合: bnet = mk_bnet(dag,[2,2,2,2], ‘names’, {‘C’,‘S’,‘R’,‘W’}, ‘discrete’, 1:4)
相关文档
最新文档