diff options
| author | ziejd2 | 2017-09-28 15:04:40 -0500 |
|---|---|---|
| committer | ziejd2 | 2017-09-28 15:04:40 -0500 |
| commit | 8070dc963753142bb86c4ed698d91fd623ed28e7 (patch) | |
| tree | d0f6dd8fc46a49b819aa55c1a90faa14d8448883 /sourcecodes/bnt-master/BNT/examples/static/SCG | |
| parent | 7cc31810d53176e805532b2789955f4eedbce6bb (diff) | |
| download | BNW-8070dc963753142bb86c4ed698d91fd623ed28e7.tar.gz | |
BNW using Octave instead of Matlab.
This version of BNW should perform the same as the original version. The only difference is that it uses Octave instead of Matlab when running BayesNet Toolbox during parameter learning. I am calling this BNW_1.02. It can be accessed at: compbio.uthsc.edu/BNW_1.02
Diffstat (limited to 'sourcecodes/bnt-master/BNT/examples/static/SCG')
8 files changed, 282 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Entries b/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Entries new file mode 100644 index 00000000..8a722650 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Entries @@ -0,0 +1,6 @@ +/scg1.m/1.1.1.1/Wed May 29 15:59:54 2002// +/scg2.m/1.1.1.1/Wed May 29 15:59:54 2002// +/scg3.m/1.1.1.1/Wed May 29 15:59:54 2002// +/scg_3node.m/1.1.1.1/Wed May 29 15:59:54 2002// +/scg_unstable.m/1.1.1.1/Wed May 29 15:59:54 2002// +D diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Repository b/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Repository new file mode 100644 index 00000000..1b551eef --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Repository @@ -0,0 +1 @@ +FullBNT/BNT/examples/static/SCG diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Root b/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Root new file mode 100644 index 00000000..f3bd14a6 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/CVS/Root @@ -0,0 +1 @@ +:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/scg1.m b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg1.m new file mode 100644 index 00000000..f504c1fe --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg1.m @@ -0,0 +1,77 @@ +% Same as cg1, except we call stab_cond_gauss_inf_engine + +bnet = mk_incinerator_bnet; + +engines = {}; +engines{end+1} = stab_cond_gauss_inf_engine(bnet); +engines{end+1} = jtree_inf_engine(bnet); +engines{end+1} = cond_gauss_inf_engine(bnet); +nengines = length(engines); + +F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9; +n = 9; +dnodes = [B F W]; +cnodes = mysetdiff(1:n, dnodes); + +evidence = cell(1,n); % no evidence +ll = zeros(1, nengines); +for e=1:nengines + [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence); +end +%assert(approxeq(ll(1), ll))) +ll + +% Compare to the results in table on p1107. +% These results are printed to 3dp in Cowell p150 + +mu = zeros(1,n); +sigma = zeros(1,n); +dprob = zeros(1,n); +addev = 1; +tol = 1e-2; +for e=1:nengines + for i=cnodes(:)' + m = marginal_nodes(engines{e}, i, addev); + mu(i) = m.mu; + sigma(i) = sqrt(m.Sigma); + end + for i=dnodes(:)' + m = marginal_nodes(engines{e}, i, addev); + dprob(i) = m.T(1); + end + assert(approxeq(mu([E D C L Min Mout]), [-3.25 3.04 -1.85 1.48 -0.214 2.83], tol)) + assert(approxeq(sigma([E D C L Min Mout]), [0.709 0.770 0.507 0.631 0.459 0.860], tol)) + assert(approxeq(dprob([B F W]), [0.85 0.95 0.29], tol)) + %m = marginal_nodes(engines{e}, bnet.names('E'), addev); + %assert(approxeq(m.mu, -3.25, tol)) + %assert(approxeq(sqrt(m.Sigma), 0.709, tol)) +end + +% Add evidence (p 1105, top right) +evidence = cell(1,n); +evidence{W} = 1; % industrial +evidence{L} = 1.1; +evidence{C} = -0.9; + +ll = zeros(1, nengines); +for e=1:nengines + [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence); +end +%assert(all(approxeq(ll(1), ll))) +ll + +for e=1:nengines + for i=cnodes(:)' + m = marginal_nodes(engines{e}, i, addev); + mu(i) = m.mu; + sigma(i) = sqrt(m.Sigma); + end + for i=dnodes(:)' + m = marginal_nodes(engines{e}, i, addev); + dprob(i) = m.T(1); + end + assert(approxeq(mu([E D C L Min Mout]), [-3.90 3.61 -0.9 1.1 0.5 4.11], tol)) + assert(approxeq(sigma([E D C L Min Mout]), [0.076 0.326 0 0 0.1 0.344], tol)) + assert(approxeq(dprob([B F W]), [0.0122 0.9995 1], tol)) +end + diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/scg2.m b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg2.m new file mode 100644 index 00000000..a9779248 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg2.m @@ -0,0 +1,12 @@ +% Same as cg2, except we call stab_cond_gauss_inf_engine + +ns = 2*ones(1,9); +bnet = mk_incinerator_bnet(ns); + +engines = {}; +engines{end+1} = stab_cond_gauss_inf_engine(bnet); +engines{end+1} = jtree_inf_engine(bnet); +engines{end+1} = cond_gauss_inf_engine(bnet); +nengines = length(engines); + +[err, time] = cmp_inference_static(bnet, engines, 'singletons_only', 1); diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/scg3.m b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg3.m new file mode 100644 index 00000000..cc35b0a5 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg3.m @@ -0,0 +1,42 @@ +% Compare various inference engines on the following network (from Jensen (1996) p84 fig 4.17) +% 1 +% / | \ +% 2 3 4 +% | | | +% 5 6 7 +% \/ \/ +% 8 9 +% where all arcs point downwards + +N = 9; +dag = zeros(N,N); +dag(1,2)=1; dag(1,3)=1; dag(1,4)=1; +dag(2,5)=1; dag(3,6)=1; dag(4,7)=1; +dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1; + +gauss = 1; +if gauss + ns = ones(1,N); % scalar nodes + ns(1) = 2; + ns(9) = 3; + dnodes = []; +else + ns = 2*ones(1,N); % binary nodes + dnodes = 1:N; +end + +bnet = mk_bnet(dag, ns, 'discrete', dnodes); +% use random params +for i=1:N + if gauss + bnet.CPD{i} = gaussian_CPD(bnet, i); + else + bnet.CPD{i} = tabular_CPD(bnet, i); + end +end + +engines = {}; +engines{1} = jtree_inf_engine(bnet); +engines{2} = stab_cond_gauss_inf_engine(bnet); + +[err, time] = cmp_inference_static(bnet, engines); diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/scg_3node.m b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg_3node.m new file mode 100644 index 00000000..5f75946a --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg_3node.m @@ -0,0 +1,52 @@ +% This example is from Page.143 of "Probabilistic Networks and Expert Systems", +% Cowell, Dawid, Lauritzen and Spiegelhalter, 1999, Springer. + +X = 1; Y = 2; Z = 3; +n = 3; + +dag = zeros(n); +dag(X, Y)=1; +dag(Y, Z)=1; + +ns = ones(1, n); +dnodes = []; + +bnet = mk_bnet(dag, ns, dnodes); +bnet.CPD{X} = gaussian_CPD(bnet, X, 'mean', 0, 'cov', 1); +bnet.CPD{Y} = gaussian_CPD(bnet, Y, 'mean', 0, 'cov', 1, 'weights', 1); +bnet.CPD{Z} = gaussian_CPD(bnet, Z, 'mean', 0, 'cov', 1, 'weights', 1); + +engines = {}; +engines{end+1} = jtree_inf_engine(bnet); +engines{end+1} = stab_cond_gauss_inf_engine(bnet); +nengines = length(engines); + +evidence = cell(1,n); +evidence{Y} = 1.5; + +for e=1:nengines + engines{e} = enter_evidence(engines{e}, evidence); + margX = marginal_nodes(engines{e}, X); + assert(approxeq(margX.mu, 0.75)) + assert(approxeq(margX.Sigma, 0.5)) + + margZ = marginal_nodes(engines{e}, Z); + assert(approxeq(margZ.mu, 1.5)) + assert(approxeq(margZ.Sigma, 1)) +end + + +evidence = cell(1,n); +evidence{Z} = 1.5; + +for e=1:nengines + engines{e} = enter_evidence(engines{e}, evidence); + margX = marginal_nodes(engines{e}, X); + assert(approxeq(margX.mu, 1/2)) + assert(approxeq(margX.Sigma, 2/3)) + + margY = marginal_nodes(engines{e}, Y); + assert(approxeq(margY.mu, 1)) + assert(approxeq(margY.Sigma, 2/3)) +end + diff --git a/sourcecodes/bnt-master/BNT/examples/static/SCG/scg_unstable.m b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg_unstable.m new file mode 100644 index 00000000..6617bfa9 --- /dev/null +++ b/sourcecodes/bnt-master/BNT/examples/static/SCG/scg_unstable.m @@ -0,0 +1,91 @@ +function scg_unstable() + +% the objective of this script is to test if the stable conditonal gaussian +% inference can handle the numerical instability problem described on +% page.151 of 'Probabilistic networks and expert system' by Cowell, Dawid, Lauritzen and +% Spiegelhalter, 1999. + +A = 1; Y = 2; +n = 2; + +ns = ones(1, n); +dnodes = [A]; +cnodes = Y; +ns = [2 1]; + +dag = zeros(n); +dag(A, Y) = 1; + +bnet = mk_bnet(dag, ns, dnodes); + +bnet.CPD{A} = tabular_CPD(bnet, A, [0.5 0.5]'); +bnet.CPD{Y} = gaussian_CPD(bnet, Y, 'mean', [0 1], 'cov', [1e-5 1e-6]); + +evidence = cell(1, n); + +pot_type = 'cg'; +potYgivenA = convert_to_pot(bnet.CPD{Y}, pot_type, [A Y], evidence); +potA = convert_to_pot(bnet.CPD{A}, pot_type, A, evidence); +potYandA = multiply_by_pot(potYgivenA, potA); +potA2 = marginalize_pot(potYandA, A); + +thresh = 1; % 0dp + +[g,h,K] = extract_can(potA); +assert(approxeq(g(:)', [-0.693147 -0.693147], thresh)) + + +[g,h,K] = extract_can(potYgivenA); +assert(approxeq(g(:)', [4.83752 -499994], thresh)) +assert(approxeq(h(:)', [0 1e6])) +assert(approxeq(K(:)', [1e5 1e6])) + +[g,h,K] = extract_can(potYandA); +assert(approxeq(g(:)', [4.14437 -499995], thresh)) +assert(approxeq(h(:)', [0 1e6])) +assert(approxeq(K(:)', [1e5 1e6])) + + +[g,h,K] = extract_can(potA2); +%assert(approxeq(g(:)', [-0.69315 -1])) +g +assert(approxeq(g(:)', [-0.69315 -0.69315])) + + + +if 0 +pot_type = 'scg'; +spotYgivenA = convert_to_pot(bnet.CPD{Y}, pot_type, [A Y], evidence); +spotA = convert_to_pot(bnet.CPD{A}, pot_type, A, evidence); +spotYandA = direct_combine_pots(spotYgivenA, spotA); +spotA2 = marginalize_pot(spotYandA, A); + +spotA=struct(spotA); +spotA2=struct(spotA2); +for i=1:2 + assert(approxeq(spotA2.scgpotc{i}.p, spotA.scgpotc{i}.p)) + assert(approxeq(spotA2.scgpotc{i}.A, spotA.scgpotc{i}.A)) + assert(approxeq(spotA2.scgpotc{i}.B, spotA.scgpotc{i}.B)) + assert(approxeq(spotA2.scgpotc{i}.C, spotA.scgpotc{i}.C)) +end + +end + + +%%%%%%%%%%% + +function [g,h,K] = extract_can(pot) + +pot = struct(pot); +D = length(pot.can); +g = zeros(1, D); +h = zeros(1, D); +K = zeros(1, D); +for i=1:D + S = struct(pot.can{i}); + g(i) = S.g; + if length(S.h) > 0 + h(i) = S.h; + K(i) = S.K; + end +end |
