1 %> @brief REpeated Train-Test - Block Cube
3 %> If @ref
sgs is passes, it is used to guide splitting the dataset. Otherwise, it will be expected that the
4 %> reptt_sgs::data
property has at least two elements (the first will be used
for training and the other
for test).
7 %> SGS. If not supplied, the @ref data
property will be expected to
8 %> have at least two elements. Another option is to use obsidxs
15 %> =0. Whether to run in parallel mode!
19 properties(SetAccess=
protected)
25 o.classtitle = 'Block Cube';
31 methods(Access=protected)
33 function log = do_use(o, data)
35 o = o.boot_postpr(); % from
reptt
39 obsidxs_ = o.
sgs.get_obsidxs(data);
40 nds = size(obsidxs_, 1);
41 elseif ~isempty(o.obsidxs)
43 nds = size(obsidxs_, 1);
51 % o.no_datasets = nds;
53 log = log.allocate_logs(o.log_mold, o.block_mold, nds);
55 [ni, nj, nk, nl] = size(log.logs);
56 ntotal = nds*ni*nj*nk;
58 log.blocks = cell(ni, nj, nk);
69 % base decomposition of i
71 inext = floor((i-1)/nk)+1;
72 ij = mod(inext-1, nj)+1;
73 inext = floor((inext-1)/nj)+1;
74 ii = mod(inext-1, ni)+1;
75 inext = floor((inext-1)/ni)+1;
76 ids = mod(inext-1, nds)+1;
80 datasets = data.split_map(obsidxs_(ids, :));
88 if ~isempty(o.block_mold{ii, ij, ik})
90 bl = o.block_mold{ii, ij, ik}.boot();
91 bl = bl.train(datasets(1));
92 est = bl.use(datasets(2));
94 if ~isempty(o.postpr_est)
95 est = o.postpr_est.use(est);
98 if ~isempty(o.postpr_test)
99 ds_test = o.postpr_test.use(datasets(2));
101 ds_test = datasets(2);
104 pars = struct('est', {est},
'ds_test', {ds_test},
'clssr', {bl});
106 log.logs{ii, ij, ik, il} = log.logs{ii, ij, ik, il}.record(pars);
108 log.blocks{ii, ij, ik, ids} = bl; % records the trained
block
119 %||| Parallel version
124 v_logs = cell(1, nijk); %, nl);
131 % base decomposition of i
133 inext = floor((i-1)/nk)+1;
134 ij = mod(inext-1, nj)+1;
135 inext = floor((inext-1)/nj)+1;
136 ii = mod(inext-1, ni)+1;
140 datasets = data.split_map(obsidxs_(ids, :)); %#ok<PFBNS>
145 if ~isempty(o.block_mold{ii, ij, ik})
147 bl = o.block_mold{ii, ij, ik}.boot();
148 bl = bl.train(datasets(1));
149 est = bl.use(datasets(2));
151 if ~isempty(o.postpr_est)
152 est = o.postpr_est.use(est);
155 if ~isempty(o.postpr_test)
156 ds_test = o.postpr_test.use(datasets(2));
158 ds_test = datasets(2);
161 pars = struct('est', {est},
'ds_test', {ds_test},
'clssr', {bl});
164 v_logs{i}{il} = log.logs{ii, ij, ik, il}; %#ok<PFBNS>
166 v_logs{i}{il} = v_logs{i}{il}.record(pars);
168 v_blocks{i}{ids} = bl;
176 % base decomposition of i
178 inext = floor((i-1)/nk)+1;
179 ij = mod(inext-1, nj)+1;
180 inext = floor((inext-1)/nj)+1;
181 ii = mod(inext-1, ni)+1;
184 log.logs{ii, ij, ik, il} = v_logs{i}{il};
187 log.blocks{ii, ij, ik, ids} = v_blocks{i}{ids}; % records the trained
block
Base Sub-dataset Generation Specification (SGS) class.
function progress2_change(in prgrss, in title, in perc, in i, in n)
function parallel_close()
function progress2_open(in title, in perc, in i, in n)
Log generated by a reptt_blockcube.
function progress2_close(in prgrss)
function parallel_open(in no_labs)
REpeated Train-Test - Block Cube.