JAVA贝叶斯网络算法_第1页
JAVA贝叶斯网络算法_第2页
JAVA贝叶斯网络算法_第3页
JAVA贝叶斯网络算法_第4页
JAVA贝叶斯网络算法_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、贝叶斯网络提纲:最近工作:B-COURSE工具学习BNT研究与学习BNT相关实验及结果手动建立贝叶斯网及简单推理参数学习结构学习下一步工作安排最近工作:1. B-COURSE工具学习B-COURS是 一个供教育者和研究者免费使用的 web贝叶斯网络工 具。主要分为依赖关系建模和分类器模型设计。 输入自己的研究数据, 就可以利用该工具在线建立模型,并依据建立好的模型进行简单推 理。B-COURS要求数据格式是ASCII txt格式的离散数据,其中第一 行是各种数据属性变量,其余各行则是采集的样本,属性变量值可以 是字符串也可以是数据,属性变量之间用制表符分割,缺失属性变量 值用空格代替。读入数据

2、后,在进行结构学习前,可以手动的选择需要考虑的数据属性!生成过程中,可以手动确定模型,确定好模型后,可以选择JAVA playgroud,看到一个java applet 程序,可以手动 输入相应证据,从而进行简单推理。B-COURS的详细使用介绍,可详见urlhttp:/b-course.cs.hels in ki.fi/obc/url。B-COURS工具隐藏了数据处理,算法实现等技术难点,所以对初 学者来说,容易上手。但是却不能够针对不同的应用进行自主编程, 缺乏灵活性。2. 贝叶斯网工具箱BNT勺研究与学习基于matlab的贝叶斯网络工具箱 BNT是 kevin p.murphy 基于ma

3、tlab语言开发的关于贝叶斯网络学习的开源软件包,提供了许多 贝叶斯网络学习的底层基础函数库,支持多种类型的节点(概率分 布)、精确推理和近似推理、参数学习及结构学习、静态模型和动态 模型。贝叶斯网络表示:BNT中使用矩阵方式表示贝叶斯网络,即若节 点i至叮有一条弧,则对应矩阵中(i , j )值为1,否则为0。结构学习算法函数:BNT中提供了较为丰富的结构学习函数,都有:1. 学习树扩展贝叶斯网络结构的 TANC算法learn_struct_tan().2. 数据完整条件下学习一般贝叶斯网络结构的K2算法learn_struct_k2()、贪婪搜索 GS (greedy search )算法

4、Iearn_struct_gs() 和爬山 HC( hill climbing )算法 learn _struct_hc()等。3. 缺失数据条件下学习一般贝叶斯网络结构的最大期望EM(expectation maximization )算法 learn_struct_EM ()和马尔科夫链蒙特卡罗 MCMCMarkov Cha in Monte Carlo ) learn_struct_mcmc()参数学习算法函数:BNT中也提供了丰富的参数学习函数,都有:1. 完整数据时,学习参数的方法主要有两种:最大似然估计learn_params()禾口贝叶斯方法 bayes_update_param

5、s();2. 数据缺失时,如果已知网络拓扑结构,用EM算法来计算参数,倘若未知网络拓扑结构,使用结构最大期望SEM( structure EM )算法learn_struct_SEM()。推理机制及推理引擎:为了提高运算速度,使各种推理算法能够有效 应用,BNT工具箱采用了引擎机制,不同的引擎根据不同的算法来完 成模型转换、细化和求解。这个推理过程如下:BNT中提供了多种推理引擎,都有:1. 联合树推理引擎jtree_inf_engine();2. 全局联合树推理引擎 global_joint_inf_engine();3. 信念传播推理引擎 belprop_inf_engine();4. 变

6、量消元推理引擎var_elim_inf_engine().3. 使用BNT做的相关实验及结果u手动建立贝叶斯网模型及简单推理实验:1.“草地潮湿原因模型”建立及推理:(全是离散变量)%建立贝叶斯网络结构并制定条件概率表N = 4; % 四个节点 分别是 cloudy,spr in kier ,rai n , wetgrassdag = zeros(N,N);C = 1; S = 2; R = 3; W = 4;dag(C,R S) = 1; % 节点之间的连接关系dag(R,W) = 1;dag(S,W) = 1;discrete_nodes = 1:N; %离散节点n ode_sizes =

7、 2*o nes(1,N);% 节点状态数bnet=mk_bnet(dag,node_sizes, names , cloudy , sprinkler , rain,wetgrass , discrete,discrete_ no des);bn et.CPDC = tabular_CPD(b net,C,0.5 0.5);bn et.CPDR = tabular_CPD(b net,R,0.8 0.2 0.2 0.8);bn et.CPDS = tabular_CPD(b net,S,0.5 0.9 0.5 0.1);bn et.CPDW = tabular_CPD(b net,W,1 0

8、.1 0.1 0.01 0 0.9 0.90.99);%画出建立好的贝叶斯网络figuredraw_graph(dag)%选择jtree_inf_engine推理引擎。engine = jtree_i nf_en gi ne(b net);%输入证据evide nee = cell(1,N);evide nceR = 2;engin e, loglike = en ter_evide nce(e ngine, evide nee);%计算单个节点后验概率,即进行推理margl = margi nal_no des(e ngin e,S);margl.T%计算对节点联合后验概率marg2 = m

9、argi nal_no des(e ngin e,S R W);marg2.T%合出“软证据”,即节点的可能分布概率情况下的推理evide nceR=;soft_evide nceR二0.6 0.4;engin e, loglike=en ter_evide nce(e ngin e,evide nee,soft ,soft_evide nee);marg3 = marginal。des(e ngin e,S);marg3.T实验结果:1.贝叶斯网络2.单个节点后验概率2.3. 多个节点后验概率4. soft_evide nee情况下的后验概率焚化炉厂废物排放模型建立及推理:(包含离散变量和连

10、续变量)这个实验与第一个实验不同的地方就是它所建立的贝叶斯网中的节点变量包含连续变量,在建立条件概率概率表时会有所不同,离散变量使用CPD勾造器tabular_CPD,连续变量使用gaussian_CPB这里指给出这一部分的代码:bn et.CPDB = tabular_CPD(b net,B,CPT ,0.85 0.15);bn et.CPDF = tabular_CPD(b net,F,CPT ,0.95 0.05);bn et.CPDW = tabular_CPD(b net,W,CPT ,2/7 5/7);bn et.CPDE = gaussian_CPD(b net,E,mean,卜

11、3.9 -0.4 -3.2-0.5, cov ,0.00002 0.0001 0.00002 0.0001);bnet.CPDD = gaussian_CPD(bnet,D, mean ,6.5 6.0 7.57.0, cov ,0.03 0.04 0.1 0.1, weights ,1 1 1 1);bnet.CPDC = gaussian_CPD(bnet,C, mean,-2 -1, cov ,0.10.3);bn et.CPDL=gaussian_CPD(bnet,L, mean ,3, cov ,0.25, weights ,-0.5);bnet.CPDMin = gaussian_

12、CPD(bnet, Min,mean ,0.5-0.5, cov ,0.01 0.005);bnet.CPDMou二gaussian_CPD(bnet,Mout, mean ,0, cov ,0.002, weights ,1 1);贝叶斯网建立好后,推理部分和实验一相似,这里就不再讨论。实验结果建立的贝叶斯网如下:参数学习实验:这里使用的例子依然是“草地潮湿原因模型”。首先我先如上面 实验那样建立好贝叶斯网bnet,并手动构造条件概率表CPT然后使 用BNT里的函数sample_bnet(bnet)来产生nsamples个数据样本, nsamples分别取值20, 200, 2000。然后,

13、再重新建立一个不知道条 件概率表的贝叶斯网bnet2 (结构和bnet相同),并把得到的样本 作为训练集代入learn_params()函数进行学习,把学习到的条件概 率表CPT2与手动构造的CPT进行了比较。参数学习部分代码: n samples = 20;samples = cell(N, n samples);for i = 1:nsamplessamples(:,i) = sample_b net(b net);enddata = cell2 nu m(samples);bn et2 = mk_b net(dag ,no de_sizes,discrete,discrete_ no d

14、es);seed = 0;rand( state ,seed);bn et2.CPDC = tabular_CPD(b net2,C);bn et2.CPDS = tabular_CPD(b net2,S);bn et2.CPDR = tabular_CPD(b net2,R);bn et2.CPDW = tabular_CPD(b net2,W);bn et3 = lear n_params(b net2,data);实验结果:手动给出的CPTn samples=20n samples=200n samples=2000可以看出,随着训练样本数的增加,学习到的条件概率表越来越逼近 于手动给出

15、的条件概率表。u结构学习实验:这里我主要作了两个实验,一个是基于上面“草地潮湿原因模型” 例子,首先手动建立好贝叶斯网bnet,然后使用函数 sample_bnet(bnet)产生训练样本,制定节点顺序和最大父亲节点数, 代入K2算法,进行结构学习,并比较了不同训练样本数(nsamples)的情况下,学习到的结构和实际结构的差异。实验结果如下:可以看出当样本数达到一定的值以后,K2算法可以很好的建立出 需要的贝叶斯网络结构。1.手动给出的结构2.n samples=103.n samples=204.n samples=30另一个是根据叶进,林士敏的基于贝叶斯网络的推理在移动客 户中流失分析中

16、的应用提到的使用K2算法进行结构学习方法,通过手动构造相应数据,最后实现了该算法,成功实现了模型的建立, 而且与论文中给出的模型比较接近。实验部分代码如下:n 二 6;ns = 332,2,2,2;names = A ,B ,C ,D ,E ,class ;A = 1; B = 2; C = 3; D = 4;E = 5; class = 6;order = 4 5 6 3 2 1;max_fann 二 2;result_matrix = zeros (n s(class), ns(class);fn = e:/data.txt ;load(fn);data_tra in1 = data;nu

17、m _attrib nu m_cases = size(data_trai n1);data_train = zeros (nu m_attrib, nu m_cases);dag = zeros (n,n);dag =Iearn_struct_k2(data_train,ns,order,max_fann ,max_fann);%结构学习bnet = mk_b net(dag ,n s);priors = 1;seed = 0;rand( state , seed);for i = 1:nbn et.CPDi=tabular_CPD(bnet,i, CPT , unif , prior_type , dirichlet ,d irichlet_typ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论