Train boosted fern regressor.


function [ferns,ysPr] = fernsRegTrain( data, ys, varargin )


 Train boosted fern regressor.

 Boosted regression using random ferns as the weak regressor. See "Greedy
 function approximation: A gradient boosting machine", Friedman, Annals of
 Statistics 2001, for more details on boosted regression.

 A few notes on the parameters: 'type' should in general be set to 'res'
 (the 'ave' version is an undocumented variant that only performs well
 under limited conditions). 'loss' determines the loss function being
 optimized, in general the 'L2' version is the most robust and effective.
 'reg' is a regularization term for the ferns, a low value such as .01 can
 improve results. Setting the learning rate 'eta' is crucial in order to
 achieve good performance, especially on noisy data. In general, eta
 should decreased as M is increased.

  M - number ferns
  R - number repeats
  S - fern depth
  N - number samples
  F - number features

  [ferns,ysPr] = fernsRegTrain( data, hs, [varargin] )

  data     - [NxF] N length F feature vectors
  ys       - [Nx1] target output values
  varargin - additional params (struct or name/value pairs)
   .type     - ['res'] options include {'res','ave'}
   .loss     - ['L2'] options include {'L1','L2','exp'}
   .S        - [2] fern depth (ferns are exponential in S)
   .M        - [50] number ferns (same as number phases)
   .R        - [10] number repetitions per fern
   .thrr     - [0 1] range for randomly generated thresholds
   .reg      - [0.01] fern regularization term in [0,1]
   .eta      - [1] learning rate in [0,1] (not used if type='ave')
   .verbose  - [0] if true output info to display

  ferns    - learned fern model w the following fields
   .fids     - [MxS] feature ids for each fern for each depth
   .thrs     - [MxS] threshold corresponding to each fid
   .ysFern   - [2^SxM] stored values at fern leaves
   .loss     - loss(ys,ysGt) computes loss of ys relateive to ysGt
  ysPr     - [Nx1] predicted output values

  %% generate toy data
  N=1000; sig=.5; f=@(x) cos(x*pi*4)+(x+1).^2;
  xs0=rand(N,1); ys0=f(xs0)+randn(N,1)*sig;
  xs1=rand(N,1); ys1=f(xs1)+randn(N,1)*sig;
  %% train and apply fern regressor
    'thrr',[-1 1],'reg',.01,'S',2,'M',1000,'R',3,'verbose',0);
  tic, [ferns,ysPr0] = fernsRegTrain(xs0,ys0,prm); toc
  tic, ysPr1 = fernsRegApply( xs1, ferns ); toc
  fprintf('errors train=%f test=%f\n',...
  %% visualize results
  figure(1); clf; hold on; plot(xs0,ys0,'.b'); plot(xs0,ysPr0,'.r');
  figure(2); clf; hold on; plot(xs1,ys1,'.b'); plot(xs1,ysPr1,'.r');

 See also fernsRegApply, fernsInds

 Piotr's Computer Vision Matlab Toolbox      Version 2.50
 Copyright 2014 Piotr Dollar.  [pdollar-at-gmail.com]
 Licensed under the Simplified BSD License [see external/bsd.txt]

Generated by m2html © 2003