annotate toolboxes/FullBNT-1.0.7/bnt/general/mk_mutilated_samples.m @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1 function [data, clamped] = mk_mutilated_samples(bnet, ncases, max_clamp, usecell)
Daniel@0 2 % GEN_MUTILATED_SAMPLES Do random interventions and then draw random samples
Daniel@0 3 % [data, clamped] = gen_mutilated_samples(bnet, ncases, max_clamp, usecell)
Daniel@0 4 %
Daniel@0 5 % At each step, we pick a random subset of size 0 .. max_clamp, and
Daniel@0 6 % clamp these nodes to random values.
Daniel@0 7 %
Daniel@0 8 % data(i,m) is the value of node i in case m.
Daniel@0 9 % clamped(i,m) = 1 if node i in case m was set by intervention.
Daniel@0 10
Daniel@0 11 if nargin < 4, usecell = 1; end
Daniel@0 12
Daniel@0 13 ns = bnet.node_sizes;
Daniel@0 14 n = length(bnet.dag);
Daniel@0 15 if usecell
Daniel@0 16 data = cell(n, ncases);
Daniel@0 17 else
Daniel@0 18 data = zeros(n, ncases);
Daniel@0 19 end
Daniel@0 20 clamped = zeros(n, ncases);
Daniel@0 21
Daniel@0 22 csubsets = subsets(1:n, max_clamp, 0); % includes the empty set
Daniel@0 23 distrib_cset = normalise(ones(1, length(csubsets)));
Daniel@0 24
Daniel@0 25 for m=1:ncases
Daniel@0 26 cset = csubsets{sample_discrete(distrib_cset)};
Daniel@0 27 nvals = prod(ns(cset));
Daniel@0 28 distrib_cvals = normalise(ones(1, nvals));
Daniel@0 29 cvals = ind2subv(ns(cset), sample_discrete(distrib_cvals));
Daniel@0 30 mutilated_bnet = do_intervention(bnet, cset, cvals);
Daniel@0 31 ev = sample_bnet(mutilated_bnet);
Daniel@0 32 if usecell
Daniel@0 33 data(:,m) = ev;
Daniel@0 34 else
Daniel@0 35 data(:,m) = cell2num(ev);
Daniel@0 36 end
Daniel@0 37 clamped(cset,m) = 1;
Daniel@0 38 end