引言

上一节介绍了 Boosting \text{Boosting} Boosting集成思想的经典样例—— Gradient Boosting \text{Gradient Boosting} Gradient Boosting,本节将介绍基于 Gradient Boosting \text{Gradient Boosting} Gradient Boosting经典模型——梯度提升树( Gradient Boosting Decision Tree,GBDT \text{Gradient Boosting Decision Tree,GBDT} Gradient Boosting Decision Tree,GBDT)。

回顾:

Boosting \text{Boosting} Boosting架构

Boosting \text{Boosting} Boosting,它自身不是一个算法,也不是一个模型,相比之下,它更像是一个架构( Structure \text{Structure} Structure):若干个弱模型( Weak Model \text{Weak Model} Weak Model)通过该架构整合成一个强模型( Strong Model \text{Strong Model} Strong Model)。

弱模型强模型之间是如何进行划分的?
题外话。在集成学习思想中, Bagging,Stacking \text{Bagging,Stacking} Bagging,Stacking使用的基学习器 ( Base Learner ) (\text{Base Learner}) (Base Learner)属于强模型(高方差、低偏差),针对不同的学习任务,将各个强模型的预测结果‘结合’,从而降低强模型的‘高方差’弊端;相反, Boosting \text{Boosting} Boosting使用的基学习器属于弱模型(低方差、高偏差),从而通过有序迭代,将若干模型整合成强模型。

  • 关于分类 ( Classification ) (\text{Classification}) (Classification)任务,通过投票 ( Voting ) (\text{Voting}) (Voting)的方式选择最优预测类别(少数服从多数)。
  • 关于回归 ( Regression ) (\text{Regression}) (Regression)任务,采用取均值 ( Meaning ) (\text{Meaning}) (Meaning)的方式消掉各学习器预测结果的方差信息。

从模型的预测性能——偏差与方差的角度观察:

  • 强模型属于预测低偏差 ( Low-Bias ) (\text{Low-Bias}) (Low-Bias)、高方差 ( High-Varance ) (\text{High-Varance}) (High-Varance)的模型;
    也就是说,强模型对于真实模型的位置预测的更加准确,但覆盖的范围更加广阔。
  • 弱模型属于预测高偏差 ( High-Bias ) (\text{High-Bias}) (High-Bias)、低方差 ( Low-Varance ) (\text{Low-Varance}) (Low-Varance)的模型;
    相反,弱模型对于真实模型的‘规模’预测的更加准确,但对于分布位置的精确度可能不尽人意。

样本拟合 ( Fitting ) (\text{Fitting}) (Fitting)的角度观察:弱模型属于对样本特征拟合不够/拟合不完整;相反,强模型能够对样本特征的拟合效果过于完整,甚至覆盖真实模型的分布区域

Gradient Boosting VS AdaBoost \text{Gradient Boosting VS AdaBoost} Gradient Boosting VS AdaBoost

不同于 Bagging \text{Bagging} Bagging学习思想 Boosting \text{Boosting} Boosting使用数据集内的全部数据有顺序地训练若干基学习器,使训练的相邻的基学习器之间相互依赖,当前迭代步骤下的预测模型 H t ( x ) \mathcal H_t(x) Ht(x)是前面所有基学习器 h 1 , h 2 , ⋯   , h t − 1 h_1,h_2,\cdots,h_{t-1} h1,h2,,ht1的结果。

  • (加性模型) AdaBoost \text{AdaBoost} AdaBoost预测模型 H T ( x ) \mathcal H_{\mathcal T}(x) HT(x)具体描述为各基学习器 h 1 , h 2 , ⋯   , h T h_1,h_2,\cdots,h_{\mathcal T} h1,h2,,hT之间的线性组合
    其中 Sign \text{Sign} Sign表示基于二分类任务的指示函数; α t ( t = 1 , 2 , ⋯   , T ) \alpha_t(t=1,2,\cdots,\mathcal T) αt(t=1,2,,T)表示各基学习器对应的权重参数。
    H T ( x ) = Sign ( ∑ t = 1 T α t ⋅ h t ) \mathcal H_{\mathcal T}(x) = \text{Sign}\left(\sum_{t=1}^{\mathcal T} \alpha_t \cdot h_t\right) HT(x)=Sign(t=1Tαtht)
  • Gradient Boosting \text{Gradient Boosting} Gradient Boosting:其描述的是当前时刻预测模型 H t ( x ) \mathcal H_t(x) Ht(x)上一时刻预测模型 H t − 1 ( x ) \mathcal H_{t-1}(x) Ht1(x)之间的迭代关系:
    H t ( x ) = H t − 1 ( x ) + η ⋅ h t \mathcal H_t(x) = \mathcal H_{t-1}(x) + \eta \cdot h_t Ht(x)=Ht1(x)+ηht
    将上式展开,关于迭代结束后的预测模型 H T ( x ) \mathcal H_{\mathcal T}(x) HT(x)表示为如下形式:
    H T ( x ) = H i n i t + η ⋅ h 1 ⏟ H 1 ( x ) + η ⋅ h 2 ⏟ H 2 ( x ) + ⋯ + η ⋅ h T \mathcal H_{\mathcal T}(x) = \underbrace{\underbrace{\mathcal H_{init} + \eta \cdot h_1}_{\mathcal H_1(x)} + \eta \cdot h_2}_{\mathcal H_2(x)} + \cdots + \eta \cdot h_{\mathcal T} HT(x)=H2(x) H1(x) Hinit+ηh1+ηh2++ηhT

从结构格式上观察, AdaBoost \text{AdaBoost} AdaBoost Gradient Boosting \text{Gradient Boosting} Gradient Boosting的迭代结果很相似,但核心区别在于它们对于训练数据的描述过程:

  • AdaBoost \text{AdaBoost} AdaBoost在迭代过程使用的数据集 D \mathcal D D从始至终都没有发生过修改。而仅修改每次迭代过程中对于数据集内不同样本的关注度
    D 1 , D 2 , ⋯   , D T \mathcal D_1,\mathcal D_2,\cdots,\mathcal D_{\mathcal T} D1,D2,,DT
    D t ( t = 1 , 2 , ⋯   , T ) \mathcal D_t(t=1,2,\cdots,\mathcal T) Dt(t=1,2,,T)可以理解成一个概率集合,而这种操作被称作重赋权( Re-Weighting \text{Re-Weighting} Re-Weighting)操作:
    其中 P t ( i ) \mathcal P_t^{(i)} Pt(i)表示第 t t t次迭代关于样本 x ( i ) x^{(i)} x(i)的关注度。
    D t = { P t ( 1 ) , P t ( 2 ) , ⋯   , P t ( N ) } ∑ i = 1 N P t ( i ) = 1 \mathcal D_t = \{\mathcal P_t^{(1)},\mathcal P_t^{(2)},\cdots,\mathcal P_t^{(N)}\} \quad \sum_{i=1}^N \mathcal P_t^{(i)} = 1 Dt={Pt(1),Pt(2),,Pt(N)}i=1NPt(i)=1
    如果数据集合 D \mathcal D D不支持带权样本的学习算法,同样可以将 P t ( i ) ( i = 1 , 2 , ⋯   , N ) \mathcal P_t^{(i)}(i=1,2,\cdots,N) Pt(i)(i=1,2,,N)视作采样概率,使用重采样( Re-Sampling \text{Re-Sampling} Re-Sampling)操作产生新的数据集。
    采样概率即:以 P t ( i ) \mathcal P_t^{(i)} Pt(i)的概率将样本 x ( i ) x^{(i)} x(i)从数据集 D \mathcal D D中采样出来,作为当前迭代步骤下数据集合的样本。
    但无论是重赋权,还是重采样,它们都没有对数据集 D \mathcal D D的样本产生任何修改。

    并且, AdaBoost \text{AdaBoost} AdaBoost关于数据集合 D \mathcal D D的关注度直接影响每次迭代下权重参数 α t \alpha_t αt的取值结果。相比之下,对应迭代产生的基学习器 h t h_t ht相比之下关注差一些。

    • 如果是重赋权,那么至始至终都没有缺失过样本,仅是每次迭代关注的样本点不同;
    • 如果是重采样,那么每次迭代采样产生的新集合必然也是数据集合 D \mathcal D D的子集,对应学习出的基学习器与之前迭代的基学习器之间存在相似性。如何对这些基学习器进行权重分配才是 AdaBoost \text{AdaBoost} AdaBoost架构的核心要素。
  • 相反, Gradient Boosting \text{Gradient Boosting} Gradient Boosting在算法的迭代过程中对数据集 D \mathcal D D标签信息进行了修改:
    D t = { ( x ( i ) , y ( i ) − H t ( x ( i ) ) ) } i = 1 N \mathcal D_t = \{(x^{(i)},y^{(i)} - \mathcal H_t(x^{(i)}))\}_{i=1}^N Dt={(x(i),y(i)Ht(x(i)))}i=1N
    其中, y ( i ) y^{(i)} y(i)是样本特征 x ( i ) x^{(i)} x(i)标签信息,也就是真实模型 f ( x ) f(x) f(x)关于样本特征 x ( i ) x^{(i)} x(i)映射结果;而 H t ( x ( i ) ) \mathcal H_t(x^{(i)}) Ht(x(i))表示 t t t次迭代过程产生的预测模型 H t ( x ) \mathcal H_{t}(x) Ht(x)对于样本 x ( i ) x^{(i)} x(i)预测标签

    那么 y ( i ) − H t ( x ( i ) ) y^{(i)} - \mathcal H_t(x^{(i)}) y(i)Ht(x(i))表示预测标签与真实标签之间的差距。而基学习器 h t + 1 h_{t+1} ht+1就是通过学习算法 K \mathcal K K对这个差距进行建模并学习特征:
    h t + 1 = K ( D t ) h_{t+1} = \mathcal K(\mathcal D_t) ht+1=K(Dt)
    与此同时,由于每次迭代过程种数据集合的变化,使得 Gradient Boosting \text{Gradient Boosting} Gradient Boosting关注点在于基学习器自身,而不是学习率。
    学习率作为权重参数,自身就是人为设置的常数,以防止过拟合。而基学习器的学习效果才是最终模型预测效果的核心要素。

CART \text{CART} CART回归树

关于梯度提升树( GBDT \text{GBDT} GBDT)使用的决策树是 CART \text{CART} CART( Classification And Regression Tree \text{Classification And Regression Tree} Classification And Regression Tree)回归树 GBDT \text{GBDT} GBDT处理的无论是回归任务还是分类任务,均使用 CART \text{CART} CART回归树作为基学习器

其核心原因在于: GBDT \text{GBDT} GBDT迭代的过程中,需要计算梯度结果,只有 CART \text{CART} CART回归树才能保证在函数空间内连续、可微

决策树算法——基本介绍中提到,分类树的最优划分点的判别标准是( Entropy \text{Entropy} Entropy)或者 GINI \text{GINI} GINI系数,它们的准确度是由纯度衡量。关于回归任务中的标签信息是连续型随机变量,因而使用平方误差( Squared Error \text{Squared Error} Squared Error)作为评判回归树拟合程度的损失函数。
纯度是指叶子结点内的样本属于相同类型的程度。

关于回归树的生成算法表示如下:
再回首:关于树的生成逻辑:
遍历样本特征内的属性,每一次遍历均可以将对应的样本空间划分成两个子集;
计算两个子集的 C \mathcal C C值,再基于 C \mathcal C C值计算对应的平方误差结果。
遍历结束后,谁的平方误差小,就选对应属性作为划分点,以此类推。

  • 场景构建

    • 给定训练数据集 D = { ( x ( i ) , y ( i ) ) } i = 1 N x ( i ) ∈ R p \mathcal D = \{(x^{(i)},y^{(i)})\}_{i=1}^N \quad x^{(i)} \in \mathbb R^p D={(x(i),y(i))}i=1Nx(i)Rp
    • 关于回归树 f ( x ) f(x) f(x)构建:将 X \mathcal X X的特征空间划分为 M \mathcal M M,每一份都对应回归树的叶子结点
      需要注意的是, R 1 , ⋯   , R M \mathcal R_1,\cdots,\mathcal R_{\mathcal M} R1,,RM的并集是样本 X \mathcal X X的特征空间,但它和 X \mathcal X X的特征维度 p p p不是一个概念。
      R 1 , R 2 , ⋯   , R M \mathcal R_1,\mathcal R_2,\cdots,\mathcal R_{\mathcal M} R1,R2,,RM
      并且每个特征子空间(叶子结点) R m ( m = 1 , 2 , ⋯   , M ) \mathcal R_m(m=1,2,\cdots,\mathcal M) Rm(m=1,2,,M)均对应一个固定的输出结果 C m ( m = 1 , 2 , ⋯   , M ) \mathcal C_{m}(m=1,2,\cdots,\mathcal M) Cm(m=1,2,,M)。因而关于回归树的模型 f ( x ( i ) ) f(x^{(i)}) f(x(i))可表示为:
      若样本被划分进同一个特征空间 R m \mathcal R_m Rm,它们的预测结果是相同的。均为 C m \mathcal C_m Cm.
      f ( x ( i ) ) = ∑ m = 1 M C m ⋅ I ( x ( i ) ∈ R m ) f(x^{(i)}) = \sum_{m=1}^{\mathcal M} \mathcal C_m \cdot \mathbb I(x^{(i)} \in \mathcal R_m) f(x(i))=m=1MCmI(x(i)Rm)
      其中 I \mathbb I I表示指示函数( Indicator Function \text{Indicator Function} Indicator Function):
      I ( x ( i ) ∈ R m ) = { 1 if  x ( i ) ∈ R m 0 otherwise \mathbb I(x^{(i)} \in \mathcal R_m) = \begin{cases} 1 \quad \text{if } x^{(i)} \in \mathcal R_m \\ 0 \quad \text{otherwise} \end{cases} I(x(i)Rm)={1if x(i)Rm0otherwise
    • 关于训练过程的损失函数——平方误差表示为:
      需要注意的是,这个 L \mathcal L L描述的是每个特征空间 R m ( m = 1 , 2 , ⋯   , M ) \mathcal R_m(m=1,2,\cdots,\mathcal M) Rm(m=1,2,,M)中的样本,其预测结果与真实标签的平方误差。
      L = ∑ x ( i ) ∈ R m [ y ( i ) − f ( x ( i ) ) ] 2 \mathcal L = \sum_{x^{(i)} \in \mathcal R_m} \left[y^{(i)} - f(x^{(i)})\right]^2 L=x(i)Rm[y(i)f(x(i))]2
  • 算法执行过程

    • 通过遍历样本特征 X \mathcal X X属性 s s s
    • 每一次遍历得到的属性 s s s,可以基于该属性,将对应的特征空间划分为两个子特征空间
      R 1 ( j , s ) , R 2 ( j , s ) \mathcal R_1(j,s),\mathcal R_2(j,s) R1(j,s),R2(j,s)是基于当前特征空间中,满足/不满足属性条件 s s s的样本集合。
      j j j并不是什么正儿八经的参数,它仅是样本编号。
      R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } ; R 2 ( j , s ) = { x ∣ x ( j ) > s } \mathcal R_1(j,s) = \{x \mid x^{(j)} \leq s\};\mathcal R_2(j,s) = \{x \mid x^{(j)} > s\} R1(j,s)={xx(j)s};R2(j,s)={xx(j)>s}
    • 如何判别被划分的集合 R 1 ( j , s ) , R 2 ( j , s ) \mathcal R_1(j,s),\mathcal R_2(j,s) R1(j,s),R2(j,s)优秀的?也就是说,如何判别属性 s s s是一个优秀的划分点——使用平方误差进行描述:
      如果能使下式达到最小,对应的划分属性 s s s与集合 R 1 ( j , s ) \mathcal R_1(j,s) R1(j,s) R 2 ( j , s ) \mathcal R_2(j,s) R2(j,s)就是该次划分下的最优子集合。
      min ⁡ j , s [ min ⁡ C 1 ∑ x ( i ) ∈ R 1 ( j , s ) ( y ( i ) − C 1 ) 2 + min ⁡ C 2 ∑ x ( i ) ∈ R 2 ( j , s ) ( y ( i ) − C 2 ) 2 ] \mathop{\min}\limits_{j,s} \left[\mathop{\min}\limits_{\mathcal C_1} \sum_{x^{(i)} \in \mathcal R_1(j,s)} (y^{(i)} - \mathcal C_1)^2 + \mathop{\min}\limits_{\mathcal C_2} \sum_{x^{(i)} \in \mathcal R_2(j,s)} (y^{(i)} - \mathcal C_2)^2\right] j,smin C1minx(i)R1(j,s)(y(i)C1)2+C2minx(i)R2(j,s)(y(i)C2)2
    • 各子集合对应的 C \mathcal C C最优值 C ^ m ( m = 1 , 2 , ⋯   , M ) \hat {\mathcal C}_m(m=1,2,\cdots,\mathcal M) C^m(m=1,2,,M)可表示为:
      C ^ m = AVG ( y ( i ) ∣ x ( i ) ∈ R m ) \hat {\mathcal C}_m = \text{AVG}(y^{(i)} \mid x^{(i)} \in \mathcal R_m) C^m=AVG(y(i)x(i)Rm)
    • 重复执行上述 2 , 3 2,3 2,3步骤,直到满足停止条件。此时得到了 M \mathcal M M个满足条件的特征空间,生成决策树:
      下面则以某样本 x ( i ) ∈ R m x^{(i)} \in \mathcal R_m x(i)Rm为例,描述它的预测结果。
      f ( x ( i ) ) = ∑ m = 1 M C ^ m ⋅ I ( x ( i ) ∈ R m ) = C 1 ^ ⋅ I ( x ( i ) ∈ R 1 ) ⏟ = 0 + ⋯ + C ^ m ⋅ I ( x ( i ) ∈ R m ) ⏟ = 1 + ⋯ + C ^ M ⋅ I ( x ( i ) ∈ R M ) ⏟ = 0 = C ^ m ⋅ 1 = C ^ m \begin{aligned} f(x^{(i)}) & = \sum_{m=1}^{\mathcal M} \hat {\mathcal C}_m \cdot \mathbb I(x^{(i)} \in \mathcal R_m) \\ & = \hat {\mathcal C_1} \cdot \underbrace{\mathbb I(x^{(i)} \in \mathcal R_1)}_{=0} + \cdots + \hat {\mathcal C}_m \cdot \underbrace{\mathbb I(x^{(i)} \in \mathcal R_m)}_{=1} + \cdots + \hat {\mathcal C}_{\mathcal M} \cdot \underbrace{\mathbb I (x^{(i)} \in \mathcal R_{\mathcal M})}_{=0} \\ & = \hat {\mathcal C}_m \cdot 1 \\ & = \hat {\mathcal C}_m \end{aligned} f(x(i))=m=1MC^mI(x(i)Rm)=C1^=0 I(x(i)R1)++C^m=1 I(x(i)Rm)++C^M=0 I(x(i)RM)=C^m1=C^m

梯度提升树( Gradient Boosting Decision Tree,GBDT \text{Gradient Boosting Decision Tree,GBDT} Gradient Boosting Decision Tree,GBDT)

梯度提升树本质上是以 Gradient Boosting \text{Gradient Boosting} Gradient Boosting作为架构,以决策树( Decision Tree \text{Decision Tree} Decision Tree)作为基学习器的模型结构。由于是 Boosting \text{Boosting} Boosting架构,因而我们需要一种弱模型作为基学习器进行学习。但决策树并不是弱模型,它是一种强模型随着树结构的不断加深,这意味着对于特征空间的划分更加细致,从而使样本逐渐拟合模型。

因而,我们需要限制决策树的深度:从而因特征空间划分不够细致使得某些样本的归属比较模糊,从而使决策树降为弱模型为后续的迭代留下空间
更有激进的工程师仅使用‘深度仅为1的树桩’作为GBDT的基学习器,哈哈~

Gradient Boosting \text{Gradient Boosting} Gradient Boosting算法过程

回顾 Gradient Boosting \text{Gradient Boosting} Gradient Boosting算法过程表示如下:

  • 预测模型进行初始化: H i n i t ( x ) = 0 \mathcal H_{init}(x) = 0 Hinit(x)=0
  • 执行 T \mathcal T T次迭代: t = 1 , 2 , ⋯   , T t = 1,2,\cdots,\mathcal T t=1,2,,T
    • 计算残差( Residual \text{Residual} Residual): r t ( i ) = y ( i ) − H t − 1 ( x ( i ) ) i = 1 , 2 , ⋯   , N r_t^{(i)} = y^{(i)} - \mathcal H_{t-1}(x^{(i)}) \quad i=1,2,\cdots,N rt(i)=y(i)Ht1(x(i))i=1,2,,N
    • 通过样本特征 x ( i ) ( i = 1 , 2 , ⋯   , N ) x^{(i)}(i=1,2,\cdots,N) x(i)(i=1,2,,N)以及对应的残差结果 r t ( i ) r_t^{(i)} rt(i)构成新数据集 D t = { ( x ( i ) , r t ( i ) ) } i = 1 N \mathcal D_{t}=\{(x^{(i)},r_t^{(i)})\}_{i=1}^N Dt={(x(i),rt(i))}i=1N,并基于 D t \mathcal D_{t} Dt,使用学习算法 K \mathcal K K,学习出一个新的基学习器(回归树) h t ( x ) h_t(x) ht(x)
      h t ( x ) = K ( D t ) h_t(x) = \mathcal K(\mathcal D_{t}) ht(x)=K(Dt)
    • 使用基学习器 h t ( x ) h_t(x) ht(x)更新预测模型(回归树) H t − 1 ( x ) \mathcal H_{t-1}(x) Ht1(x)
      H t ( x ) = H t − 1 ( x ) + η ⋅ h t ( x ) \mathcal H_t(x) = \mathcal H_{t-1}(x) + \eta \cdot h_t(x) Ht(x)=Ht1(x)+ηht(x)
  • T \mathcal T T次迭代步骤执行结束,最终得到预测模型 H T ( x ) \mathcal H_{\mathcal T}(x) HT(x)
    H T ( x ) = H i n i t ( x ) + η ⋅ h 1 ( x ) + ⋯ + η ⋅ h T ( x ) \mathcal H_{\mathcal T}(x) = \mathcal H_{init}(x) + \eta \cdot h_1(x) + \cdots + \eta \cdot h_{\mathcal T}(x) HT(x)=Hinit(x)+ηh1(x)++ηhT(x)

而上述算法过程中的残差 r t ( i ) r_t^{(i)} rt(i)同样也是基学习器 h t h_t ht的学习目标。根据残差与梯度下降之间关联关系,残差结果与目标函数 L ( i ) \mathcal L^{(i)} L(i)与预测模型 H t − 1 ( x ( i ) ) \mathcal H_{t-1}(x^{(i)}) Ht1(x(i))的梯度方向相反
在推导过程中目标函数 L \mathcal L L使用的是‘均方误差’ ( MSE ) (\text{MSE}) (MSE),而 CART \text{CART} CART回归树使用的是‘平方误差’,这里仅差了一个系数 1 N \begin{aligned}\frac{1}{N}\end{aligned} N1,虽然不影响 ∝ \propto 关系,但是需要知道。
r t ( i ) = h t ( x ( i ) ) ∝ − ∂ L ( i ) ∂ H t − 1 ( x ( i ) ) r_t^{(i)} = h_t(x^{(i)}) \propto - \frac{\partial \mathcal L^{(i)}}{\partial \mathcal H_{t-1}(x^{(i)})} rt(i)=ht(x(i))Ht1(x(i))L(i)

梯度提升树算法过程

梯度提升树的 核心逻辑 是:利用损失函数的负梯度在当前模型的值,作为残差的近似值。即:

  • L \mathcal L L使用平方误差展开。
  • 系数 1 2 \begin{aligned}\frac{1}{2}\end{aligned} 21本身是不存在的,这里仅是将导数过程中的系数 2 2 2消去,增加一个系数只会影响梯度大小,并不改变梯度方向。
    − ∂ L ( i ) ∂ H t − 1 ( x ( i ) ) ≈ − ∂ [ 1 2 ( y ( i ) − H t − 1 ( x ( i ) ) ) 2 ] ∂ H t − 1 ( x ( i ) ) = − 1 2 ⋅ 2 ⋅ [ y ( i ) − H t − 1 ( x ( i ) ) ] ⋅ [ 0 − 1 ] = y ( i ) − H t − 1 ( x ( i ) ) = r t ( i ) \begin{aligned} - \frac{\partial \mathcal L^{(i)}}{\partial \mathcal H_{t-1}(x^{(i)})} & \approx - \frac{\partial \left[\frac{1}{2}(y^{(i)} - \mathcal H_{t-1}\left(x^{(i)})\right)^2\right]}{\partial \mathcal H_{t-1}(x^{(i)})} \\ & = - \frac{1}{2} \cdot 2 \cdot \left[y^{(i)} - \mathcal H_{t-1}(x^{(i)})\right] \cdot [0-1] \\ & = y^{(i)} - \mathcal H_{t-1}(x^{(i)}) \\ & = r_t^{(i)} \end{aligned} Ht1(x(i))L(i)Ht1(x(i))[21(y(i)Ht1(x(i)))2]=212[y(i)Ht1(x(i))][01]=y(i)Ht1(x(i))=rt(i)

至此,关于梯度提升树的算法过程表示如下:

  • 初始化预测模型 H i n i t ( x ) \mathcal H_{init}(x) Hinit(x)

    • 样本之间独立同分布,因而损失函数表示为 N N N个样本 x ( i ) ( i = 1 , 2 , ⋯   , N ) x^{(i)}(i=1,2,\cdots,N) x(i)(i=1,2,,N)关于对应真实标签 y ( i ) y^{(i)} y(i)偏差的总和。
    • 初始状态下,每一个样本各自被划分为一个特征子空间;而 c c c表示各样本的标签自身。 L \mathcal L L表示平方误差。
      H i n i t ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y ( i ) , c ) \mathcal H_{init}(x) = \mathop{\arg\min}\limits_{c}\sum_{i=1}^N \mathcal L(y^{(i)},c) Hinit(x)=cargmini=1NL(y(i),c)
  • 执行 T \mathcal T T次迭代: t = 1 , 2 , ⋯   , T t=1,2,\cdots,\mathcal T t=1,2,,T
    这里以 t = 1 t=1 t=1为例。

    • 对于每个样本 ( x ( i ) , y ( i ) ) ( i = 1 , 2 , ⋯   , N ) (x^{(i)},y^{(i)})(i=1,2,\cdots,N) (x(i),y(i))(i=1,2,,N),计算当前迭代过程的残差
      r 1 ( i ) ⇐ − [ ∂ L ( y ( i ) , H i n i t ( x ( i ) ) ) ∂ H i n i t ( x ( i ) ) ] r_1^{(i)} \Leftarrow - \left[\frac{\partial \mathcal L(y^{(i)},\mathcal H_{init}(x^{(i)}))}{\partial \mathcal H_{init}(x^{(i)})}\right] r1(i)[Hinit(x(i))L(y(i),Hinit(x(i)))]
    • 将产生的新样本集合 D 1 = { ( x ( i ) , r 1 ( i ) ) } i = 1 N \mathcal D_1 = \{(x^{(i)},r_1^{(i)})\}_{i=1}^N D1={(x(i),r1(i))}i=1N作为下一棵树的训练数据,并得到一棵新的回归树(基学习器) h 1 ( x ) h_1(x) h1(x)。并将回归树 h 1 ( x ) h_{1}(x) h1(x)划分的特征空间集合记作 R 1 = { R 1 1 , R 2 1 , ⋯   , R M 1 } \mathcal R^1 = \{\mathcal R_1^1,\mathcal R_2^1,\cdots,\mathcal R_{\mathcal M}^1\} R1={R11,R21,,RM1}
      这里的 M \mathcal M M指回归树 h 1 ( x ) h_1(x) h1(x)划分的特征空间(叶子结点)的个数。
    • 对每一个特征子空间 R m 1 ( m = 1 , 2 , ⋯   , M ) \mathcal R_m^1(m=1,2,\cdots,\mathcal M) Rm1(m=1,2,,M)计算最优拟合结果:
      个人解惑:关于上一次迭代拟合的剩余部分就是我们的拟合目标。因而 L \mathcal L L内部并不是 H i n i t ( x ( i ) ) + η ⋅ C m \mathcal H_{init}(x^{(i)}) + \eta \cdot \mathcal C_m Hinit(x(i))+ηCm.
      C ^ m 1 = arg ⁡ min ⁡ C m ∑ x ( i ) ∈ R m 1 L [ y ( i ) , H i n i t ( x ( i ) ) + C m ] m = 1 , 2 , ⋯   , M \hat {\mathcal C}_m^1 = \mathop{\arg\min}\limits_{\mathcal C_m} \sum_{x^{(i)} \in \mathcal R_{m}^1} \mathcal L \left[y^{(i)},\mathcal H_{init}(x^{(i)}) + \mathcal C_m\right] \quad m=1,2,\cdots,\mathcal M C^m1=Cmargminx(i)Rm1L[y(i),Hinit(x(i))+Cm]m=1,2,,M
    • 至此,得到了 M \mathcal M M h 1 ( x ) h_{1}(x) h1(x)对于各特征子空间的最优均值结果 C ^ 1 1 , C ^ 2 1 , ⋯   , C ^ M 1 \hat {\mathcal C}_1^1,\hat {\mathcal C}_2^1,\cdots,\hat {\mathcal C}_{\mathcal M}^1 C^11,C^21,,C^M1,使用该结果去优化当前迭代步骤下的预测模型 H 1 ( x ) \mathcal H_1(x) H1(x)
      H 1 ( x ) = H i n i t ( x ) + η ⋅ h 1 ( x ) = H i n i t ( x ) + η ⋅ [ C ^ 1 1 ⋅ I ( x ∈ R 1 1 ) + ⋯ + C ^ M 1 ⋅ I ( x ∈ R M 1 ) ] = H i n i t ( x ) + η ⋅ ∑ m = 1 M C ^ m 1 ⋅ I ( x ∈ R m 1 ) \begin{aligned} \mathcal H_1(x) & = \mathcal H_{init}(x) + \eta \cdot h_1(x) \\ & = \mathcal H_{init}(x) + \eta \cdot \left[\hat {\mathcal C}_1^1 \cdot \mathbb I(x \in \mathcal R_1^1) + \cdots + \hat {\mathcal C}_{\mathcal M}^1 \cdot \mathbb I(x \in \mathcal R_{\mathcal M}^1)\right] \\ & = \mathcal H_{init}(x) + \eta \cdot \sum_{m=1}^{\mathcal M} \hat {\mathcal C}_m^1 \cdot \mathbb I(x \in \mathcal R_m^1) \end{aligned} H1(x)=Hinit(x)+ηh1(x)=Hinit(x)+η[C^11I(xR11)++C^M1I(xRM1)]=Hinit(x)+ηm=1MC^m1I(xRm1)

重复执行上述步骤 T \mathcal T T次,最终可得到最终预测模型 H T ( x ) \mathcal H_{\mathcal T}(x) HT(x)
H T ( x ) = H i n i t ( x ) + η ⋅ [ h 1 ( x ) + h 2 ( x ) + ⋯ + h T ( x ) ] = H i n i t ( x ) + η ⋅ ∑ t = 1 T ∑ m = 1 M C ^ m t ⋅ I ( x ∈ R m t ) \begin{aligned} \mathcal H_{\mathcal T}(x) & = \mathcal H_{init}(x) + \eta \cdot \left[h_1(x) + h_2(x) + \cdots + h_{\mathcal T}(x)\right] \\ & = \mathcal H_{init}(x) + \eta \cdot \sum_{t=1}^{\mathcal T} \sum_{m=1}^{\mathcal M} \hat {\mathcal C}_{m}^t \cdot \mathbb I(x \in \mathcal R_m^t) \end{aligned} HT(x)=Hinit(x)+η[h1(x)+h2(x)++hT(x)]=Hinit(x)+ηt=1Tm=1MC^mtI(xRmt)
下一节将介绍集成学习方法—— Stacking \text{Stacking} Stacking

相关参考:
【算法岗求职笔记】集成学习(一)通用概念·八问八答
第09讲:GBDT堪称最好的算法之一
GBDT算法原理以及实例理解(含Python代码简单实现版)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐