www.pudn.com > adaboost.rar > SingleWeakLearner.m
function [H]=SingleWeakLearner(X,Y,C,W)
% Train a weak classifier wrt ONE feature given in C
% Use 2-class Gaussian model:
%
% Input
% X - samples
% Y - label of samples -
% 1 - belong to the class,0 - otherwise
% C - feature vector
% W - distribution over examples
%
% Output:
% H - result classifier,contains the following parameters:
% Mu=H{1};
% Mu(1),Mu(2)-means of the 2 classes
% InvSigma=H{2}
% InvSigma(1),InvSigma(2)- inverse of matrix of std. deviations of
% the 2 classes
%
%
DEBUG =1;
H={};
% Fit 2 Gaussians to positive and negative examples
% Find the best mu,sigma for the selected model
N=size(X,1);
% Note: N==size(Y,1)
pn=size(X,2);
for i=1:N
VV(i,:)=X(i,:).*C;
end;
%compute projection on the feature vector
V = X * C'
%figure(97);imagesc(C);colormap(gray);title('Feature vector');
%figure(98);imagesc(X);colormap(gray);title('Samples');
%figure(99);imagesc(V);colormap(gray);title('Frojected sampples');
%find mean
Mu=V.*W
W_p=sum(W(find(Y==1)))
W_n=sum(W(find(Y==0)))
Mu(find(Y==0))
Mu_p=mean(Mu(find(Y==1)))/W_p
Mu_n=mean(Mu(find(Y==0)))/W_n
Sigma_p=mean((V(Y==1)-Mu_p)'*(V(Y==1)-Mu_p)*W(find(Y==1)))/W_p
Sigma_n=mean((V(Y==0)-Mu_n)'*(V(Y==0)-Mu_n)*W(find(Y==0)))/W_n
pause
%figure(299);imagesc(Mu_p);colormap(gray);title('Mean of target class');
%figure(300);imagesc(Mu_n);colormap(gray);title('Mean of distractor class');
%pause
%figure(199);imagesc(Sigma_p);colormap(gray);
%figure(200);imagesc(Sigma_n);colormap(gray);
InvSigma_p=pinv(Sigma_p);
InvSigma_n=pinv(Sigma_n);
H{1}={Mu_p,Mu_n};
H{2}={InvSigma_p,InvSigma_n};
%H{3}=[Sigma_p,Sigma_n];
if DEBUG
%this is for test -REMOVE
[error,Result]=WeakClassifyBatch(X,Y,H,W);
figure(101);imagesc(Result);colormap(gray);title('classification of training set after learning');
Result
error
Mu_p
Mu_n
InvSigma_p
InvSigma_n
end;