【统计学习】提升方法

本文探讨了提升方法的基本思路,重点介绍了AdaBoost算法的工作原理和步骤,包括弱分类器的训练、权值调整和强分类器的组合。此外,还讲解了加法模型与前向分步算法的关系,以及提升树和梯度提升在回归和分类问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、提升方法AdaBoost算法

1、提升方法的基本思路

  • 提升方法基本思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好.

  • 对于分类问题而言,给定一个训练样本集,求弱分类器要比求强分类器容易得多.提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器.

  • 大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器.

  • 这样,对提升方法来说,有两个问题需要回答:

    • 一是在每一轮如何改变训练数据的权值或概率分布;
    • 二是如何将弱分类器组合成一个强分类器.
  • 第1个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值.这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注.于是,分类问题被一系列的弱分类器“分而治之”.

  • 第2个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法.具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用.

2、AdaBoost算法

  • 假设给定一个二类分类的训练数据集: T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) T={(x_1,y_1 ),(x_2,y_2 ),…,(x_N,y_N )} T=(x1,y1),(x2,y2),,(xN,yN)其中: x ∈ X ∈ R n , y ∈ − 1 , + 1 x∈X∈R^n, y∈{-1,+1} xXRn,y1,+1.
  • AdaBoost利用以下算法,从训练数据中学习一系列弱分类器或基本分类器,并将这些弱分类器线性组合成为一个强分类器.
  • 算法步骤:
    • 第一步:初始化训练数据的权值分布: D 1 = ( w 1 1 , w 1 2 , … , w 1 N ) D_1=(w_11,w_12,…,w_1N ) D1=(w11,w12,,w1N) w 1 i = 1 N w_{1i}=\frac{1}{N} w1i=N1
    • 第二步:循环训练基本分类器: m = 1 , 2 , … , M m=1,2,…,M m=1,2,,M
      • 使用具有权值分布 D m D_m Dm的训练数据集学习得到基本分类器: G m ( x ) : X → { − 1 , 1 } G_m (x):X→\{-1,1\} Gm(x):X{1,1}
      • 计算 G m ( x ) G_m (x) Gm(x)在训练数据集上的分类误差率:
        e m = ∑ i = 1 N w m i I ( G m ( x i ) ! = y i ) = ∑ G m ( x i ) ! = y i w m i e_m=∑_{i=1}^Nw_{mi} I(G_m (x_i )!=y_i)=∑_{G_m (x_i )!=y_i}w_{mi} em=i=1NwmiI(Gm(xi)!=yi)=Gm(xi)!=yiwmi误差为分类错误样本的权重之和。并且有: 0 ≤ e m ≤ 1 0≤e_m≤1 0em1
      • 计算 G m ( x ) G_m (x) Gm(x)的系数: α m = 1 2 l n 1 − e m e m α_m=\frac{1}{2} ln \frac{1-e_m}{e_m} αm=21lnem1em 该函数是 e m e_m em的单调减函数值域为 ( − ∞ , + ∞ ) (-∞,+∞) (,+),函数零点为: e m = 1 / 2 e_m=1/2 em=1/2注意 G m ( x ) G_m (x) Gm(x)是一个弱分类器但是它的准确率必须大于0.5,否则就比随机猜测准确度还低是不允许的,那么我们可以得到 α m α_m αm的实质取值范围: ( 0 , + ∞ ) (0,+∞) (0,+)
      • 更新训练数据集的权重分布: D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , … , w m + 1 , N ) D_{m+1}=(w_{m+1,1},w_{m+1,2},…,w_{m+1,N} ) Dm+1=(wm+1,1,wm+1,2,,wm+1,N) w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m} exp(-α_m y_i G_m (x_i )) wm+1,i=Zmwmiexp(αmyiGm(xi)) 这里 Z m Z_m Zm为归一化因子,使得 D ( m + 1 ) D_(m+1) D(m+1)成为一个概率分布 Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=∑_{i=1}^Nw_{mi} exp(-α_m y_i G_m (x_i )) Zm=i=1Nwmiexp(αmyiGm(xi))由于标签为+1或者-1,所有得到
        w m + 1 , i = { w m i Z m e ( − α m ) , G m ( x i ) = y i w m i Z m e ( α m ) , G m ( x i ) ! = y i w_{m+1,i}=\begin{cases} \frac{w_{mi}}{Z_m} e^(-α_m ), & G_m (x_i )=y_i \\ \frac{w_{mi}}{Z_m} e^(α_m ), & G_m (x_i )!=y_i \end{cases} wm+1,i={Zmwmie(αm),Zmwmie(αm),Gm(xi)=yiGm(xi)!=yi
    • 第三步:构建基本分类器的线性组合: f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=∑_{m=1}^M α_m G_m (x) f(x)=m=1MαmGm(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(∑_{m=1}^Mα_m G_m (x) ) G(x)=sign(f(x))=sign(m=1MαmGm(x))
  • 步骤一训练数据集具有均匀的权值分布
  • 步骤二中学习基本分类器的方法是一个抽象的方法,可以根据具体应用场景选择具体算法。比如下面章节用的就是决策树算法。
  • 不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这是AdaBoost的一个特点.

二、加法模型与前向分步算法:

1、前向分步算法

  • 加法模型(additive model)基本形式如下: f ( x ) = ∑ m = 1 M β m b ( x , r m ) f(x)=∑_{m=1}^Mβ_m b(x,r_m) f(x)=m=1Mβmb(x,rm)其中, b ( x , r m ) b(x,r_m) b(x,rm)为基函数, r m r_m rm为基函数的参数, β m β_m βm为基函数的系数.
  • 在给定训练数据及损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))的条件下,学习加法模型 f ( x ) f(x) f(x)成为经验风险极小化即损失函数极小化问题: min ⁡ β m , r m ⁡ ∑ i = 1 N L ( y i , f ( x i ) ) = min ⁡ β m , r m ⁡ ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x , r m ) ) \min_{β_m,r_m }⁡∑_{i=1}^NL(y_i,f(x_i )) =\min_{β_m,r_m }⁡∑_{i=1}^NL(y_i,∑_{m=1}^Mβ_m b(x,r_m)) βm,rmmini=1NL(yi,f(xi))=βm,rmmini=1NL(yi,m=1Mβmb(x,rm))
  • 通常直接优化这个损失函数很复杂.前向分步算法求解这一优化问题的想法是:
    • 我们的目标是最小化: min ⁡ β m , r m ⁡ ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x , r m ) ) \min_{β_m,r_m }⁡∑_{i=1}^NL(y_i,∑_{m=1}^Mβ_m b(x,r_m)) βm,rmmini=1NL(yi,m=1Mβmb(x,rm))
    • 求解这个式子是一下解出所有的 β m , r m β_m,r_m βm,rm,这样比较难,于是我们选择逐步求出 β m , r m β_m,r_m βm,rm的方法,假设前面 1 到 m − 1 1到m-1 1m1个基函数和它的系数都已经确定了,并保持不变了,这样我们到了局部加法模型 f m − 1 ( x ) f_{m-1} (x) fm1(x) f m − 1 ) ( x ) = ∑ i = 1 m − 1 β i b ( x , r i ) f_{m-1)}(x)=∑_{i=1}^{m-1}β_i b(x,r_i) fm1)(x)=i=1m1βib(x,ri)
    • 现在为了进一步减少损失函数,我们通过再引入参数 r m , β m r_m,β_m rm,βm,构造新的加法模型: f m ( x ) = f m − 1 ( x i ) + β m b ( x , r m ) f_m (x)=f_{m-1} (x_i )+β_m b(x,r_m) fm(x)=fm1(xi)+βmb(x,rm)
    • 通过最小化下面函数来进一步减少损失函数: ( β m , r m ) = min ⁡ β , r ⁡ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x , r ) ) (β_m,r_m )=\min_{β,r}⁡∑_{i=1}^NL(y_i,f_{m-1} (x_i )+βb(x,r)) (βm,rm)=β,rmini=1NL(yi,fm1(xi)+βb(x,r))得到第m个基函数和它对应参数
    • 直迭代直到第M步。得到最终的加法模型。
  • 这样,前向分步算法将同时求解从 m = 1 m=1 m=1 M M M所有参数 r m , β m r_m,β_m rm,βm的优化问题简化为逐次求解各个 r m , β m r_m,β_m rm,βm的优化问题.
  • 前向分步算法:
    • 输入:训练数据集;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));基函数集 { b ( x , r ) } \{b(x,r)\} {b(x,r)}(是基函数的基本形式)
    • 输出:加法模型 f ( x ) f(x) f(x).
    • 算法步骤
      • 初始化 f 0 ( x ) = 0 f_0 (x)=0 f0(x)=0
      • 循环训练模型, m = 1 , 2 , … , M m=1,2,…,M m=1,2,,M
        • 极小化损失函数: ( β m , r m ) = min ⁡ β , r ⁡ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x , r ) ) (β_m,r_m )=\min_{β,r}⁡∑_{i=1}^NL(y_i,f_{m-1} (x_i )+βb(x,r)) (βm,rm)=β,rmini=1NL(yi,fm1(xi)+βb(x,r))
        • 更新: f m ( x ) = f m − 1 ( x ) + β m b m ( x , r ) f_m (x)=f_{m-1} (x)+ β_m b_m (x,r) fm(x)=fm1(x)+βmbm(x,r)
      • 得到加法模型: f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x , r m ) f(x)=f_M (x)=∑_{m=1}^Mβ_m b(x,r_m) f(x)=fM(x)=m=1Mβmb(x,rm)

2、前向分步算法与AdaBoost关系:

  • 前向分步算法学习的是加法模型,当基函数为基本分类器,损失函数为如下指数损失函数时,该加法模型等价于AdaBoost: L ( y , f ( x ) ) = e x p ( − y f ( x ) ) L(y,f(x))=exp(-yf(x)) L(y,f(x))=exp(yf(x))
  • 第m轮迭代: f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m (x)=f_{m-1} (x)+α_m G_m (x) fm(x)=fm1(x)+αmGm(x)
  • 目标是使在训练数据集 T T T上的指数损失最小,即: ( α m , G m ( x ) ) = a r g min ⁡ α , G ⁡ ∑ i = 1 N e x p ( − y i ( f m − 1 ( x i ) + α m G m ( x i ) ) ) (α_m,G_m (x))=arg\min_{α,G}⁡∑_{i=1}^Nexp(-y_i (f_{m-1} (x_i )+α_m G_m (x_i))) (αm,Gm(x))=argα,Gmini=1Nexp(yi(fm1(xi)+αmGm(xi))) ( α m , G m ( x ) ) = a r g min ⁡ α , G ⁡ ∑ i = 1 N w ^ m i e x p ( − y i α G ( x ) ) (α_m,G_m (x))=arg\min_{α,G}⁡∑_{i=1}^N \hat{w}_{mi} exp(-y_i αG(x)) (αm,Gm(x))=argα,Gmini=1Nw^miexp(yiαG(x)) 其中, w ^ m i = e x p ( − y i f m − 1 ( x ) ) \hat{w}_{mi} =exp(-y_i f_{m-1} (x)) w^mi=exp(yifm1(x))为常数
  • 现需要证明,上式的解: ( α m ∗ , G m ∗ ( x ) ) (α_m^*,G_m^* (x)) (αm,Gm(x)),就是AdaBoost算法的 ( α m , G m ( x ) ) (α_m,G_m (x)) (αm,Gm(x)).求解式上式可分两步:
    • 首先求 G m ∗ ( x ) G_m^* (x) Gm(x)
      • 如果我们将 w ^ m i \hat{w}_{mi} w^mi看作是每个样本的权值,将α看作一个常数,由于 α > 0 α>0 α>0,所有上式可以看作是基本模型 G ( x ) G(x) G(x)的加权损失函数,最小化加权损失函数得到当前的基本模型 G m ∗ ( x ) G_m^* (x) Gm(x)。这和AdaBoost算法中通过某种学习算法学习得到的基本分类器是一致的,即 G m ∗ ( x ) = G m ( x ) G_m^* (x)=G_m (x) Gm(x)=Gm(x),因为它都是使第m轮加权训练数据分类误差率最小的基本分类器.

    • 再求 α m ∗ α_m^* αm
      • 在确定 G m ∗ ( x ) G_m^* (x) Gm(x)后得: ∑ i = 1 N w ^ m i e x p ( − y i α G m ∗ ( x i ) ) = ∑ G m ∗ ( x i ) = y i w ^ m i e − α + ∑ G m ∗ ( x i ) ! = y i w ^ m i e α ∑_{i=1}^N\hat{w}_{mi} exp(-y_i αG_m^* (x_i )) =∑_{G_m^* (x_i )=y_i}\hat{w}_{mi} e^{-α} +∑_{G_m^* (x_i )!=y_i}\hat{w}_{mi} e^α i=1Nw^miexp(yiαGm(xi))=Gm(xi)=yiw^mieα+Gm(xi)!=yiw^mieα = ( e − α + e α ) ∑ i = 1 N w ^ m i I ( y i ! = G m ∗ ( x i ) ) + e − α ∑ i = 1 N w ^ m i =(e^{-α}+e^α ) ∑_{i=1}^N\hat{w}_{mi} I(y_i !=G_m^* (x_i )) +e^{-α} ∑_{i=1}^N\hat{w}_{mi} =(eα+eα)i=1Nw^miI(yi!=Gm(xi))+eαi=1Nw^mi
      • 所以有: α m ∗ = a r g min ⁡ α ⁡ [ ( e − α + e α ) ∑ i = 1 N w ^ m i I ( y i ! = G m ∗ ( x i ) ) + e − α ∑ i = 1 N w ^ m i ] α_m^*=arg\min_{α}⁡[(e^{-α}+e^α ) ∑_{i=1}^N\hat{w}_{mi} I(y_i !=G_m^* (x_i )) +e^{-α} ∑_{i=1}^N\hat{w}_{mi} ] αm=argαmin[(eα+eα)i=1Nw^miI(yi!=Gm(xi))+eαi=1Nw^mi]
      • α α α求导并令其为0: − ∑ G m ∗ ( x i ) = y i w ^ m i e − α + ∑ G m ∗ ( x i ) ! = y i w ^ m i e α = 0 -∑_{G_m^* (x_i )=y_i}\hat{w}_{mi} e^{-α} +∑_{G_m^* (x_i )!=y_i}\hat{w}_{mi} e^α =0 Gm(xi)=yiw^mieα+Gm(xi)!=yiw^mieα=0 ∑ G m ∗ ( x i ) = y i w ^ m i e − α = ∑ G m ∗ ( x i ) ! = y i w ^ m i e α ∑_{G_m^* (x_i )=y_i}\hat{w}_{mi} e^{-α} =∑_{G_m^* (x_i )!=y_i}\hat{w}_{mi} e^α Gm(xi)=yiw^mieα=Gm(xi)!=yiw^mieα即: α m ∗ = 1 2 l n ( ∑ ( G m ∗ ( x i ) = y i ) w ^ m i ∑ ( G m ∗ ( x i ) ! = y i ) w ^ m i ) α_m^*=\frac{1}{2} ln(\frac{∑_(G_m^* (x_i )=y_i)\hat{w}_{mi} }{∑_(G_m^* (x_i )!=y_i)\hat{w}_{mi} }) αm=21ln((Gm(xi)!=yi)w^mi(Gm(xi)=yi)w^mi)
      • 记误差率为: e m = ∑ i = 1 N w ^ m i I ( y i ! = G m ∗ ( x i ) ) ∑ ( i = 1 ) N w ^ m i = ∑ i = 1 N w m i I ( y i ! = G m ∗ ( x i ) ) e_m=\frac{∑_{i=1}^N\hat{w}_{mi} I(y_i !=G_m^* (x_i )) }{∑_(i=1)^N\hat{w}_{mi} }=∑_{i=1}^Nw_{mi} I(y_i !=G_m^* (x_i )) em=(i=1)Nw^mii=1Nw^miI(yi!=Gm(xi))=i=1NwmiI(yi!=Gm(xi))可以理解成将 w ^ m i \hat{w}_{mi} w^mi归一化变成 w m i w_{mi} wmi
      • 所以: α m ∗ = 1 2 l n ( 1 − e m e m ) α_m^*=\frac{1}{2} ln(\frac{1-e_m}{e_m }) αm=21ln(em1em)
      • 与AdaBoost算法完全一致.

    • 再更新样本权值:
      • 经过上面的推导最后得到,当前步骤的基本分类器和它的系数,更新模型: f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m (x)=f_{m-1} (x)+α_m G_m (x) fm(x)=fm1(x)+αmGm(x)
      • 那么 w ^ m i \hat{w}_{mi} w^mi为: w ^ m + 1 i = e x p ( − y i f m ( x ) ) = w ^ m i e x p ( − y i α m G m ( x i ) ) \hat{w}_{m+1i}=exp(-y_i f_m (x))=\hat{w}_{mi} exp(-y_i α_m G_m (x_i )) w^m+1i=exp(yifm(x))=w^miexp(yiαmGm(xi))
      • 如果提前进行归一化: w m + 1 i = w ^ m i e x p ( − y i α m G m ( x i ) ) ∑ i = 1 N w ^ m i e x p ( − y i α m G m ( x i ) ) = w ^ m i Z m e x p ( − y i α m G m ( x i ) ) w_{m+1i}=\frac{\hat{w}_{mi} exp(-y_i α_m G_m (x_i ))}{∑_{i=1}^N\hat{w}_{mi} exp(-y_i α_m G_m (x_i )) }=\frac{\hat{w}_{mi}}{Z_m} exp(-y_i α_m G_m (x_i )) wm+1i=i=1Nw^miexp(yiαmGm(xi))w^miexp(yiαmGm(xi))=Zmw^miexp(yiαmGm(xi))
      • 与AdaBoost算法完全一致.

三、提升树:

  • 提升树:是以分类树或回归树为基本分类器的提升方法.即使用分类树或回归树来得到 G m G_m Gm的adaboost算法。

1、提升树模型

  • 以决策树为基函数的提升方法称为提升树(boosting tree).对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树.即使用的CART决策树
  • 提升树模型可以表示为决策树的加法模型: f M ( x ) = ∑ m = 1 M T ( x ; θ m ) f_M (x)=∑_{m=1}^MT(x;θ_m) fM(x)=m=1MT(x;θm)其中, T ( x ; θ m ) T(x;θ_m) T(x;θm)表示决策树; θ m θ_m θm为决策树的参数; M M M为树的个数.

2、提升树算法

  • 首先确定初始提升树 f 0 ( x ) = 0 f_0 (x)=0 f0(x)=0,第 m m m步的模型是: f m ( x ) = f m − 1 ( x ) + T ( x ; θ m ) f_m (x)=f_{m-1} (x)+T(x;θ_m) fm(x)=fm1(x)+T(x;θm)
  • 通过经验风险极小化确定当前这一棵决策树的参数 θ m θ_m θm: θ ^ m = a r g min ⁡ θ m ⁡ ∑ i = 1 N L ( y i , f m − 1 ( x ) + T ( x ; θ m ) ) \hat{θ}_m=arg\min_{θ_m}⁡∑_{i=1}^NL(y_i,f_{m-1} (x)+T(x;θ_m)) θ^m=argθmmini=1NL(yi,fm1(x)+T(x;θm))
  • 下面讨论针对不同损失函数的提升树学习算法,包括:
    • 用平方误差损失函数的回归问题,
    • 用指数损失函数的分类问题
    • 用一般损失函数的一般决策问题.

  • 二类分类问题提升树:
    • 该提升树算法只需将AdaBoost算法中的第二部中的第1小步中的基本分类器 G m ( x ) G_m (x) Gm(x)限制为CART二分类树就ok,可以说这时的提升树算法是AdaBoost算法的特殊情况
  • 回归问题的提升树:
    • 已知一个训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) T={(x_1,y_1 ),(x_2,y_2 ),…,(x_N,y_N )} T=(x1,y1),(x2,y2),,(xN,yN)其中: x ∈ X ∈ R n , y ∈ Y ∈ R x∈X∈R^n, y∈Y∈R xXRn,yYR.
    • 回归树可以参考CART树
    • 回归问题提升树的递推公式: f 0 ( x ) = 0 f_0 (x)=0 f0(x)=0 f m ( x ) = f m − 1 ( x ) + T ( x ; θ m ) , m = 1 , 2 , … , M f_m (x)=f_{m-1} (x)+T(x;θ_m ) ,m=1,2,…,M fm(x)=fm1(x)+T(x;θm),m=1,2,,M f M ( x ) = ∑ m = 1 M T ( x ; θ m ) f_M (x)=∑_{m=1}^MT(x;θ_m ) fM(x)=m=1MT(x;θm)
    • 第m步:给定当前模型 f m − 1 ( x ) f_{m-1} (x) fm1(x),需求解: θ ^ m = a r g min ⁡ θ m ⁡ ∑ i = 1 N L ( y i , f ( m − 1 ) ( x ) + T ( x ; θ m ) ) \hat{θ}_m=arg\min_{θ_m }⁡∑_{i=1}^NL(y_i,f_(m-1) (x)+T(x;θ_m)) θ^m=argθmmini=1NL(yi,f(m1)(x)+T(x;θm))得到 θ ^ m \hat{θ}_m θ^m,即第 m m m棵树的参数.
    • 当采用平方误差损失函数时: L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2
    • 其损失变为: L ( y i , f m − 1 ( x ) + T ( x ; θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; θ m ) ] 2 = [ r − T ( x ; θ m ) ] 2 L(y_i,f_{m-1}(x)+T(x;θ_m ))=[y-f_{m-1}(x)-T(x;θ_m )]^2=[r-T(x;θ_m )]^2 L(yi,fm1(x)+T(x;θm))=[yfm1(x)T(x;θm)]2=[rT(x;θm)]2其中: r = y − f m − 1 ( x ) r=y-f_{m-1} (x) r=yfm1(x)是当前模型拟合数据的残差
    • 所以,对回归提升树算法来说,只需简单地拟合当前模型的残差,即每次迭代后将每个样本的label改为样本的残差,再训练当前的回归树,并且回归提升树的每个基本模型的系数都是1.

    • 回归提升树算法步骤:
      • 第一步:初始化:f_0 (x)=0
      • 第二步:循环迭代:m=1,2,…,M
        • 计算每个样本的残差: r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , … , N r_{mi}=y_i-f_{m-1} (x_i ) ,i=1,2,…,N rmi=yifm1(xi),i=1,2,,N
        • 将每个样本的标签更新为残差: y i = r m i y_i=r_{mi} yi=rmi
        • 用更新后的数据训练生成回归树,得到 T ( x ; θ m ) T(x;θ_m) T(x;θm)
        • 更新: f m ( x ) = f m − 1 ( x ) + T ( x ; θ m ) f_m (x)=f_{m-1} (x)+T(x;θ_m ) fm(x)=fm1(x)+T(x;θm)
      • 第三步:得到回归提升树: f M ( x ) = ∑ m = 1 M T ( x ; θ m ) f_M (x)=∑_{m=1}^MT(x;θ_m) fM(x)=m=1MT(x;θm)

3、梯度提升

  • 提升树利用加法模型与前向分步算法实现学习的优化过程.当损失函数是平方损失和指数损失函数时,每一步优化是很简单的.但对一般损失函数而言,往往每一步优化并不那么容易.针对这一问题,Freidman提出了梯度提升(gradientboosting)算法.

  • 下面讨论使用梯度提升(gradientboosting)算法学习任意损失函数的回归树
    • 每一步都使用当前模型的梯度值: − [ ∂ L ( y , f ( x i ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -[\frac{∂L(y,f(x_i )}{∂f(x_i ) }]_{f(x)=f_{m-1} (x)} [f(xi)L(y,f(xi)]f(x)=fm1(x)
    • 并且将每个样本的梯度作为当前样本残差的近似值,再训练当前的回归树.
    • 梯度提升算法步骤:
      • 输入:已知一个训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) T={(x_1,y_1 ),(x_2,y_2 ),…,(x_N,y_N )} T=(x1,y1),(x2,y2),,(xN,yN)其中: x ∈ X ∈ R n , y ∈ Y ∈ R x∈X∈R^n, y∈Y∈R xXRn,yYR.损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
      • 输出:回归树 f ^ ( x ) \hat{f}(x) f^(x)
      • 第一步:初始化: f 0 ( x ) = a r g min ⁡ c ⁡ ∑ i = 1 N L ( y i , c ) f_0 (x)=arg\min_{c}⁡∑_{i=1}^N L(y_i,c) f0(x)=argcmini=1NL(yi,c)
      • 第二步:循环迭代: m = 1 , 2 , … , M m=1,2,…,M m=1,2,,M
        • 计算每个样本的梯度,即近似残差,作为数据的label: y i = r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) y_i=r_{mi}=-[\frac{∂L(y,f(x_i ))}{∂f(x_i )}]_{f(x)=f_{m-1}(x)} yi=rmi=[f(xi)L(y,f(xi))]f(x)=fm1(x)
        • 用新数据训练当前的回归树,得到第m棵树的叶结点区域 R m j , j = 1 , 2 … J R_mj,j=1,2…J Rmj,j=1,2J
        • 对每个叶子节点区域,计算每个区域的标签: c m j = a r g min ⁡ c ⁡ ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=arg\min_{c}⁡∑_{x_i∈R_{mj}}L(y_i,f_{m-1} (x_i )+c) cmj=argcminxiRmjL(yi,fm1(xi)+c)
        • 更新: 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) +∑_{j=1}^Jc_{mj} I(x∈R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)
      • 第三步:得到回归树: f ^ ( x ) = f M ( x ) + ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}(x)=f_M (x) +∑_{m=1}^M∑_{j=1}^Jc_{mj} I(x∈R_{mj}) f^(x)=fM(x)+m=1Mj=1JcmjI(xRmj)
    • 算法第一步初始化,估计使损失函数极小化的常数值,即它是只有一个根结点的树
    • 第二步的第一小步计算损失函数的负梯度在当前模型的值,将它作为残差的估计.对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值