FullBNT学习笔记之一(matlab)

首先来看一个草地湿润模型,Cloudy表示天气是否多云,C=1(F)表示False,C=2(T)表示True,一下表示均相同,Sprinklet表示洒水车是否出动,Rain表示是否下雨,WetGrass表示草地是否是湿的。旁边的表格表示各种条件概率。

贝叶斯网络表示:BNT中使用矩阵方式表示贝叶斯网络,即若节点i到j有一条弧,则对应矩阵中(i,j)值为1,否则为0。上图是一个草地潮湿原因模型。我们使用matlab画出建立好的贝叶斯网络,,可以求出单个节点后验概率和多个节点后验概率。

matlab程序如下:第一步,建立贝叶斯网络,使用matlab得到上述网络结构

clear;clc;N = 4; %四个节点 分别是cloudy,sprinkler,rain,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; %离散节点node_sizes = 2*ones(1,N); %节点状态数bnet =mk_bnet(dag,node_sizes,’names’,{‘cloudy’,… ‘sprinkler’,’rain’,’wetgrass’},’discrete’,discrete_nodes);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]);%画出建立好的贝叶斯网络figuredraw_graph(dag);

接下来比如我们想计算洒水器导致草地是湿润的概率。证据的构成是W=2,enter_evidenc 执行一个双通道的信息传递模式。第一次返回的变量包括修正的结合着证据的引擎,第二次返回的变量包括证据的对数似然。按如下方式计算p=P(S=2|W=2):

我们使用联合树引擎,它是所有精确推断引擎的根本。它可以按如下步骤调用:

engine=jtree_inf_engine(bnet);

evidence = cell(1,N);

evidence{W} = 2;

[engine, loglik] = enter_evidence(engine,evidence);

marg = marginal_nodes(engine, S);

p = marg.T(2);

据我目前的理解,evidence 是你所需要计算的条件概率的条件部分,而marginal_nodes的第二个参数是你所需要的计算的条件概率的概率部分。由以上代码可以计算条件概率P(S|W=2),储存在变量marg.T里面。

两个小例子:

一、直接计算p(W)概率

evidence = cell(1,N);

[engine, ll] = enter_evidence(engine,evidence);

m = marginal_nodes(engine, [W]);

m.T

二、计算联合概率

evidence=cell(1,N);

[engine,ll]=enter_evidence(engine,evidence);

m=marginal_nodes(engine,[SRW]);

本文在博客基础上根据自己理解所写

——————

祝身体健康,万事如意

华电北风吹

天津大学计算机科学与技术学院认知计算与应用重点实验室

天津市卫津路92号

邮编:300072

邮箱:1194603539@qq.com

二、计算联合概率

我不敢说我明天便可以做一个快乐的人,面朝大海春暖花开。

FullBNT学习笔记之一(matlab)

相关文章:

你感兴趣的文章:

标签云: