annotate reeval/classification/perform_classification.m @ 2:b1cd83874633

Major structural revision. Modular organization of functionalities
author Francisco Rodriguez Algarra <f.rodriguezalgarra@qmul.ac.uk>
date Wed, 28 Oct 2015 16:15:47 +0000
parents
children a1f6a08f624c
rev   line source
f@2 1 function [results] = perform_classification(experiment, db, condition)
f@2 2
f@2 3 db = svm_calc_kernel(db,'gaussian','square',1:8:size(db.features,2));
f@2 4
f@2 5 optt.kernel_type = 'gaussian';
f@2 6 optt.C = 2.^[0:4:8];
f@2 7 optt.gamma = 2.^[-16:4:-8];
f@2 8 optt.search_depth = 3;
f@2 9 optt.full_test_kernel = 1;
f@2 10
f@2 11 if nargin < 3
f@2 12 condition = cellstr(['none '; 'fault']);
f@2 13 end
f@2 14
f@2 15 for ii=1:length(condition)
f@2 16
f@2 17 [train_set,test_set] = createFolds(condition{ii});
f@2 18 train_set = find(train_set)';
f@2 19 test_set = find(test_set)';
f@2 20
f@2 21 % Only consider excerpts that are in src struct
f@2 22
f@2 23 elems = length(db.src.objects);
f@2 24 ids = zeros(elems, 1);
f@2 25 for jj=1:elems
f@2 26 ids(jj) = db.src.objects(jj).ind;
f@2 27 end
f@2 28
f@2 29 train_set = intersect(train_set, ids);
f@2 30 test_set = intersect(test_set, ids);
f@2 31
f@2 32 %
f@2 33
f@2 34 [dev_err_grid,C_grid,gamma_grid] = ...
f@2 35 svm_adaptive_param_search(db,train_set,[],optt);
f@2 36
f@2 37 [dev_err,ind] = min(mean(dev_err_grid{end},2));
f@2 38 C = C_grid{end}(ind);
f@2 39 gamma = gamma_grid{end}(ind);
f@2 40
f@2 41 optt1 = optt;
f@2 42 optt1.C = C;
f@2 43 optt1.gamma = gamma;
f@2 44
f@2 45 model = svm_train(db,train_set,optt1);
f@2 46 labels = svm_test(db,model,test_set);
f@2 47 err = classif_err(labels,test_set,db.src);
f@2 48
f@2 49 % dummy renaming of variables
f@2 50 id = test_set;
f@2 51 true_label = kron((1:10), ones(1, 100));
f@2 52 true_label = true_label(test_set)';
f@2 53 pred_label = labels';
f@2 54
f@2 55 % saving results in struct
f@2 56 results.(condition{ii}).err = err;
f@2 57 results.(condition{ii}).labels = labels;
f@2 58 results.(condition{ii}).dev_err = dev_err;
f@2 59 results.(condition{ii}).C = C;
f@2 60 results.(condition{ii}).gamma = gamma;
f@2 61 results.(condition{ii}).tab = table(id, true_label, pred_label);
f@2 62
f@2 63 end
f@2 64
f@2 65 end