弱分类器的最优阈值(Theta)和不等式方向(P)



求解某一haar特征值所对应弱分类器的最优阈值(Theta)、不等式方向(P)和最小权重误差(E)

function [Theta P E] = AdaBoost_Theta_P(F, y, w, r, m)
% 求解某一haar特征值所对应弱分类器的最优阈值(Theta)、不等式方向(P)和最小权重误差(E)
% F:haar特征值
% w:人脸样本和非人脸样本的权重
% r:人脸样本的个数
% m:非人脸样本得到个数
% Theta:弱分类器的最优阈值
% P:人脸判据不等式方向
% E:最小权重误差
 
[f Ix] = sort(F); % 对特征值进行升序排列
yf = y(Ix); % 依据特征值的排序对样本标识进行对应排序
wf = w(Ix); % 依据特征值的排序对样本权重进行对应排序

Tf = sum(w(1:r)); % 全部人脸样本的权重和T+
Tnf = sum(w(r+1:r+m)); % 全部非人脸样本的权重和T-
ABE = zeros(r+m,3); % 人脸非人脸分类误差初始化
for i = 1:r+m
    Indice_r = find(yf(1:i)==1); % 查找人脸样本的位置
    Indice_m = find(yf(1:i)==0); % 查找非人脸样本的位置
    if isempty(Indice_r)
        Sf = 0;
    else
        Sf = sum(wf(Indice_r)); % 在此元素之前的人脸样本的权重和S+
    end
    if isempty(Indice_m)
        Snf = 0;
    else
        Snf = sum(wf(Indice_m)); % 在此元素之前的非人脸样本的权重和S-
    end
    A = Sf + (Tnf - Snf); % 人脸分类误差
    B = Snf + (Tf - Sf); % 非人脸分类误差
    E = min(A,B);
    ABE(i,:) = [A B E];
end

[E Ie] = min(ABE(:,3)); % 查找最小的分类误差
Theta = f(Ie); % 最优阈值
A = ABE(Ie,1);
B = ABE(Ie,2);
if A < B
    P = -1; % 不等式方向为-1
else
    P = 1; % 不等式方向为1
end


你可能感兴趣的:(弱分类器的最优阈值(Theta)和不等式方向(P))