comparison toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/enter_evidence.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:e9a9cd732c1e
1 function [engine, loglik] = enter_evidence(engine, evidence, varargin)
2 % ENTER_EVIDENCE Add the specified evidence to the network (cond_gauss)
3 % [engine, loglik] = enter_evidence(engine, evidence, ...)
4 %
5 % evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
6
7 bnet = bnet_from_engine(engine);
8 ns = bnet.node_sizes(:);
9 observed = ~isemptycell(evidence);
10 onodes = find(observed);
11 hnodes = find(isemptycell(evidence));
12 engine.evidence = evidence;
13
14 % check there are no C->D links where C is hidden
15 pot_type = determine_pot_type(bnet, onodes);
16
17 dhid = myintersect(hnodes, bnet.dnodes);
18 S = prod(ns(dhid));
19 T = zeros(S,1);
20
21 N = length(bnet.dag);
22 mu = cell(1,N);
23 Sigma = cell(1,N);
24 cobs = myintersect(bnet.cnodes, onodes);
25 chid = myintersect(bnet.cnodes, hnodes);
26 ens = ns;
27 ens(cobs) = 0;
28 for j=chid(:)'
29 mu{j} = zeros(ens(j), S);
30 Sigma{j} = zeros(ens(j), ens(j), S);
31 end
32
33 for i=1:S
34 dvals = ind2subv(ns(dhid), i);
35 evidence(dhid) = num2cell(dvals);
36 [sub_engine, loglik] = enter_evidence(engine.sub_engine, evidence);
37 for j=chid(:)'
38 m = marginal_nodes(sub_engine, j);
39 mu{j}(:,i) = m.mu;
40 Sigma{j}(:,:,i) = m.Sigma;
41 end
42 T(i) = exp(loglik);
43 end
44
45 [T, lik] = normalise(T);
46 loglik = log(lik);
47
48 engine.T = T;
49 engine.mu = mu;
50 engine.Sigma = Sigma;
51
52 dnodes = bnet.dnodes;
53 dobs = myintersect(dnodes, onodes);
54 ens(dobs) = 1;
55 engine.joint_dmarginal = dpot(dnodes, ens(dnodes), myreshape(engine.T, ens(dnodes)));
56
57 engine.onodes = onodes;