


Train boosted decision tree classifier.
Heavily optimized code for training Discrete or Real AdaBoost where the
weak classifiers are decision trees. With multi-core support enabled (see
binaryTreeTrain.m), boosting 256 depth-2 trees over 5,000 features and
5,000 data points takes under 5 seconds, see example below. Most of the
training time is spent in binaryTreeTrain.m.
For more information on how to quickly boost decision trees see:
[1] R. Appel, T. Fuchs, P. Dollár, P. Perona; "Quickly Boosting
Decision Trees – Pruning Underachieving Features Early," ICML 2013.
The code here implements a simple brute-force strategy with the option to
sample features used for training each node for additional speedups.
Further gains using the ideas from the ICML paper are possible. If you
use this code please consider citing our ICML paper.
USAGE
model = adaBoostTrain( X0, X1, [pBoost] )
INPUTS
X0 - [N0xF] negative feature vectors
X1 - [N1xF] positive feature vectors
pBoost - additional params (struct or name/value pairs)
.pTree - ['REQ'] parameters for binaryTreeTrain
.nWeak - [128] number of trees to learn
.discrete - [1] train Discrete-AdaBoost or Real-AdaBoost
.verbose - [0] if true print status information
OUTPUTS
model - learned boosted tree classifier w the following fields
.fids - [K x nWeak] feature ids for each node
.thrs - [K x nWeak] threshold corresponding to each fid
.child - [K x nWeak] index of child for each node (1-indexed)
.hs - [K x nWeak] log ratio (.5*log(p/(1-p)) at each node
.weights - [K x nWeak] total sample weight at each node
.depth - [K x nWeak] depth of each node
.errs - [1 x nWeak] error for each tree (for debugging)
.losses - [1 x nWeak] loss after every iteration (for debugging)
.treeDepth - depth of all leaf nodes (or 0 if leaf depth varies)
EXAMPLE
% output should be: 'Testing err=0.0145 fp=0.0165 fn=0.0125'
N=5000; F=5000; sep=.01; RandStream.getGlobalStream.reset();
[xTrn,hTrn,xTst,hTst]=demoGenData(N,N,2,F/10,sep,.5,0);
xTrn=repmat(single(xTrn),[1 10]); xTst=repmat(single(xTst),[1 10]);
pBoost=struct('nWeak',256,'verbose',16,'pTree',struct('maxDepth',2));
model = adaBoostTrain( xTrn(hTrn==1,:), xTrn(hTrn==2,:), pBoost );
fp = mean(adaBoostApply( xTst(hTst==1,:), model )>0);
fn = mean(adaBoostApply( xTst(hTst==2,:), model )<0);
fprintf('Testing err=%.4f fp=%.4f fn=%.4f\n',(fp+fn)/2,fp,fn);
See also adaBoostApply, binaryTreeTrain, demoGenData
Piotr's Computer Vision Matlab Toolbox Version 3.21
Copyright 2014 Piotr Dollar. [pdollar-at-gmail.com]
Licensed under the Simplified BSD License [see external/bsd.txt]