www.gusucode.com > 人脸相似匹配源码程序 > 人脸相似匹配源码程序/FaceRec/multiAdaboostTrain.m
function multiAdaboostStruct = multiAdaboostTrain(TrainData, nSampPerClass,nClass) %function multiAdaboostStruct = multiAdaboostTrain(TrainData, nSampPerClass) % 采用1对1投票策略将 Adaboost 推广至多类问题的训练过程,将多类Adaboost训练结果保存至multiAdaboostStruct中 % % 输入:--TrainData:每行是一个样本人脸 % --nClass:人数,即类别数 % --nSampPerClass:nClass*1维的向量,记录每类的样本数目,如 nSampPerClass(iClass) % 给出了第iClass类的样本数目 % % 输出:--multiAdaboostStruct:一个包含多类Adaboost训练结果的结构体 %开始训练,需要计算每两类间的分类超平面,共(nClass-1)*nClass/2个 for ii=1:(nClass-1) for jj=(ii+1):nClass clear X; clear Y; startPosII = sum( nSampPerClass(1:ii-1) ) + 1; endPosII = startPosII + nSampPerClass(ii) - 1; X(1:nSampPerClass(ii), :) = TrainData(startPosII:endPosII, :); startPosJJ = sum( nSampPerClass(1:jj-1) ) + 1; endPosJJ = startPosJJ + nSampPerClass(jj) - 1; X(nSampPerClass(ii)+1:nSampPerClass(ii)+nSampPerClass(jj), :) = TrainData(startPosJJ:endPosJJ, :); % 设定两两分类时的类标签 Y = ones(nSampPerClass(ii) + nSampPerClass(jj), 1)+1; Y(nSampPerClass(ii)+1:nSampPerClass(ii)+nSampPerClass(jj)) = 1; % 第ii个人和第jj个人两两分类时的分类器结构信息 AdaboostStruct{ii}{jj}=ADABOOST_tr(@threshold_tr,@threshold_te, X, Y, 20);%进行20次迭代 end end % 已学得的分类结果 multiAdaboostStruct.AdaboostStruct = AdaboostStruct; multiAdaboostStruct.nClass = nClass;