Mercurial > hg > camir-aes2014
comparison toolboxes/FullBNT-1.0.7/KPMstats/fit_partitioned_model.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e9a9cd732c1e |
---|---|
1 function [model, partition_size] = fit_partitioned_model(... | |
2 inputs, outputs, selectors, sel_sizes, min_size, partition_names, fn_name, varargin) | |
3 %function [models, partition_sizes] = fit_partitioned_model(... | |
4 % inputs, outputs, selectors, sel_sizes, min_size, partition_names, fn_name, varargin) | |
5 % | |
6 % Fit models to different subsets (columns) of the input/output data, | |
7 % as chosen by the selectors matrix. If there is only output data, set input=[]. | |
8 % If there is less than min_size data in partition i, | |
9 % we set model{i} = [] | |
10 % | |
11 % Example: | |
12 % selectors = [1 2 1 1 1 | |
13 % 1 2 2 1 2] | |
14 % sel_sizes = [2 2] so there are 4 models: (1,1), (2,1), (1,2), (2,2) | |
15 % We fit model{1} to data from columns 1,4 | |
16 % We fit model{2} to no data | |
17 % We fit model{3} to data from column 3,5 | |
18 % We fit model{4} to data from column 2 (assuming min_size <= 1) | |
19 % | |
20 % For each partition, we call the specified function with the specified arguments | |
21 % as follows: | |
22 % model{i} = fn(input(:,cols{i}), output(:,cols{i}), args) | |
23 % (We omit input if []) | |
24 % partition_size(i) is the amount of data in the i'th partition. | |
25 % | |
26 % Example use: row 1 of selectors is whether an object is present/absent | |
27 % and row 2 is the location. | |
28 % | |
29 % Demo: | |
30 % inputs = 1:5; outputs = 6:10; selectors = as above | |
31 % fn = 'fit_partitioned_model_testfn'; | |
32 % [model, partition_size] = fit_partitioned_model(inputs, outputs, selectors, [2 2], fn) | |
33 % should produce | |
34 % model{1}.input = [1 4], model{1}.output = [6 9] | |
35 % model{2} = [] | |
36 % model{3}.input = [3 5], model{3}.output = [8 10], | |
37 % model{4}.input = [2], model{3}.output = [7], | |
38 % partition_size = [2 0 2 1] | |
39 | |
40 | |
41 sel_ndx = subv2ind(sel_sizes, selectors'); | |
42 Nmodels = prod(sel_sizes); | |
43 model = cell(1, Nmodels); | |
44 partition_size = zeros(1, Nmodels); | |
45 for m=1:Nmodels | |
46 ndx = find(sel_ndx==m); | |
47 partition_size(m) = length(ndx); | |
48 if ~isempty(partition_names) % & (partition_size(m) < min_size) | |
49 fprintf('partition %s has size %d, min size = %d\n', ... | |
50 partition_names{m}, partition_size(m), min_size); | |
51 end | |
52 if partition_size(m) >= min_size | |
53 if isempty(inputs) | |
54 model{m} = feval(fn_name, outputs(:, ndx), varargin{:}); | |
55 else | |
56 model{m} = feval(fn_name, inputs(:,ndx), outputs(:, ndx), varargin{:}); | |
57 end | |
58 end | |
59 end |