www.gusucode.com > 人脸相似匹配源码程序 > 人脸相似匹配源码程序/FaceRec/ADABOOST_tr.m
function adaboost_model = ADABOOST_tr(tr_func_handle, te_func_handle, train_set, labels, no_of_hypothesis) % % ADABOOST TRAINING: A META-LEARNING ALGORITHM % adaboost_model = ADABOOST_tr(tr_func_handle,te_func_handle, % train_set,labels,no_of_hypothesis) % % 'tr_func_handle' and 'te_func_handle' are function handles for % training and testing of a weak learner, respectively. The weak learner % has to support the learning in weighted datasets. The prototypes % of these functions has to be as follows. % % model = train_func(train_set,sample_weights,labels) % train_set: a TxD-matrix where each row is a training sample in % a D dimensional feature space. % sample_weights: a Tx1 dimensional vector, the i-th entry % of which denotes the weight of the i-th sample. % labels: a Tx1 dimensional vector, the i-th entry of which % is the label of the i-th sample. % model: the output model of the training phase, which can % consists of parameters estimated. % % [L,hits,error_rate] = test_func(model,test_set,sample_weights,true_labels) % model: the output of train_func % test_set: a KxD dimensional matrix, each of whose row is a % testing sample in a D dimensional feature space. % sample_weights: a Dx1 dimensional vector, the i-th entry % of which denotes the weight of the i-th sample. % true_labels: a Dx1 dimensional vector, the i-th entry of which % is the label of the i-th sample. % L: a Dx1-array with the predicted labels of the samples. % hits: number of hits, calculated with the comparison of L and % true_labels. % error_rate: number of misses divided by the number of samples. % % % 'train_set' contains the samples for training and it is NxD matrix % where N is the number of samples and D is the dimension of the % feature space. 'labels' is an Nx1 matrix containing the class % labels of the samples. 'no_of_hypothesis' is the number of weak % learners to be used. % % The output 'adaboost_model' is a structure with the fields % - 'weights': 1x'no_of_hypothesis' matrix specifying the weights % of the resulted weighted majority voting combination % - 'parameters': 1x'no_of_hypothesis' structure matrix specifying % the special parameters of the hypothesis that is % created at the corresponding iteration of % learning algorithm % % Specific Properties That Must Be Satisfied by The Function pointed % by 'func_handle' % ------------------------------------------------------------------ adaboost_model = struct('weights',zeros(1,no_of_hypothesis),... 'parameters',[]); %cell(1,no_of_hypothesis)); sample_n = size(train_set,1); samples_weight = ones(sample_n,1)/sample_n; for turn=1:no_of_hypothesis adaboost_model.parameters{turn} = tr_func_handle(train_set,samples_weight,labels); [L,hits,error_rate] = te_func_handle(adaboost_model.parameters{turn},... train_set,samples_weight,labels); if(error_rate==1) error_rate=1-eps; elseif(error_rate==0) error_rate=eps; end % The weight of the turn-th weak classifier adaboost_model.weights(turn) = log10((1-error_rate)/error_rate); C=likelihood2class(L); t_labeled=(C==labels); % true labeled samples % Importance of the true classified samples is decreased for the next weak classifier samples_weight(t_labeled) = samples_weight(t_labeled)*... ((error_rate)/(1-error_rate)); % Normalization samples_weight = samples_weight/sum(samples_weight); end % Normalization adaboost_model.weights=adaboost_model.weights/sum(adaboost_model.weights);