ovrpredictBot.m111
The code below is ovrpredictBot.m is given below. The changes from the original one is that mine save all the information in each class.
function [label_out, acc_out, decv_out] = ovrpredictBot(y, x, model)
labelSet = model.labelSet;
labelSetSize = length(labelSet);
models = model.models;
observationSize = size(y, 1);
% decv= zeros(observationSize, labelSetSize);
label_out = zeros(observationSize,labelSetSize);
decv_out = zeros(observationSize,labelSetSize);
acc_out = zeros(3,labelSetSize);
for i=1:labelSetSize
[label_out(:,i),acc_out(:,i),decv_out(:,i)] = svmpredict(double(y == labelSet(i)), x, models{i});
% Here we have to do some strange thing...
% IF models{i}.Label(1) == 1, the decv_out is stored as it is
% But if models{i}.Label(1) == 0, the decv_out is multiplied by -1 before
% stored.
% After doing this process the decision values are correct!!!
decv_out(:,i) = decv_out(:,i) * (2 * models{i}.Label(1) - 1);
end
% [tmp,pred] = max(decv, [], 2);
% pred = labelSet(pred);
% ac = sum(y==pred) / size(x, 1);
the original ovrpredict.m is given below.
function [pred, ac, decv] = ovrpredict(y, x, model)
labelSet = model.labelSet;
labelSetSize = length(labelSet);
models = model.models;
decv= zeros(size(y, 1), labelSetSize);
for i=1:labelSetSize
[l,a,d] = svmpredict(double(y == labelSet(i)), x, models{i});
decv(:, i) = d * (2 * models{i}.Label(1) - 1);
end
[tmp,pred] = max(decv, [], 2);
pred = labelSet(pred);
ac = sum(y==pred) / size(x, 1);