贝叶斯网络matlab

上传人:小** 文档编号:55663139 上传时间:2018-10-03 格式:DOC 页数:12 大小:80.95KB
返回 下载 相关 举报
贝叶斯网络matlab_第1页
第1页 / 共12页
贝叶斯网络matlab_第2页
第2页 / 共12页
贝叶斯网络matlab_第3页
第3页 / 共12页
贝叶斯网络matlab_第4页
第4页 / 共12页
贝叶斯网络matlab_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《贝叶斯网络matlab》由会员分享,可在线阅读,更多相关《贝叶斯网络matlab(12页珍藏版)》请在金锄头文库上搜索。

1、Matlab 贝叶斯网络建模贝叶斯网络建模1 1 FullBNTFullBNT 简介简介基于 Matlab 的贝叶斯网络工具箱 BNT 是 kevin p.murphy 基于 matlab 语言开发的关于贝叶斯网络学习的开源软件包,提供了许多 贝叶斯网络学习的底层基础函数库,支持多种类型的节点(概率分 布) 、精确推理和近似推理、参数学习及结构学习、静态模型和动态 模型。1.1 贝叶斯网络表示贝叶斯网络表示BNT 中使用矩阵方式表示贝叶斯网络,即若节点 i 到 j 有一条弧, 则对应矩阵中值为 1,否则为 0。(,)1.2 结构学习算法函数结构学习算法函数BNT 中提供了较为丰富的结构学习函数

2、,都有: 1. 学习树扩展贝叶斯网络结构的算法._()2. 数据完整条件下学习一般贝叶斯网络结构学习算法 表 1-1 数据完整条件下贝叶斯结构算法算法名称调用函数K2 算法learn_struct_k2() 贪婪搜索 GS(greedy search)算法earn_struct_gs() 爬山 HC(hill climbing)算法learn_struct_hc()3. 缺失数据条件下学习一般贝叶斯网络结构学习算法 表 1-2 缺失数据条件下贝叶斯结构算法算法名称调用函数最大期望 EM(expectation maximization)算法learn_struct_EM() MCMC(Mark

3、ov Chain Monte Carlo)learn_struct_mcmc()1.3 参数学习算法函数参数学习算法函数1. BNT 中也提供了丰富的参数学习函数,都有: 2. 完整数据时,学习参数的方法主要有两种:最大似然估计learn_params()和贝叶斯方法bayes_update_params(); 3. 数据缺失时,如果已知网络拓扑结构,用 EM 算法来计算参数, learn_params_em ()。1.4 推理机制及推理引擎推理机制及推理引擎为了提高运算速度,使各种推理算法能够有效应用,BNT 工具 箱采用了引擎机制,不同的引擎根据不同的算法来完成模型转换、 细化和求解。这个

4、推理过程如下: BNT 中提供了多种推理引擎,都有: 表 1-3 BNT 推理引擎算法名称调用函数联合树推理引擎jtree_inf_engine() 全局联合树推理引擎global_joint_inf_engine() 信念传播推理引擎belprop_inf_engine() 变量消元推理引擎var_elim_inf_engine() 采样传播引擎gibbs_sampling_inf_engine2 2 参数学习参数学习在 BNT 中,参数评估程序可以分为 4 类。分类依据是否目标是 通过参数或仅仅一个点的估计来计算贝叶斯全部的后验概率,是否 全部的节点是可观察的或者存在数据/隐含变量(局部可

5、观察) 。Full obsPartial obsPointlearn_paramslearn_params_emBayesBayes_update_paramsnot yet supported2.1 节点类型节点类型Noisy-or 节点节点 一个 Noisy-or 节点就像通常的“或”门一样,但有时父节点的 效果将被抑制。受抑制的父节点 i 的概率用来表示。一个节P(i)点 C,有两个父节点 A 和 B,有如下 CPD,使用 F 和 T 来表达关和开, (在 BNT 中是 1 和 2) 。ABP(C=off)P(C=on) FF1.00.0 TFqA)1-q(A) FTq(B)1-q(B)

6、TTq(A)q(B)1-q(A)q(B)Softmax 节点节点 神经网络节点神经网络节点 使用一个多层感知器实现了从连续父节点向离散子节 点的映射。 高斯节点高斯节点 将连续值的节点处理成一个离散的情况 广义线性模型节点广义线性模型节点 分类分类/回归树节点回归树节点2.2 最大似然参数估计最大似然参数估计bnet3 = learn_params(bnet2, samples);2.3 先验参数分布先验参数分布tabular_CPD(bnet, i, prior_type, dirichlet, dirichlet_type, unif);B=1B=2B=3A=1111A=2111tabul

7、ar_CPD(bnet, i, prior_type, dirichlet, dirichlet_type, BDeu);B=1B=2B=3A=11/61/61/6A=21/61/61/6 我们将 N/(q*r) 放入每个格;N 是等效的样本大小,r=|A|, q = |B|. 这可以按如上面方式创建:tabular_CPD(bnet, i, prior_type, dirichlet, dirichlet_type, .BDeu, dirichlet_weight, 10); 这里 1 是等效样本大小,也是先验概率的强度。你可以使用上 面面方式更改它,3 3 结构学习结构学习问题:以下两模型

8、结构评分是否相等?表 3-1 算法概要贝叶斯模型选择算法1.建立模型 A-B,生成样本数据 2.建立所有可能的结构: (1)A B, (2)BB 并计算先验概率 3.模型 2 和模型 3 为 Markov equivalent 4.B 节点使用 noisy Not gate 5.正确的模型在 12 次后收敛代码示例% 贝叶斯选择模型示例.% 建立模型A-B,生成样本数据% 建立所有可能的结构: (1)A B, (2)BB 并计算先验概率% 模型2和模型3为Markov equivalent% B节点使用noisy Not gate% 正确的模型在12次后收敛% ground truthN =

9、2;dag = zeros(N);A = 1; B = 2; dag(A,B) = 1;ntrials = 25;ns = 2*ones(1,N);true_bnet = mk_bnet(dag, ns);true_bnet.CPD1 = tabular_CPD(true_bnet, 1, 0.5 0.5);pfail = 0.1;psucc = 1-pfail;true_bnet.CPD2 = tabular_CPD(true_bnet, 2, pfail psucc; psucc pfail); % NOT gateG = mk_all_dags(N);nhyp = length(G);A

10、BABhyp_bnet = cell(1, nhyp);for h=1:nhyphyp_bneth = mk_bnet(Gh, ns);for i=1:Nfam = family(Gh, i);hyp_bneth.CPDi= tabular_CPD(hyp_bneth, i, prior_type, dirichlet, .CPT, unif);endend% 结构先验,假设为均匀分布 prior = normalise(ones(1, nhyp);% 保存结果并初始化训练结构init_hyp_bnet = hyp_bnet; init_prior = prior; rand(state, 0

11、);hyp_w = zeros(ntrials+1, nhyp);hyp_w(1,:) = prior(:); data = zeros(N, ntrials);% 逐步计算后验概率 LL = zeros(1, nhyp);ll = zeros(1, nhyp);for t=1:ntrialsev = cell2num(sample_bnet(true_bnet);data(:,t) = ev;for i=1:nhypll(i) = log_marg_lik_complete(hyp_bneti, ev);hyp_bneti = bayes_update_params(hyp_bneti, e

12、v);endprior = normalise(prior .* exp(ll);LL = LL + ll;hyp_w(t+1,:) = prior;end% Plot,模型后验概率% Red = model 1 (no arcs), blue/green = models 2/3 (1 arc)% Blue = model 2 (2-1)% Green = model 3 (1-2, “ground truth“)if 1figure;m = size(hyp_w, 1);h=plot(1:m, hyp_w(:,1), r-, 1:m, hyp_w(:,2), b-., 1:m, hyp_w

13、(:,3), g:);axis(0 m 0 1)title(model posterior vs. time)drawnowend% 检验结果hyp_bnet2 = init_hyp_bnet;prior2 = init_prior;图 3-1 贝叶斯模型选择后验概率对比 BNT 中的结构学习程序可以按类似参数学习的情况分成四类:Full obsPartial obsPointlearn_struct_K2not yet supportedBayeslearn_struct_mcmcnot yet supported3.1 Markov 等效等效如果两个 DAGs 编码同样的条件独立,它们被叫

14、做 Markov 等 效。所有 DAGs 的集合可以被分割成 Markov 等效类。同一类内的 线图可以有方向,它们弧的颠倒不会改变任何 CI 关系。每一类都可 以用一个 PDAG(partially directed acyclic graph,局部有向非循环图) 这种图被称为本质图或方向图。这个详细说明哪个边必须在某一个 方位上被定向,哪个可能被颠倒。3.2 穷举搜索穷举搜索结构学习的强有力手段是列举 DAGs 的所有可能性,并对它们 一一打分。这为其它算法的比较提供了一个“黄金标准” 。我们按如 下做:dags = mk_all_dags(N);score = score_dags(da

15、ta, ns, dags); 默认的情况下,我们使用贝叶斯打分规则,并假定 CPDs 是用 带有 BDeu 的先验表表示的。如果想是用一致的先验值,我们可以 通过如下方法覆盖这些默认值。 params = cell(1,N); for i=1:N paramsi = prior, unif; end score = score_dags(data, ns, dags, params, params, scoring_fn, bic); 实际上不能列举 N5 的所有可能的 DAGs。3.3 K2 算法算法K2 算法(Cooper and Herskovits, 1992)是一种按如下方式工作的贪

16、 婪搜索算法。每一个起始点没有父节点。然后增加结果结构打分最 高时的父节点。当单独添加父节点再不能提高分数时,停止添加父 节点。当我们使用固定的顺序时,我们不需要做循环检查,也不需 要为每个节点单独选择父节点。 BNT 推广了这点允许使用任何种类的 CPD,无论贝叶斯打分规 则还是 BIC,另外,你可以对每一个节点指定一个任意的父节点数量 的上限。order = C S R W;max_fan_in = 2;dag2 = learn_struct_K2(data, ns, order, max_fan_in, max_fan_in);3.3 爬山法爬山法爬山算法从状态空间中的一个指定点开始,考虑所有最接近的邻 节点,然后移向得分最高的相邻节点。当相邻节点得分没

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号