about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/SLP/scoring/score_dags.m
diff options
context:
space:
mode:
authorziejd22017-09-28 15:04:40 -0500
committerziejd22017-09-28 15:04:40 -0500
commit8070dc963753142bb86c4ed698d91fd623ed28e7 (patch)
treed0f6dd8fc46a49b819aa55c1a90faa14d8448883 /sourcecodes/bnt-master/SLP/scoring/score_dags.m
parent7cc31810d53176e805532b2789955f4eedbce6bb (diff)
downloadBNW-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/SLP/scoring/score_dags.m')
-rw-r--r--sourcecodes/bnt-master/SLP/scoring/score_dags.m74
1 files changed, 74 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/scoring/score_dags.m b/sourcecodes/bnt-master/SLP/scoring/score_dags.m
new file mode 100644
index 00000000..acda3e0f
--- /dev/null
+++ b/sourcecodes/bnt-master/SLP/scoring/score_dags.m
@@ -0,0 +1,74 @@
+function [score, cache] = score_dags(data, ns, dags, varargin)
+% SCORE_DAGS Compute the score of one or more DAGs
+% score = score_dags(data, ns, dags, varargin)
+%
+% data{i,m} = value of node i in case m (can be a cell array).
+% node_sizes(i) is the number of size of node i.
+% dags{g} is the g'th dag
+% score(g) is the score of the i'th dag
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% scoring_fn - 'bayesian' or 'bic' [ 'bayesian' ]
+%              Currently, only networks with all tabular nodes support Bayesian scoring.
+% type       - type{i} is the type of CPD to use for node i, where the type is a string
+%              of the form 'tabular', 'noisy_or', 'gaussian', etc. [ all cells contain 'tabular' ]
+% params     - params{i} contains optional arguments passed to the CPD constructor for node i,
+%              or [] if none.  [ all cells contain {'prior', 1}, meaning use uniform Dirichlet priors ]
+% discrete   - the list of discrete nodes [ 1:N ]
+% clamped    - clamped(i,m) = 1 if node i is clamped in case m [ zeros(N, ncases) ]
+% cache      - data structure used to memorize local score computations (cf. SCORE_INIT_CACHE function) [ [] ]
+%
+% e.g., score = score_dags(data, ns, mk_all_dags(n), 'scoring_fn', 'bic', 'params', [],'cache',cache);
+%
+% (Caching implementation : francois.olivier.c.h@gmail.com, philippe.leray@univ-nantes.fr)
+% ("Clamped" optimisation : Derek Hoiem <dhoiem@cs.cmu.edu>)
+
+[n ncases] = size(data);
+
+% set default params
+type = cell(1,n);
+params = cell(1,n);
+cache=[];
+for i=1:n
+  type{i} = 'tabular';
+  params{i} = { 'prior_type', 'dirichlet', 'dirichlet_weight', 1 };
+end
+scoring_fn = 'bayesian';
+discrete = 1:n;
+
+isclamped = 0; % DWH
+clamped = zeros(n, ncases);
+u = [1:ncases]'; % DWH
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'scoring_fn', scoring_fn = args{i+1};
+   case 'type',       type = args{i+1};
+   case 'discrete',   discrete = args{i+1};
+   case 'clamped',    clamped = args{i+1}, isclamped = 1; %DWH
+   case 'params',     if isempty(args{i+1}), params = cell(1,n); else params = args{i+1};  end
+   case 'cache',      cache=args{i+1} ;
+  end
+end
+
+NG = length(dags);
+score = zeros(1, NG);
+
+for j=1:n
+    if isclamped %DWH
+        u = find(clamped(j,:)==0);
+    end
+    for g=1:NG
+        if isempty(dags{g})
+            score(g)=-Inf;
+        else
+            ps = parents(dags{g}, j);
+            [scor cache] = score_family(j, ps, type{j}, scoring_fn, ns, discrete, data(:,u), params{j}, cache);
+            score(g) = score(g) + scor;
+        end
+    end
+end
\ No newline at end of file