Mercurial > hg > camir-aes2014
comparison toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg3.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 % make a factor graph corresponding to an HMM with Gaussian outputs, where we absorb the | |
2 % evidence up front | |
3 | |
4 seed = 1; | |
5 rand('state', seed); | |
6 randn('state', seed); | |
7 | |
8 T = 3; | |
9 Q = 3; | |
10 O = 2; | |
11 cts_obs = 1; | |
12 param_tying = 1; | |
13 bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying); | |
14 N = 2*T; | |
15 onodes = bnet.observed; | |
16 hnodes = mysetdiff(1:N, onodes); | |
17 | |
18 data = sample_bnet(bnet); | |
19 | |
20 init_factor = bnet.CPD{1}; | |
21 obs_factor = bnet.CPD{3}; | |
22 edge_factor = bnet.CPD{2}; % trans matrix | |
23 | |
24 nfactors = T; | |
25 nvars = T; % hidden only | |
26 G = zeros(nvars, nfactors); | |
27 G(1,1) = 1; | |
28 for t=1:T-1 | |
29 G(t:t+1, t+1)=1; | |
30 end | |
31 | |
32 node_sizes = Q*ones(1,T); | |
33 | |
34 % We tie params as follows: | |
35 % the first hidden node use init_factor (number 1) | |
36 % all hidden nodes on the backbone use edge_factor (number 2) | |
37 % all observed nodes use the same factor, namely obs_factor | |
38 | |
39 small_fg = mk_fgraph_given_ev(G, node_sizes, {init_factor, edge_factor}, {obs_factor}, data(onodes), ... | |
40 'equiv_class', [1 2*ones(1,T-1)], 'ev_equiv_class', ones(1,T)); | |
41 | |
42 small_bnet = fgraph_to_bnet(small_fg); | |
43 | |
44 % don't pre-process evidence | |
45 % big_fg = bnet_to_fgraph(bnet); % can't handle Gaussian node | |
46 | |
47 | |
48 engine = {}; | |
49 engine{1} = jtree_inf_engine(bnet); | |
50 engine{2} = belprop_fg_inf_engine(small_fg, 'max_iter', 2*T); | |
51 engine{3} = jtree_inf_engine(small_bnet); | |
52 nengines = length(engine); | |
53 | |
54 | |
55 % on BN, use the original evidence | |
56 evidence = cell(1, 2*T); | |
57 evidence(onodes) = data(onodes); | |
58 tic; [engine{1}, ll(1)] = enter_evidence(engine{1}, evidence); toc | |
59 | |
60 | |
61 % on small_fg, we have already included the evidence | |
62 evidence = cell(1,T); | |
63 tic; [engine{2}, ll(2)] = enter_evidence(engine{2}, evidence); toc | |
64 | |
65 | |
66 % on small_bnet, we must add evidence to the dummy nodes | |
67 V = small_fg.nvars; | |
68 dummy = V+1:V+small_fg.nfactors; | |
69 N = max(dummy); | |
70 evidence = cell(1, N); | |
71 evidence(dummy) = {1}; | |
72 tic; [engine{3}, ll(3)] = enter_evidence(engine{3}, evidence); toc | |
73 | |
74 | |
75 | |
76 marg = zeros(T, nengines, Q); % marg(t,e,:) | |
77 for t=1:T | |
78 for e=1:nengines | |
79 m = marginal_nodes(engine{e}, t); | |
80 marg(t,e,:) = m.T; | |
81 end | |
82 end | |
83 marg(:,:,1) |