1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
load database % contient mes image et leurs label
[g, gn] = grp2idx(etat); % Nominal class to numeric
trainIdx=[true;false;true;true;false;true;false;false;false;true;%10
true;false;true;true;false;true;true;true;false;true;%20
true;true;false;true;false;true;true;true;true;false;%30
false;true;true;true;false;true;false;true;true;true;%40
true;false;false;true;true;true;true;false;false;true;%50
true;true;false;false;false;true;false;false;true;true;%60
false;true;false;true; false;true;true;true;true;false;%70
true;true;false;true;false;true;false;true;true;false;%80
true;true;false;true;true;false;true;false;true;true;%90
true;true;false;true;true;false;true;true;false;true;%100
false;true;true;true;false;true;false;true;true;false;%110
true;true;true;false;true;true;false;true;false;true;%120
true;false;true;true;true;false;true;true;false;true;%130
true;false;true;false;true;true;false;true;true;false;%140
true;false;true;true;false;true;true;true;false;false;%150
true;true;false;true;true;false;true;true;true;false;%160
true;false;true;true;false;true;true;true;true;false;%170
true;false;true;true;false;true;false;true;true;true;%180
true;false;false;true;true;true;true;false;false;true;%190
true;false;true;true;true;true;false;true;false;true;%200
false;false;true;true;true;true;false;false;true;true;true;false;true];
testIdx=[false;true;false;false;true;false;true;true;true;false;%10
false;true;false;false;true;false;false;false;true;false;%20
false;false;true;false;true;false;false;false;false;true;%30
true;false;false;false;true;false;true;false;false;false;%40
false;true;true;false;false;false;false;true;true;false;%50
false;false;true;true;true;false;true;true;false;false;%60
true;false;true;false; true;false;false;false;false;true;%70
false;false;true;false;true;false;true;false;false;true;%80
false;false;true;false;false;true;false;true;false;false;%90
false;false;true;false;false;true;false;false;true;false;%100
true;false;false;false;true;false;true;false;false;true;%110
false;false;false;true;false;false;true;false;true;false;%120
false;true;false;false;false;true;false;false;true;false;%130
false;true;false;true;false;false;true;false;false;true;%140
false;true;false;false;true;false;false;false;true;true;%150
false;false;true;false;false;true;false;false;false;true;%160
false;true;false;false;true;false;false;false;false;true;%170
false;true;false;false;true;false;true;false;false;false;%180
false;true;true;false;false;false;false;true;true;false;%190
false;true;false;false;false;false;true;false;true;false;%200
true;true;false;false;false;false;true;true;false;false;false;true;false];
% Split training and testing sets
pairwise = nchoosek(1:length(gn),2); % 1-vs-1 pairwise models
svmModel = cell(size(pairwise,1),1); % Store binary-classifers
%predTest = zeros(sum(testIdx),numel(svmModel)); % Store binary predictions
%# classify using one-against-one approach, SVM with 3rd degree poly kernel
for k=1:numel(svmModel)
%# get only training instances belonging to this pair
idx = trainIdx & any( bsxfun(@eq, g, pairwise(k,:)) , 2 );
%# train
svmModel{k} = svmtrain(in(idx,:), g(idx),'kernel_function','rbf','rbf_sigma',500 );
%# test
predTest(:,k) = svmclassify(svmModel{k}, in(testIdx,:));
end
pred = mode(predTest,2); % Voting: clasify as the class receiving most votes
%# performance
cmat = confusionmat(g(testIdx),pred);
acc = 100*sum(diag(cmat))./sum(cmat(:));
fprintf('SVM (1-against-1):\naccuracy = %.2f%%\n', acc);
fprintf('Confusion Matrix:\n'), disp(cmat) |
Partager