IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
demo_deciders_and_grags.m
Go to the documentation of this file.
1 %>@brief Different ways to use per-spectrum prediction aggregation (grag), and decision thresholds (decider)
2 %>@ingroup demo
3 %>@file
4 %>
5 %> Generates 4 situations: 2 datasets x 2 analyses
6 %>
7 %> <h3>Datasets (she5trays.mat)</h3>
8 %> <ol>
9 %> <li>Chemicals (class level 1)</li>
10 %> <li>Non-transformed/transformed (class level 2)</li>
11 %> </ol>
12 %>
13 %> <h3>Analyses</h3>
14 %> <ol>
15 %> <li>Classifier output is post-processed through <b>decider -> grag_classes_vote</b></li>
16 %> <li>Classifier output is post-processed through <b>grag_classes_mean -> decider</b></li>
17 %> </ol>
18 %> In the first case, the decider selects which spectra will be allowed to vote, whereas
19 %> in the second case, the posterior probabilities (supports) per spectrum are averaged before the decider accepts or rejects a single per-group prediction.
20 %>
22 ds = load_data_she5trays();
23 
24 u = decider();
25 u.decisionthreshold = 0;
26 decider01 = u;
27 
28 u = grag_mean();
29 grag_mean01 = u;
30 
31 u = grag_classes_vote();
32 grag_classes_vote01 = u;
33 
34 u = clssr_d();
35 u.type = 'linear';
36 u.flag_use_priors = 0;
37 clssr_d01 = u;
38 
39 % Classifier+post-processor for first analysis
40 u = block_cascade();
41 u.blocks = {clssr_d01, decider01, grag_classes_vote01};
42 block_cascade01 = u;
43 
44 % Classifier+post-processor for second analysis
45 u = block_cascade();
46 u.blocks = {clssr_d01, grag_mean01, decider01};
47 block_cascade02 = u;
48 
49 
50 u = sgs_crossval();
51 u.flag_group = 1;
52 u.flag_perclass = 0;
53 u.randomseed = 42424;
54 u.flag_loo = 0;
55 u.no_reps = 10;
56 sgs_crossval01 = u;
57 
58 
59 u = gridsearch();
60 u.sgs = sgs_crossval01;
61 u.chooser = [];
62 u.postpr_test = grag_mean01;
63 u.postpr_est = [];
64 u.no_refinements = 1;
65 u.maxmoves = 1;
66 
67 gridsearch01 = u;
68 
69 
70 for i_data = 1:2
71  for i_ana = 1:2
72  % Select class level
73  u = cascade_stdhie();
74  u.blocks{2}.hierarchy = i_data;
75  cascade_stdhie01 = u;
76  cascade_stdhie01 = cascade_stdhie01.boot();
77  out = cascade_stdhie01.use(ds);
78  ds_stdhie01 = out;
79 
80  % Logs
81  tt = ttlogprovider();
82  logs = tt.get_ttlogs(ds_stdhie01);
83  lo = estlog_rightwrong();
84  lo.estlabels = ds_stdhie01.classlabels;
85  lo.idx_rate = 1; % Rejected
86  lo.title = 'rejected';
87  logs{end+1} = lo;
88 
89 
90  % Calculation;
91  gridsearch01.clssr = iif(i_ana == 1, block_cascade01, block_cascade02);
92  gridsearch01.paramspecs = {sprintf('blocks{%d}.decisionthreshold', iif(i_ana == 1, 2, 3)), 0:.05:.95, 0}; % 2 or 3 is the position of the decider in the sequence inside the block_cascade
93  gridsearch01.log_mold = logs;
94  out = gridsearch01.use(ds_stdhie01);
95  log_gridsearch_gridsearch01 = out;
96 
97 
98  % Visualization
99  out = log_gridsearch_gridsearch01.extract_sovaluess();
100  sov = out{1};
101 
102 
104  u.dimspec = {[0 0], [1 2]};
105  u.valuesfieldname = 'rates';
106  blbl_extract_ds_from_sovalues01 = u;
107  out = blbl_extract_ds_from_sovalues01.use(sov);
108  sov_sovalues01 = out;
109 
111  u.dimspec = {[0 0], [1 2]};
112  u.valuesfieldname = 'rejected';
113  blbl_extract_ds_from_sovalues02 = u;
114  out = blbl_extract_ds_from_sovalues02.use(sov);
115  sov_sovalues02 = out;
116 
117  u = vis_hachures();
118  vis_hachures01 = u;
119 
120  figure();
121 
122  subplot(2, 1, 1);
123  vis_hachures01.use(sov_sovalues01);
124  title(sprintf('Classes (%d): %s; Post-processor: %s --- (decision threshold) x (%%rate)', ds_stdhie01.nc, ...
125  iif(i_data == 1, 'Chemicals', 'N/T'), replace_underscores([class(gridsearch01.clssr.blocks{2}), '->', class(gridsearch01.clssr.blocks{3})])));
126  legend off;
127  xlabel('');
128 
129  subplot(2, 1, 2);
130  vis_hachures01.use(sov_sovalues02);
131  ylabel('Rejected (%)');
132  title('(decision threshold) x (%rejected)');
133  legend off;
134 
135  maximize_window();
136  save_as_png([], sprintf('irr_dataset%02d_analysis%02d', i_data, i_ana));
137  end;
138 end;
139 
Cascade block: final instantializable class.
Definition: block_cascade.m:4
Group Aggregator - Classes - Vote.
Linear and Quadratic discriminant.
Definition: clssr_d.m:9
K-Fold Cross-Validation.
Definition: sgs_crossval.m:6
function maximize_window(in h, in aspectratio, in normalizedsize)
Block that resolves estimato posterior probabilities into classes.
Definition: decider.m:10
function use(in o, in data)
Applies block to data.
Hachures showing intervals.
Definition: vis_hachures.m:2
Group Aggregator - combines data rows outputting one row per group.
Definition: grag.m:5
Records (1)x([rejected, right, wrong]) hits.
function save_as_png(in h, in fn, in dpi)
Group Aggregator - averages rows per group.
Definition: grag_mean.m:5
function iif(in cond, in x1, in x2)
function replace_underscores(in s)
Extracts dataset from sovalues.
Demo cascade block: pre_norm_std -> blmisc_classlabels_hierarchy.
Definition: cascade_stdhie.m:5
function load_data_she5trays()
Grid Search.
Definition: gridsearch.m:20