Mercurial > hg > camir-aes2014
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; |