about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m
diff options
context:
space:
mode:
authorziejd22018-03-14 23:23:33 -0500
committerGitHub2018-03-14 23:23:33 -0500
commit1ff6baa44e22b91eefb48aea6f3befa078c0489b (patch)
treee0fd79d2e32fd2aedda2eadaed0f19af3514c520 /sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m
parent6882395afdadf4e982b25b5215071a0932730950 (diff)
parentc80226899f5cdd9f11c163817d59445213f5bef0 (diff)
downloadBNW-1ff6baa44e22b91eefb48aea6f3befa078c0489b.tar.gz
Merge pull request #1 from ziejd2/octave_php_separate
Octave php separate
Diffstat (limited to 'sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m')
-rw-r--r--sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m56
1 files changed, 56 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m b/sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m
new file mode 100644
index 00000000..e32dee80
--- /dev/null
+++ b/sourcecodes/bnt-master/SLP/learning/learn_struct_hc.m
@@ -0,0 +1,56 @@
+function [dag,best_score] = learn_struct_hc(data, nodesizes, seeddag, varargin)
+%
+% LEARN_STRUCT_HC(data,seeddag) learns a structure of Bayesian net by Hill Climbing.
+% dag = learn_struct_hc(data, nodesizes, seeddag)
+%
+% dag: the final structurre matrix
+% Data : training data, data(i,m) is the m obsevation of node i
+% Nodesizes: the size array of different nodes
+% seeddag: given seed Dag for hill climbing, optional
+%
+% by Gang Li @ Deakin University (gli73@hotmail.com)
+
+[N ncases] = size(data);
+if (nargin < 3 ) 
+    seeddag = zeros(N,N); % mk_rnd_dag(N); %call BNT function
+elseif ~acyclic(seeddag)
+    seeddag = mk_rnd_dag(N); %zeros(N,N);
+end;
+
+% set default params
+scoring_fn = 'bic';
+verbose  = 'yes';
+
+% get params
+args = varargin;
+nargs = length(args);
+if length(args) > 0
+    if isstr(args{1})
+    	for i = 1:2:nargs
+    		switch args{i}
+    		case 'scoring_fn', scoring_fn = args{i+1};
+    		case 'verbose',  verbose  = strcmp(args{i+1},'yes');
+    		end;
+    	end;
+    end;
+end;
+
+done = 0;
+best_score = score_dags(data,nodesizes, {seeddag},'scoring_fn',scoring_fn);
+while ~done
+    [dags,op,nodes] = mk_nbrs_of_dag(seeddag);
+    nbrs = length(dags);
+    scores = score_dags(data, nodesizes, dags,'scoring_fn',scoring_fn);
+    max_score = max(scores);
+    new = find(scores == max_score );
+    if ~isempty(new) & (max_score > best_score)
+        p = sample_discrete(normalise(ones(1, length(new))));
+        best_score = max_score;
+        seeddag = dags{new(p)};
+    else
+        done = 1;
+    end;
+end;
+
+dag = seeddag;
+