提升方法boosting

本文是《统计学习方法》李航著学习笔记。现在的数据科学比赛中用到的算法大杀器GBDT(gradient boosting decision tree)终于要出场了!
提升方法的基本思想是将学习到的若干弱分类器组合形成强分类器,即ensembling里的boosting思想。这里的弱分类器通常是同一类模型,比如都是决策树、或都是神经网络等,下面的论述中弱分类器是树形模型。有关决策树的内容参考
http://blog.csdn.net/cymy001/article/details/78027083

不同问题的提升树学习算法主要区别在于选用的损失函数不同:
(a.)回归问题,用平方误差损失函数(eg.二叉回归树提升算法)
(b.)分类问题,用指数损失函数(eg.AdaBoost)
(c.)一般决策问题,用一般损失函数(eg.GBDT)

利用boosting预测:

(1.)利用二类分类提升模型进行预测就是将训练实例点 x i x_{i} xi代入学习到的分类决策函数模型 f ( x ) f(x) f(x),根据 f ( x i ) f(x_{i}) f(xi)的取值正负决定点 x i x_{i} xi的类, f ( x i ) f(x_{i}) f(xi)的绝对值表示分类的置信度。
(2.)利用回归树进行预测时就是判断训练实例点 x i x_{i} xi位于回归树 f ^ ( x ) \widehat{f}(x) f (x)模型的哪个区间,根据对应区间找出 f ^ ( x i ) \widehat{f}(x_{i}) f (xi)的值。

boosting模型学习:

提升方法可用于分类问题和回归问题,模型学习过程大致如下:
(1.)在分类问题中,通过“改变训练样本集的权重分布”,再“对应每个训练样本集的权重分布学习一个分类器”,最后“将这些分类器根据分类误差率进行线性组合得到最终的决策模型,提高分类的性能”。
(2.)在回归问题中,以平方损失函数为目标,通过拟合“叠加的回归树与训练实例点标记值间的残差”学习回归树,最后的模型是学习到的各回归树的和。
本文下述主要是提升方法的模型学习过程

分类问题的AdaBoost算法

输入:二类分类训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\} T={(x1,y1),(x2,y2),,(xN,yN)},其中 x i ∈ R n , y i ∈ { 1 , − 1 } x_{i}\in R^{n},y_{i}\in\{1,-1\} xiRnyi{1,1};某种弱学习算法(如决策树)
输出:强分类器 G ( x ) G(x) G(x)

(1)给定训练数据集 T T T的初始分布 D 1 = ( w 11 , ⋯   , w 1 i , ⋯   , w 1 N ) D_{1}=(w_{11},\cdots,w_{1i},\cdots,w_{1N}) D1=(w11,,w1i,,w1N),其中 w 1 i = 1 N , i = 1 , 2 , ⋯   , N w_{1i}=\frac{1}{N},i=1,2,\cdots,N w1i=N1,i=1,2,,N
(2.)学习 M M M个弱分类器 G m ( x ) , m = 1 , 2 , ⋯   , M G_{m}(x),m=1,2,\cdots,M Gm(x),m=1,2,,M

  • 对“具有分布 D m D_{m} Dm的训练数据集”用“某种弱学习算法”学习到二类分类弱分类器 G m ( x ) G_{m}(x) Gm(x)
  • G m ( x ) G_{m}(x) Gm(x) T T T上的分类误差率
    e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_{m}=P(G_{m}(x_{i})\neq y_{i})=\sum_{i=1}^{N}w_{mi}I(G_{m}(x_{i})\neq y_{i}) em=P(Gm(xi)̸=yi)=i=1NwmiI(Gm(xi)̸=yi)
  • 弱分类器 G m ( x ) G_{m}(x) Gm(x)的系数
    α m = 1 2 ln ⁡ 1 − e m e m \alpha_{m}=\frac{1}{2}\ln\frac{1-e_{m}}{e_{m}} αm=21lnem1em
  • 更新训练数据集 T T T的分布
    D m + 1 = ( w m + 1 , 1 , ⋯   , w m + 1 , i , ⋯   , w m + 1 , N ) w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) , i = 1 , 2 , ⋯   , N D_{m+1}=(w_{m+1,1},\cdots,w_{m+1,i},\cdots,w_{m+1,N})\\ w_{m+1,i}=\frac{w_{mi}}{Z_{m}}exp(-\alpha_{m}y_{i}G_{m}(x_{i})),i=1,2,\cdots,N Dm+1=(wm+1,1,,wm+1,i,,wm+1,N)wm+1,i=Zmwmiexp(αmyiGm(xi)),i=1,2,,N
    其中,概率归一化因子 Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_{m}=\sum\limits_{i=1}^{N}w_{mi}exp(-\alpha_{m}y_{i}G_{m}(x_{i})) Zm=i=1Nwmiexp(αmyiGm(xi))

(3.)由弱分类器 G m ( x ) G_{m}(x) Gm(x)的线性组合构建强分类器 G ( x ) G(x) G(x):
G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(f(x))=sign\Big(\sum\limits_{m=1}^{M}\alpha_{m}G_{m}(x)\Big) G(x)=sign(f(x))=sign(m=1MαmGm(x))

将Adaboost算法看作前向分布算法,即每步学习一个基函数 b ( x ; γ m ) b(x;\gamma_{m}) b(x;γm)及相应的系数 β m \beta_{m} βm,最终的强学习器是叠加 m m m次的加法模型 ∑ m = 1 M β m b ( x ; γ m ) \sum\limits_{m=1}^{M}\beta_{m}b(x;\gamma_{m}) m=1Mβmb(x;γm)
损失函数为指数损失函数 L ( y , f ( x ) ) = e x p [ − y ∑ m = 1 M β m b ( x ; γ m ) ] L(y,f(x))=exp[-y\sum\limits_{m=1}^{M}\beta_{m}b(x;\gamma_{m})] L(y,f(x))=exp[ym=1Mβmb(x;γm)]

以决策树为弱分类器的提升方法称为提升树:对分类问题,只需要在Adaboost算法中的第(2)步中对“具有分布 D m D_{m} Dm的训练数据集”用“决策树”学习二类分类弱分类器 G m ( x ) G_{m}(x) Gm(x);对回归问题,根据加法原理和平方损失最小的目标构建残差拟合模型
L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 L\big(y,f_{m-1}(x)+T(x;\Theta_{m})\big)=\Big[y-f_{m-1}(x)-T(x;\Theta_{m})\Big]^2 L(y,fm1(x)+T(x;Θm))=[yfm1(x)T(x;Θm)]2
其中 f m − 1 ( x ) = ∑ j = 1 m − 1 T ( x ; Θ j ) f_{m-1}(x)=\sum\limits_{j=1}^{m-1}T(x;\Theta_{j}) fm1(x)=j=1m1T(x;Θj),残差项为 r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=yfm1(x),每一步拟合残差利用的是回归树模型 T ( x ; Θ m ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x;\Theta_{m})=\sum\limits_{j=1}^{J}c_{j}I(x\in R_{j}) T(x;Θm)=j=1JcjI(xRj)

回归问题的提升树算法

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\} T={(x1,y1),(x2,y2),,(xN,yN)},其中 x i ∈ R n , y i ∈ R x_{i}\in R^{n},y_{i}\in R xiRnyiR
输出:提升树 f M ( x ) f_{M}(x) fM(x)

(1.)初始化 f 0 ( x ) = 0 f_{0}(x)=0 f0(x)=0
(2.)学习 M M M个弱回归树 f m ( x ) , m = 1 , 2 , ⋯   , M f_{m}(x),m=1,2,\cdots,M fm(x),m=1,2,,M

  • 分别计算 i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N个训练实例点的残差
    r m i = y i − f m − 1 ( x i ) r_{mi}=y_{i}-f_{m-1}(x_{i}) rmi=yifm1(xi)

  • 拟合残差 r m i r_{mi} rmi,学习一个回归树 T ( x ; Θ m ) T(x;\Theta_{m}) T(x;Θm)

  • 更新组合树模型 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_{m}(x)=f_{m-1}(x)+T(x;\Theta_{m}) fm(x)=fm1(x)+T(x;Θm)

(3.)最终的回归提升树 f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_{M}(x)=\sum\limits_{m=1}^{M}T(x;\Theta_{m}) fM(x)=m=1MT(x;Θm)

注:这里没有改变数据集的分布,每次学习新的树模型时,拟合的是训练数据集对应的残差项。

GBDT

针对一般损失函数,类似回归树的拟合残差,这里用损失函数的负梯度作为残差项。
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\} T={(x1,y1),(x2,y2),,(xN,yN)},其中 x i ∈ R n , y i ∈ R x_{i}\in R^{n},y_{i}\in R xiRnyiR;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
输出:回归树 f ( x ) f(x) f(x)

(1.)初始化 f 0 ( x ) = a r g min ⁡ c ∑ i = 1 N L ( y i , c ) f_{0}(x)=arg\min\limits_{c}\sum\limits_{i=1}^{N}L(y_{i},c) f0(x)=argcmini=1NL(yi,c)
(2.)学习 M M M个弱回归树 f m ( x ) , m = 1 , 2 , ⋯   , M f_{m}(x),m=1,2,\cdots,M fm(x),m=1,2,,M

  • 分别计算 i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N个训练实例点的残差
    r m i = − [ ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) ] r_{mi}=-\Big[\frac{\partial L(y_{i},f_{m-1}(x_{i}))}{\partial f_{m-1}(x_{i})}\Big] rmi=[fm1(xi)L(yi,fm1(xi))]

  • 拟合残差 r m i r_{mi} rmi,学习一个回归树 ∑ j = 1 J c m j I ( x ∈ R m j ) \sum\limits_{j=1}^{J}c_{mj}I(x\in R_{mj}) j=1JcmjI(xRmj):先生成树,即确定 J J J个叶结点数目,再对每个叶结点根据最小化损失函数选取 c m j c_{mj} cmj

  • 更新组合树模型 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_{m}(x)=f_{m-1}(x)+\sum\limits_{j=1}^{J}c_{mj}I(x\in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)

(3.)最终的回归提升树 f ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) f(x)=\sum\limits_{m=1}^{M}\sum\limits_{j=1}^{J}c_{mj}I(x\in R_{mj}) f(x)=m=1Mj=1JcmjI(xRmj)

注:GBDT算法中拟合残差生成回归树步里,生成树遍历选择切分点时,只需要一层遍历(因为拟合残差值是一维向量运算,维度上不需要遍历选取),但是当构建的回归树不是二叉树时,切分点的选取组合遍历比二叉树时要复杂。有了切分点后,利用平方损失最小,在每个区间内的 c m j c_{mj} cmj通过求导易求得。

提升方法boosting_第1张图片

你可能感兴趣的:(ML和DL算法)