Daniel@0: function gibbs_test1() Daniel@0: Daniel@0: disp('gibbs test 1') Daniel@0: Daniel@0: rand('state', 0); Daniel@0: randn('state', 0); Daniel@0: Daniel@0: %[bnet onodes hnodes qnodes] = gibbs_ex_1; Daniel@0: [bnet onodes hnodes qnodes] = gibbs_ex_2; Daniel@0: Daniel@0: je = jtree_inf_engine(bnet); Daniel@0: ge = gibbs_sampling_inf_engine (bnet, 'T', 50, 'burnin', 0, ... Daniel@0: 'order', [2 2 1 2 1]); Daniel@0: Daniel@0: ev = sample_bnet(bnet); Daniel@0: Daniel@0: evidence = cell(length(bnet.dag), 1); Daniel@0: evidence(onodes) = ev(onodes); Daniel@0: [je lj] = enter_evidence(je, evidence); Daniel@0: [ge lg] = enter_evidence(ge, evidence); Daniel@0: Daniel@0: Daniel@0: mj = marginal_nodes(je, qnodes); Daniel@0: Daniel@0: [mg ge] = marginal_nodes (ge, qnodes); Daniel@0: for t = 1:100 Daniel@0: [mg ge] = marginal_nodes (ge, qnodes, 'reset_counts', 0); Daniel@0: diff = mj.T - mg.T; Daniel@0: err(t) = norm (diff(:), 1); Daniel@0: end Daniel@0: clf Daniel@0: plot(err); Daniel@0: %title('error vs num. Gibbs samples') Daniel@0: Daniel@0: Daniel@0: %%%%%%% Daniel@0: Daniel@0: function [bnet, onodes, hnodes, qnodes] = gibbs_ex_1 Daniel@0: % bnet = gibbs_ex_1 Daniel@0: % a simple network to test the gibbs sampling engine Daniel@0: % 1 Daniel@0: % / | \ Daniel@0: % 2 3 4 Daniel@0: % | | | Daniel@0: % 5 6 7 Daniel@0: % \/ \/ Daniel@0: % 8 9 Daniel@0: % where all arcs point downwards Daniel@0: Daniel@0: N = 9; Daniel@0: dag = zeros(N,N); Daniel@0: dag(1,2)=1; dag(1,3)=1; dag(1,4)=1; Daniel@0: dag(2,5)=1; dag(3,6)=1; dag(4,7)=1; Daniel@0: dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1; Daniel@0: Daniel@0: onodes = 8:9; Daniel@0: hnodes = 1:7; Daniel@0: qnodes = [1 2 6]; Daniel@0: ns = [2 3 4 3 5 2 4 3 2]; Daniel@0: Daniel@0: eclass = [1 2 3 2 4 5 6 7 8]; Daniel@0: Daniel@0: bnet = mk_bnet (dag, ns, 'equiv_class', eclass); Daniel@0: Daniel@0: for i = 1:3 Daniel@0: bnet.CPD{i} = tabular_CPD(bnet, i); Daniel@0: end Daniel@0: Daniel@0: for i = 4:8 Daniel@0: bnet.CPD{i} = tabular_CPD(bnet, i+1); Daniel@0: end Daniel@0: Daniel@0: Daniel@0: Daniel@0: %%%%%%% Daniel@0: Daniel@0: function [bnet, onodes, hnodes, qnodes] = gibbs_ex_2 Daniel@0: % bnet = gibbs_ex_2 Daniel@0: % a very simple network Daniel@0: % Daniel@0: % 1 2 Daniel@0: % \ / Daniel@0: % 3 Daniel@0: Daniel@0: N = 3; Daniel@0: dag = zeros(N,N); Daniel@0: dag(1,3)=1; dag(2,3)=1; Daniel@0: Daniel@0: onodes = 3; Daniel@0: hnodes = 1:2; Daniel@0: qnodes = 1:2; Daniel@0: ns = [2 4 3]; Daniel@0: Daniel@0: eclass = [1 2 3]; Daniel@0: Daniel@0: bnet = mk_bnet (dag, ns, 'equiv_class', eclass); Daniel@0: Daniel@0: for i = 1:3 Daniel@0: bnet.CPD{i} = tabular_CPD(bnet, i); Daniel@0: end Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: