prob_evidence.m

来自「Bayes网络工具箱」· M 代码 · 共 41 行

M
41
字号
function loglik = prob_evidence(engine, evidence)% PROB_EVIDENCE Compute the likelihood of the observation sequence (fast_jtree_dbn)% loglik = prob_evidence(engine, evidence)%% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)[ss T] = size(evidence);observed = ~isemptycell(evidence);bnet = bnet_from_engine(engine);pot_type = determine_pot_type(find(observed(:,1)), bnet.cnodes_slice, bnet.intra);assert(pot_type == 'd');% Convert CPDs of instantiated nodes to potential formCPDpot = cell(ss,T);      ns = repmat(bnet.node_sizes_slice(:), 1, T);cnodes = repmat(bnet.cnodes_slice(:), ss, T);     t = 1;for n=1:ss  fam = family(bnet.dag, n);  e = bnet.equiv_class(n, 1);  CPDpot{n,t} = CPD_to_table(bnet.CPD{e}, fam, ns, cnodes, evidence(:,1));endfor n=1:ss  fam = family(bnet.dag, n, 2);  doms = unroll_set(fam, ss, T-1);  e = bnet.equiv_class(n, 2);  CPDpot(n,2:T) = CPD_to_tables(bnet.CPD{e}, doms, ns, cnodes, evidence);endalpha = cell(1,T);[alpha{t}, logscale(t)] = enter_soft_evidence(engine.sub_engine1, engine.fwd1.clq_ass_to_node, ...					   CPDpot(:,1), engine.fwd1.CPD_ndx);clqs = [engine.fwd.clq_ass_to_cluster(:,1); engine.fwd.clq_ass_to_node(:,2)];ndx = [engine.fwd.cluster_ndx(:,1); engine.fwd.CPD_ndx(:,2)];for t=2:T  pots = [alpha(:,t-1); CPDpot(:,t)];  [alpha{t}, logscale(t)] = enter_soft_evidence(engine.fwd.engine, clqs, pots, ndx);endloglik = sum(logscale);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?