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
|