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