在MATLAB中对FullBNT具体实例的-研究学习

此处是对以下实例的具体分析

下图是一个贝叶斯网络,现在先不需要关注节点代表的意义,关注的点有几个:

一个是入度的数量,入度决定了概率的计算式

example -入度为零,即没有先决节点,则只有P(本节点);a

               -入度为一,即一个先决节点,则有条件概率P(本节点|先决节点)

               -入度为二,即两个先决节点,则有P(本节点|先决点1,先决点2)

       -如是类推 ... ...

再一个是下图中节点对应的编号在图下面的概率计算中又有新的对应

对应的在概率表达式中各节点的小写字母如下(图中概率计算公式里的):
a     s 
t       l       b
    e
x      d
即,对应的大写字母为(MATLAB代码中的):
A         S
T         L      B
      E
X         D                          


得到这两个具体的信息就可以在matlab中构造网络了(有路径则dag()=1)。



                           

如下图所示,给出了贝叶斯网络的图和相应的条件概率

            


对上述信息建立贝叶斯网络,代码如下                  

[plain]  view plain copy
  1. N=8;  八个节点
  2. dag=zeros(N,N);  初始化有向无环图
  3. A=1;S=2;T=3;L=4;B=5;E=6;X=7;D=8;  给特征值附上具体的数量特征
  4. dag(A,T)=1;                 
  5. dag(S,[L B])=1;      具体的构造代码       
  6. dag([T L],E)=1;             
  7. dag(B,D)=1;                 
  8. dag(E,[X D])=1;             
  9. discrete_nodes=1:N;  
  10. node_sizes=2*ones(1,N);  
  11. bnet=mk_bnet(dag,node_sizes,'names',{'A','S','T','L','B','E','X','D'},'discrete',discrete_nodes);
  12.  利用tabular_CPD设置各个变量的边缘概率  
  13. bnet.CPD{A}=tabular_CPD(bnet,A,[0.99,0.01]);  对于A和S入度为零,定义顺序是F- T
  14. bnet.CPD{S}=tabular_CPD(bnet,S,[0.5,0.5]);  
  15. bnet.CPD{T}=tabular_CPD(bnet,T,[0.99,0.95,0.01,0.05]);  对于T、L和B这类入度为一,顺序是FF-  FT- TF- TT
  16. bnet.CPD{L}=tabular_CPD(bnet,L,[0.99,0.9,0.01,0.1]);  
  17. bnet.CPD{B}=tabular_CPD(bnet,B,[0.7,0.4,0.3,0.6]);  
  18. bnet.CPD{E}=tabular_CPD(bnet,E,[1,0,0,0,0,1,1,1]);  对于E,D这类,顺序是FFF- FFT- FTF-  FTT-  TFF-  TFT-  TTF-  TTT
  19. bnet.CPD{X}=tabular_CPD(bnet,X,[0.95,0.02,0.05,0.98]);  
  20. bnet.CPD{D}=tabular_CPD(bnet,D,[0.9,0.2,0.3,0.1,0.1,0.8,0.7,0.9]);  
  21. draw_graph(dag)  

如果我们要来计算P(A),则可以写如下代码:

[plain]  view plain copy
  1. engine=jtree_inf_engine(bnet);  
  2. evidence=cell(1,N);  
  3. [engine,loglik]=enter_evidence(engine,evidence);  
  4. m=marginal_nodes(engine,A);  
  5. m.T()  

简单检查下A的概率

现在可以给定任意条件,然后计算概率了。

比较上下两段代码,可以得出计算方法:

在计算P(A)时,并没有给出具体的envidance,但是在计算P(T=True|A=False,S=True,X=True,D=False)时,

给出了envidance{A}{S}{X}{D},并且用1和2来标记‘是’‘非’(1->false,2->true)。

[plain]  view plain copy
  1. 例如要计算任意组合条件下,个体分别得Tub、lung cancer和bronchitis的概率。
  2. 下面代码计算了P(T=True|A=False,S=True,X=True,D=False)的概率  
[plain]  view plain copy
  1. engine=jtree_inf_engine(bnet);  
  2. evidence=cell(1,N);  
  3. evidence{A}=1;  
  4. evidence{S}=2;  
  5. evidence{X}=2;  
  6. evidence{D}=1;  
  7. [engine,loglik]=enter_evidence(engine,evidence);  
  8. m=marginal_nodes(engine,T);  
  9. m.T(2)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值