about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/SLP/learning/learn_struct_mwst.m
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/SLP/learning/learn_struct_mwst.m')
-rw-r--r--sourcecodes/bnt-master/SLP/learning/learn_struct_mwst.m62
1 files changed, 62 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/learning/learn_struct_mwst.m b/sourcecodes/bnt-master/SLP/learning/learn_struct_mwst.m
new file mode 100644
index 00000000..8437385e
--- /dev/null
+++ b/sourcecodes/bnt-master/SLP/learning/learn_struct_mwst.m
@@ -0,0 +1,62 @@
+function [T, score_mat] = learn_struct_mwst(data, discrete, node_sizes, node_type, scoring_fn, root)
+% LEARN_STRUCT_MWST Learn an oriented tree using the MSWT algorithm
+% T = learn_struct_mwst(data, discrete, node_sizes, node_type, scoring_fn, root)
+%
+% Input : 
+%   data(i,m) is the node i in the case m,
+%   discrete = [ 1 if discret-node 0 if not ],
+%   node_sizes = 1 if gaussian node,
+%   node_type = {'tabular','gaussian',...},
+%   score = 'bic' (for complete data and any node types) or 'mutual_info' (tabular nodes),
+%   root is the futur root-node of the tree T.
+%
+% Output :
+%	T = adjacency matrix of the tree
+%
+% V1.2 : 17 feb 2003 (O. Francois - francois.olivier.c.h@gmail.com, Ph. Leray - philippe.leray@univ-nantes.fr)
+%
+%
+% See Chow&Liu 1968 for the original algorithm using Mutual Information scoring.
+% Or Heckerman 1994.
+
+if nargin <4
+    error('Requires at least 4 arguments.')
+end
+
+if nargin == 4
+    scoring_fn='bic'; root=1;
+end;
+
+if nargin == 5
+    root=1;
+end;
+
+
+N=size(data,1);
+score_mat=zeros(N,N);
+
+switch scoring_fn
+case 'bic',
+    for i=1:(N-1)
+            score2 = score_family(i, [], node_type{i}, scoring_fn, node_sizes, discrete, data,[]);
+        for j=(i+1):N
+            score1 = score_family(i, [j], node_type{i}, scoring_fn, node_sizes, discrete, data,[]);
+            score = score2-score1;
+            score_mat(i,j)=score;
+            score_mat(j,i)=score;
+        end
+    end
+case 'mutual_info',
+    for i=1:(N-1)
+        for j=(i+1):N
+            score_mat(i,j)= -mutual_info_score(i,node_sizes(i),j,node_sizes(j),data);
+            score_mat(j,i)=score_mat(i,j);
+        end
+    end
+otherwise,
+    error(['unrecognized scoring fn ' scoring_fn]);
+end
+
+G = minimum_spanning_tree(score_mat);
+T = mk_rooted_tree(G, root);
+T=full(T);
\ No newline at end of file