close all
clc
clear
N = 4; %四个节点 分别是cloudy,sprinkler,rain,wetgrass
dag = 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);
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]);
%画出建立好的贝叶斯网络
draw_graph(dag);
engine = jtree_inf_engine(bnet);
evidence = cell(1,N);
[engine, loglik1] = enter_evidence(engine, evidence);
joint= marginal_nodes(engine, [C S W]);%计算节点C、S、W的联合概率
joint_P=joint.T
程序如上所示,画出的贝叶斯网络如图所示,现在要计算节点C、S、W的联合概率,
报错:
错误使用 jtree_inf_engine/marginal_nodes (line 13)
no clique contains 1 2 4
请问为什么呢?如何计算贝叶斯网络中任意某些节点的联合概率?求大神赐教
贝叶斯网络.png |