about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/SLP/examples/test_MWSTEM.m
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/SLP/examples/test_MWSTEM.m')
-rw-r--r--sourcecodes/bnt-master/SLP/examples/test_MWSTEM.m154
1 files changed, 154 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/examples/test_MWSTEM.m b/sourcecodes/bnt-master/SLP/examples/test_MWSTEM.m
new file mode 100644
index 00000000..cb4b4837
--- /dev/null
+++ b/sourcecodes/bnt-master/SLP/examples/test_MWSTEM.m
@@ -0,0 +1,154 @@
+% francois.olivier.c.h@gmail.com
+
+%ddd = datestr(now);
+%ddd([12 15 18])='-' ;
+%fnd=[ddd '.txt'];
+%diary(fnd)
+
+%dbstop if error
+
+clear all;
+close all;
+
+ rand('state',sum(100*clock))
+
+ nbloopmax = 5;        % number of loop max in MWST-EM
+
+
+names={ 'A' , 'S' , 'T' , 'L' , 'B' , 'O' , 'X' , 'D' };
+node = struct('visit', 1, ...
+    'smoking', 2, ...
+    'tuberculosis', 3, ...
+    'bronchitis', 5, ...
+    'lung', 4, ...
+    'ou', 6, ...
+    'Xray', 7, ...
+    'dyspnoea', 8);
+
+adjacency = zeros(8);
+adjacency([node.visit], node.tuberculosis) = 1;
+adjacency([node.smoking], node.lung) = 1;
+adjacency([node.lung node.tuberculosis], node.ou) = 1;
+adjacency([node.ou], node.Xray) = 1;
+adjacency([node.smoking], node.bronchitis) = 1;
+adjacency([node.bronchitis node.ou], node.dyspnoea) = 1;
+carre=ones(1,8);
+
+  figure(1); [xx yy] = make_layout(adjacency);
+    yy=(yy-0.2)*.8/.6+.1;
+    xx=(xx-0.2833)*.8/.517+.1;
+    subplot(2,2,1), [xx yy]=draw_graph(adjacency,names,carre,xx,yy); %,carre);
+    title('ASIA net.');
+
+fprintf('\n============================= Test MWST-EM\n');
+
+n=8;
+m=500;
+bnet=mk_asia2_bnet;
+data = cell(n,m);
+for l = 1:m, data(:,l) = sample_bnet(bnet); end
+asiab=cell2mat(data);
+fprintf('Complete data have been created.');
+
+ DM = 0.1;
+ BD0 = asiab;
+ node_sizes = max(BD0');
+ [N, m]=size(BD0);
+ rand('state',0); randn('state',0);
+ vide = rand(size(BD0))<(1-DM);
+ data=BD0.*vide;
+ data = mat_to_bnt(data,0);
+
+% N=4;
+% dagO = diag(ones(N-1,1),1); dag0(1,3)=1;
+% figure(1), subplot(4,4,1), title('theoritical'), draw_graph(dagO);
+%
+% node_sizes=2*ones(1,N);
+discrete = ones(1,N);
+%
+% bnetO = mk_bnet(dagO, node_sizes);
+% bnetO.CPD{1} = tabular_CPD(bnetO, 1, 'CPT',[0.2 0.8]);
+% bnetO.CPD{2} = tabular_CPD(bnetO, 2, 'CPT',[0.4 0.7 0.6 0.3]);
+% bnetO.CPD{3} = tabular_CPD(bnetO, 3);
+% bnetO.CPD{4} = tabular_CPD(bnetO, 4, 'CPT', [0.5 0.8 0.5 0.2]);
+%
+% m = 1000; DM = 0.1;
+%
+% for l=1:m, dataO(:,l) = sample_bnet(bnetO); end
+% rand('state',0); randn('state',0);
+% vide = rand(size(dataO))<(1-DM);
+% data = bnt_to_mat(dataO);
+% data = data.*vide;
+% data = mat_to_bnt(data,0);
+% clear dataO;
+
+fprintf('Missing data percentage : %3.1f%%\n',100*DM);
+
+%     engine0=jtree_sparse_inf_engine(bnetO);
+%     [bnet1, LL1, engine1] = learn_params_em(engine0, data);
+% BIC0=0;
+%     for i=1:N,
+%         xxx=struct(bnet1.CPD{i});
+%         BIC0=BIC0+bic_score_family(xxx.counts, xxx.CPT, xxx.nsamples);
+%     end
+%     fprintf('%5.2f\n',BIC0);
+
+%root = 1;
+prior = 0;
+  tmp=cputime;
+
+[BT_J11, Sbest0] = learn_struct_mwst_EM(data, discrete, node_sizes, prior, nbloopmax);
+    tmp=cputime-tmp;
+    fprintf('\tMWST-EM algorithm spent %3.2f secondes\n',tmp);
+
+figure(1),  subplot(2,2,2), draw_graph(BT_J11.dag,names,carre,xx,yy); %,carre);
+    title('MSWT-EM');
+
+    fprintf('\n============================= Test AM-SEM\n');
+
+    G0 = zeros(N,N);
+    B0 = mk_bnet(G0, node_sizes);
+    for i=1:N
+        B0.CPD{i} = tabular_CPD(B0, i, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);%1, 'dirichlet_type','BDeu');
+    end
+
+    tmp=cputime;
+    max_loop = 10;
+
+    [B0, order, best_score] = learn_struct_EM(B0, data, max_loop);
+    G1 = B0.dag;
+    [xxx oo]=sort(order);
+    dag=G1(oo,oo);
+
+    tmp=cputime-tmp;
+    fprintf('\tSEM algorithm spent %3.2f secondes\n',tmp);
+
+
+    subplot(2,2,3), draw_graph(dag,names,carre,xx,yy); %,carre);
+    title('AMS-EM');
+
+    fprintf('\n============================= Test AM-SEM+T\n');
+
+    G0 = BT_J11.dag;
+    B0 = mk_bnet(G0, node_sizes);
+    for i=1:N
+        B0.CPD{i} = tabular_CPD(B0, i, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);%1, 'dirichlet_type','BDeu');
+    end
+
+    tmp=cputime;
+    max_loop = 10;
+
+    [B0, order, best_score] = learn_struct_EM(B0, data, max_loop);
+    G1 = B0.dag;
+    [xxx oo]=sort(order);
+    dag=G1(oo,oo);
+
+    tmp=cputime-tmp;
+    fprintf('\tSEM+T algorithm spent %3.2f secondes\n',tmp);
+
+
+    subplot(2,2,4), draw_graph(dag,names,carre,xx,yy); %,carre);
+    title('AMS-EM+T');
+
+
+%diary off