精确推理算法的鼻祖是联合树。
1、计算边缘分布
在已知证据节点的条件下,求某一个节点的条件概率。
首先要先建立联合树推理模型
然后设置证据变量
添加证据节点
求出似然函数
计算边缘节点
程序:
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{R}=2;
[engine,loglik]=enter_evidence(engine,evidence);
marg=marginal_nodes(engine,S);
p=marg.T(2);
bar(marg.T);
2、观测节点
观测节点相当于已知证据节点,比如已知要下雨,那么不下雨的概率为0,下雨的概率为1。
程序:
evidence=cell(1,N);
evidence{W}=2;
engine=enter_evidence(engine,evidence);
m=marginal_nodes(engine,W);
%更换显示模式,说明为1概率为0,位2概率为1。
m=marginal_nodes(engine,W,1);
运行m.T得到1,去除证据节点后,运行m.T得到0 和 1。
3、计算联合分布
计算联合概率语法格式就像计算多个边缘概率的集合,用向量表示;计算条件联合概率,可更换显示模式。
程序:
evidence=cell(1,N);
[engine,ll]=enter_evidence(engine,evidence);
m=marginal_nodes(engine,[S R W]);
结果:

程序:
evidence{R}=2;
[engine,ll]=enter_evidence(engine,evidence);
m=marginal_nodes(engine,[S R W]);
结果:

程序:
m=marginal_nodes(engine,[S R W],1);
结果:

4、虚拟证据节点
就是那些概率分布表不确定的节点,它可能是空的,也可能是某几个可能的取值,相当于参数学习,反而言之,隐节点就是因果关系不确定的节点,目前,只有联合树推理算法支持贝叶斯网络有虚拟证据节点和隐节点。
程序:
[engine,loglik]=enter_evidence(engine,evidence,'soft',soft_evidence);
其中,soft_evidence{i}可以是空向量,表示软节点的概率分布未知,也可以是几个可能的概率取值,表示软节点某取值的概率可能有多个取值。
5、最大可能性解释
英语学习:
thresholded:阈值化
ties:联系
abductive reasoning:诱人的推理
最大可能性解释就是在已知证据节点的条件下,其它节点可能性最大的取值。注意:有些节点可能有不止一个最大可能性取值,我们必须将它阈值化,强制实施阈值化可能会导致错误的结果,实施办法是加参数1。
程序:
[mpe,ll]=calc_mpe(engine,evidence);
[mpe,ll]=calc_mpe(engine,evidence,1);
网友评论