enter_evidence.m
来自「Bayes网络工具箱」· M 代码 · 共 50 行
M
50 行
function [engine, loglik] = enter_evidence(engine, evidence, filter)% ENTER_EVIDENCE Add the specified evidence to the network (ff)% [engine, loglik] = enter_evidence(engine, evidence, filter)%% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)% If filter = 1, we do filtering, else smoothing. (Default: filter = 0.)if nargin < 3, filter = 0; end[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);% we assume we can use the same pot_type in all slices% Convert CPDs of instantiated nodes to potential formCPDpot = cell(ss,T); t = 1;for n=1:ss fam = family(bnet.dag, n); e = bnet.equiv_class(n, 1); CPDpot{n,t} = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));endfor t=2:T for n=1:ss fam = family(bnet.dag, n, 2); e = bnet.equiv_class(n, 2); CPDpot{n,t} = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t)); endend % Now convert CPDs on observed nodes to be potentials just on their parentsassert(pot_type == 'd');onodes = engine.onodes(:)';ns = bnet.node_sizes_slice;ns(onodes) = 1;for t=1:T for i=onodes p = parents(bnet.dag, i); %CPDpot{i,t} = set_domain_pot(CPDpot{i,t}, p); % leaves size too long temp = pot_to_marginal(CPDpot{i,t}); CPDpot{i,t} = dpot(p, ns(p), temp.T); % assumes pot_type = d endend[engine.marginals, engine.fwd, engine.back, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter);engine.CPDpot = CPDpot;engine.filter = filter;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?