view core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM_windows.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line source
function [out, stats] = write_mat_results_ISMIR13RBM_windows(dirin,fileout)
% combine the test results from the directories supplied,
% and recombine the bins to a coherent dataset

% folders_win1 = {'130507_svm_disttest_subsconv_rbm_largegrid_21_r2385','130507_svm_disttest_subsconv_rbm_largegrid_22_r2385','130507_svm_disttest_subsconv_rbm_largegrid_23_r2385','130507_svm_disttest_subsconv_rbm_largegrid_24_r2385','130508_svm_disttest_subsconv_rbm_largegrid_25_r2391'};
% folders_win2 = {'130511_svm_disttest_subsconv_rbm_largegrid_21_r2391','130511_svm_disttest_subsconv_rbm_largegrid_22_r2391','130511_svm_disttest_subsconv_rbm_largegrid_23_r2391','130511_svm_disttest_subsconv_rbm_largegrid_24_r2391','130513_svm_disttest_subsconv_rbm_largegrid_25_r2391'};
%folders = {folders_win1{:}, folders_win2{:}};

features = [];
show = 1;

if nargin == 0
    dirin{1} = './';
end

global comparison;
global comparison_ids;
     
newout = [];
thisdir = pwd;
% loop through al lthe result directories and 
for diri = 1:numel(dirin)

    % ---
    % go to directory and locate file
    % ---
    cd(dirin{diri});

    u = dir();
    u = {u.name};
    [idx, strpos] = substrcellfind(u, '_finalresults.mat', 1);
    
    if numel(idx) < 1
        error 'This directory contains no valid test data';
    end
    
    % just one or more tests in this folder?
    if exist('file','var') && isnumeric(file)
        cprint(1, 'loading one result file');
        file = u{idx(file)};
        data = load(file);
        sappend(out,data.out);
    else
        for filei = 1:numel(idx)
            cprint(1, 'loading result file %i of %i',filei, numel(idx));
            file = u{idx(filei)};
            data = load(file);
            newout = sappend(newout,data.out);
        end
    end
    % reset act directory
    cd(thisdir);
end

% ---
% filter C values!
% ---
allcs = zeros(numel(newout),1);
for i=1:numel(newout)
    allcs(i) = newout(i).trainparams.C;
end
valididx = find(allcs == 1); % select C!
newout = newout(valididx);

% ---
% filter according to training parameter deltafun_params(windows)
% ---
wind = cell(numel(newout),1);
for i=1:numel(newout)
    wind{i} = cell2str(newout(i).trainparams.deltafun_params);
end
windu = unique(wind);

% save the combined out
newout2 = newout;

% do the loop as in write_mat_results_ISMIR13RBM
for wi=1:numel(windu)
    newout = newout2(strcellfind(wind, windu{wi},1));
    
    % bundle all datasets
    fout = sameparamsubset(newout, 'dataset','');
    out = [];
    for ci=1:numel(fout)
        filteredout = fout{ci};

        ok_test = zeros(2, numel(filteredout));
        ok_train =  zeros(2, numel(filteredout));
        ok_config = [];


        tmpout = filteredout(1);
        % cycle over all test sets and get new means
        for i=1:numel(filteredout)
            ok_test(:,i) = filteredout(i).mean_ok_test;
            ok_train(:,i) = filteredout(i).mean_ok_train;
        end

        % save the stuff
        tmpout.mean_ok_test = mean(ok_test,2);
        tmpout.var_ok_test = var(ok_test,0,2);
        tmpout.mean_ok_train = mean(ok_train,2);
        tmpout.var_ok_train = var(ok_train,0,2);

        tmpout.ok_test = ok_test;
        tmpout.ok_train = ok_train;

        % put it in output structure
        out = sappend(out,tmpout);
    end

%     % ---
%     % show results
%     % ---
%     if numel([out.mean_ok_test]) > 1 && show
% 
%         % plot means  % plot std = sqrt(var) % plot training results
%         figure;
%         boxplot([out.mean_ok_test], sqrt([out.var_ok_test]), [out.mean_ok_train]);
%         title (sprintf('Performance for all configs'));
%     end

    % --- 
    % write max. test/train success
    % ---
    mean_ok_train = [out.mean_ok_train];
    [val, idx] = max(mean_ok_train(1,:));
    if show
        fprintf(' --- Maximal train set success for %s: nr. %d, %3.2f percent, test result %3.2f percent. --- \n', windu{wi}, idx, val * 100,out(idx).mean_ok_test(1,:)*100)
    end

end

end

function [out, param_hash,idx] = sameparamsubset(in, ignoret,ignoref)
    % ---
    % build index of all existing configurations
    % ---
    param_hash = cell(numel(in),1);
    for i=1:numel(in)
        params = struct('trainparams',in(i).trainparams, ...
                        'fparams',in(i).fparams);

        % remove the dataset param
        if ~isempty(ignoret)
            params.trainparams = rmfield(params.trainparams,ignoret);
        end
        if ~isempty(ignoref)
            params.fparams = rmfield(params.fparams,ignoref);
        end

        phash = hash(xml_format(params),'md5');          
        param_hash{i} = phash;
    end

    % ---
    %  recombine the data for different datasets!
    % ---
    cvals = unique(param_hash);

    out = {};
    for ci=1:numel(cvals)
        idx{ci} = strcellfind(param_hash,cvals(ci),1);
        out{ci} = in(idx{ci});
    end

end

function boxplot(mean, std, train);

    bar([train; mean]', 1.5);
    hold on;
    errorbar(1:size(mean,2), mean(1,:), std(1,:),'.');
%     plot(train,'rO');
    colormap(spring);
    axis([0 size(mean,2)+1 max(0, min(min([train mean] - 0.1))) max(max([train mean] + 0.1))]);
end