33 lines
762 B
Matlab
Executable File
33 lines
762 B
Matlab
Executable File
function model = adaboostBin(X, t)
|
|
% Adaboost for binary classification (weak learner: kmeans)
|
|
% Input:
|
|
% X: d x n data matrix
|
|
% t: 1 x n label (0/1)
|
|
% Output:
|
|
% model: trained model structure
|
|
% Written by Mo Chen (sth4nth@gmail.com).
|
|
t = t+1;
|
|
k = 2;
|
|
[d,n] = size(X);
|
|
w = ones(1,n)/n;
|
|
M = 100;
|
|
Alpha = zeros(1,M);
|
|
Theta = zeros(d,k,M);
|
|
T = sparse(1:n,t,1,n,k,n); % transform label into indicator matrix
|
|
for m = 1:M
|
|
% weak learner
|
|
E = spdiags(w',0,n,n)*T;
|
|
E = E*spdiags(1./sum(E,1)',0,k,k);
|
|
c = X*E;
|
|
[~,y] = min(sqdist(c,X),[],1);
|
|
Theta(:,:,m) = c;
|
|
% adaboost
|
|
I = y~=t;
|
|
e = dot(w,I);
|
|
alpha = log((1-e)/e);
|
|
w = w.*exp(alpha*I);
|
|
w = w/sum(w);
|
|
Alpha(m) = alpha;
|
|
end
|
|
model.alpha = Alpha;
|
|
model.theta = Theta; |