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);