function [y,dfce] = adaclass(X,model)
% ADACLASS AdaBoost classifier.
%
% Synopsis:
% [y,dfce] = adaclass(X,model)
%
% Description:
% This function implements the AdaBoost classifier which
% its discriminant function is composed of a weighted sum
% of binary rules. It is assumed here that the binary rules
% respond with label 1 or 2 (not 1 and -1 as used in
% AdaBoost literature).
%
% Input:
% X [dim x num_data] Vectors to be classified.
% model [struct] AdaBoost classifier:
% .rule [cell 1 x T] Binary weak rules.
% .Alpha [1 x T] Weights of the weak rules.
% .fun = 'adaclass' (optinal).
%
% Output:
% y [1 x num_data] Predicted labels.
% dfce [1 x num_data] Values of weighted sum of
% weak rules; y(i) = 1 if dfce(i) >= 0 and
% y(i) = 2 if dfce(i) < 0.
%
% Example:
% trn_data = load('riply_trn');
% tst_data = load('riply_tst');
% options.learner = 'weaklearner';
% options.max_rules = 50;
% options.verb = 1;
% model = adaboost(trn_data, options);
% ypred1 = adaclass(trn_data.X,model);
% ypred2 = adaclass(tst_data.X,model);
% trn_err = cerror(ypred1,trn_data.y)
% tst_err = cerror(ypred2,tst_data.y)
%
% See also:
% ADABOOST, WEAKLEARNER.
%
% About: Statistical Pattern Recognition Toolbox
% (C) 1999-2004, Written by Vojtech Franc and Vaclav Hlavac
% <a href="http://www.cvut.cz">Czech Technical University Prague</a>
% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a>
% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a>
% Modifications:
% 25-aug-2004, VF
% 11-aug-2004, VF
dfce = [];
for i=1:length(model.rule),
curr_y = feval(model.rule{i}.fun,X,model.rule{i});
curr_y = 3-2*curr_y;
if isempty(dfce),
dfce = curr_y*model.Alpha(i);
else
dfce = dfce + curr_y*model.Alpha(i);
end
end
y = zeros(size(dfce));
y(find(dfce>=0)) = 1;
y(find(dfce<0)) = 2;
return;