f@2: function [results] = perform_classification(experiment, db, condition) f@2: f@2: db = svm_calc_kernel(db,'gaussian','square',1:8:size(db.features,2)); f@4: f@2: f@2: optt.kernel_type = 'gaussian'; f@2: optt.C = 2.^[0:4:8]; f@2: optt.gamma = 2.^[-16:4:-8]; f@2: optt.search_depth = 3; f@4: f@4: % This causes the accuracy to be lower than it could! f@4: switch(experiment) f@4: case('time_scat_l3') f@4: optt.full_test_kernel = 0; f@4: otherwise f@4: optt.full_test_kernel = 1; f@4: end f@4: f@4: % f@2: f@2: if nargin < 3 f@2: condition = cellstr(['none '; 'fault']); f@4: else f@4: condition = cellstr(condition); f@2: end f@2: f@2: for ii=1:length(condition) f@2: f@2: [train_set,test_set] = createFolds(condition{ii}); f@2: train_set = find(train_set)'; f@2: test_set = find(test_set)'; f@2: f@2: % Only consider excerpts that are in src struct f@2: f@2: elems = length(db.src.objects); f@2: ids = zeros(elems, 1); f@2: for jj=1:elems f@2: ids(jj) = db.src.objects(jj).ind; f@2: end f@2: f@2: train_set = intersect(train_set, ids); f@2: test_set = intersect(test_set, ids); f@2: f@2: % f@2: f@2: [dev_err_grid,C_grid,gamma_grid] = ... f@2: svm_adaptive_param_search(db,train_set,[],optt); f@2: f@2: [dev_err,ind] = min(mean(dev_err_grid{end},2)); f@2: C = C_grid{end}(ind); f@2: gamma = gamma_grid{end}(ind); f@2: f@2: optt1 = optt; f@2: optt1.C = C; f@2: optt1.gamma = gamma; f@2: f@2: model = svm_train(db,train_set,optt1); f@2: labels = svm_test(db,model,test_set); f@2: err = classif_err(labels,test_set,db.src); f@2: f@2: % dummy renaming of variables f@2: id = test_set; f@2: true_label = kron((1:10), ones(1, 100)); f@2: true_label = true_label(test_set)'; f@2: pred_label = labels'; f@2: f@2: % saving results in struct f@2: results.(condition{ii}).err = err; f@2: results.(condition{ii}).labels = labels; f@2: results.(condition{ii}).dev_err = dev_err; f@2: results.(condition{ii}).C = C; f@2: results.(condition{ii}).gamma = gamma; f@2: results.(condition{ii}).tab = table(id, true_label, pred_label); f@2: f@2: end f@2: f@2: end