function [classes, B_t, e_t] = k_adaboost_training(patterns, targets, depth, T) P = patterns; nData = length(P); fraction = round(nData/2); D_t = (1/nData)*ones(1,nData); for t = 1:T %Select training subset, make tree inds = sample_discrete(D_t, 1, fraction); train_patterns = P(inds,:); train_targets = targets(inds); [test_labels, train_labels, error, tree_t] = k_make_tree_n_test(train_patterns, train_targets, P, targets, depth); %Store results classes{ t } = tree_t; e_t(t) = error(:,1)+eps; B_t(t) = (error(:,1)+eps)/(1-error(:,1)); %Apply new weights for next subset inds_correct = find(test_labels == targets.'); D_t(inds_correct) = D_t(inds_correct).*B_t(t); D_t = D_t./sum(D_t); end