集成学习—GBDT(论文研读)

GBDT,全称为梯度提升决策树,即Gradient Boosting Decision Tree,它与Friedman等人的《Additive logistic regression: a statistical view of boosting》这篇文章有极大的联系,基本上可以说是由这篇文章发展而来的,但是由于GBDT自己有着很好的实践效果,因此对于学习集成学习来说读一读原本的论文也是很必要的。因此这篇博客主要是对GBDT的原论文进行精读和理解。

《Greedy function approximation: A gradient boosting machine》是Jerome H. Friedman 于2001年在《Annals of Statistics》(统计四大金刚之一)发表的。下面就是论文的概览以及全文翻译。

文章结构:

  1. 函数估计:提出了一般的函数估计的概念以及经常使用的损失函数,并给出了问题的解决思路,即把函数优化问题变为参数优化问题,然后再用数值优化算法例如最速下降求解;
  2. 函数空间中的数值优化:将最速下降法在函数空间中运用,得到增量函数的方向 g m ( x ) g_m(x) gm(x)以及线性搜索的步长 ρ m \rho_m ρm
  3. 有限数据:在有限数据样本中,借助参数化的求解方法,用贪婪分步算法求得的 h ( x ; a m ) h(x;a_m) h(x;am)来替代最速下降中的 g m ( x ) g_m(x) gm(x),并求得相应的线性搜索的步长 ρ m \rho_m ρm,由此得到梯度提升Gradient Boost的一个通用算法框架(算法1);
  4. 应用:加性模型:将Gradient Boost应用于几种常用的损失准则:运用到最小二乘(LS)得到算法2的 L S LS LS_Boost;后面分析了回归树的特性,将它作为基学习器,再运用到最小绝对偏差(LAD),这样得到了算法3的 L A D LAD LAD_TreeBoost;再运用到Huber(M)损失函数就得到了 M M M_TreeBoost;运用到logistic二项对数似然(L)得到了 L K L_K LK_TreeBoost(二分类和多分类)。然后再讨论了权重修剪,即删除那些 w i w_i wi值小于阈值的所有样本,由此达到减少计算量但不损失精度的目的;
  5. 正则化:讨论了两种防止过拟合的参数,即学习速率 ν \nu ν和迭代次数 M M M,通过模拟实验来阐述这样的 ν − M \nu-M νM之间的权衡,说明降低学习速率可以显著地提高性能,但迭代次数可能会上升,但实际中迭代次数应该在计算方便或者可行的时候尽可能大;
  6. 模拟研究:通过蒙特卡罗模拟评估算法在许多不同情况下的表现,即产生100个随机生成的目标函数,并设定误差分布。这样对比了 L S LS LS_TreeBoost、 M M M_TreeBoost和 L A D LAD LAD_TreeBoost三种算法,在正常误差和误差极端情况中 M M M_TreeBoost都表现较好;对比了 L S LS LS_TreeBoost与MARS, M M M_TreeBoost对于正态误差几乎与 L S LS LS_TreeBoost一样准确,而且对输出 y y y的离群值具有很强的抵抗力;对比了 L k L_k Lk_TreeBoost、K分类LogitBoost和Adaboost.MH,当对这三种方法中的每一种都仔细调整收缩参数时,它们之间的性能差别可能很小;
  7. 提升树:树的大小 J J J是基学习器的主要的超参数,它表示输入变量中占主导的交互作用的最高阶数,在实践中,这可以通过使用独立的测试集来调整;
  8. 解释:利用输入变量的相对重要性以及部分依赖图(可视化的解释)定量地翻译了目标函数 F ∗ ( x ) F^*(x) F(x)的性质,提供了关于输入变量 x x x和输出变量 y y y的潜在关系的信息;
  9. 真实数据:将上述几种提升树回归算法将在两个实际数据集上进行说明,并分析了变量的相对重要性以及部分依赖图,结果和之前模拟时类似;
  10. 数据挖掘:总结了提升树的一些特性,继承了决策树的良好特性,例如不用考虑变量转换、对长尾分布和异常值不敏感、树的内部特征选择导致稳健性好、处理缺失值很方便等,也改善了单一树不准确不稳定的缺点,解释性也有一定的工具,而且在计算方面也有一定优势,可以作为预处理工具,且可以在先前停止的地方重新启动,不会造成计算损失。

1. 函数估计

在函数估计或预测学习的问题中,我们有一个由随机的“输出”或“响应”变量 y y y和一组随机的“输入”或“解释”变量 x = { x 1 , … , x n } x=\{x_1,\dots,x_n\} x={x1,,xn}组成的系统。使用已知的训练样本 { y i , x i } i N \{y_i,x_i\}_i^N {yi,xi}iN,目标是得到从 x x x y y y的映射函数 F ∗ ( x ) F^*(x) F(x)的一个估计或者近似 F ^ ( x ) \hat{F}(x) F^(x),这个估计要在所有的样本的联合分布上最小化某些特定的损失函数 L ( y , F ( X ) ) L(y,F(X)) L(y,F(X))的期望 F ∗ = arg ⁡ min ⁡ F E y , x L ( y , F ( x ) ) = arg ⁡ min ⁡ F E x [ E y ( L ( y , F ( x ) ) ) ∣ x ] F^*=\arg\min_FE_{y,x}L(y,F(x))=\arg\min_FE_{x}\bigg[E_y\bigg(L\big(y,F(x)\big)\bigg)\bigg|x\bigg] F=argFminEy,xL(y,F(x))=argFminEx[Ey(L(y,F(x)))x]经常使用损失函数 L ( y , F ( x ) ) L(y,F(x)) L(y,F(x))包括平方误差 ( y − F ( x ) ) 2 (y-F(x))^2 (yF(x))2、对 y ∈ R 1 y\in R^1 yR1(回归)时的绝对误差 ∣ y − F ∣ |y-F| yF以及当 y ∈ { − 1 , 1 } y\in \{-1,1\} y{1,1}(分类)时的负伯努利对数似然 l o g ( 1 + e − 2 y F ) log(1+e^{-2yF}) log(1+e2yF)

常见的是将 F ( x ) F(x) F(x)限制为参数类函数 F ( x ; P ) F(x;P) F(x;P)中的一个,其中 P = { P 1 , P 2 , …   } P=\{P_1,P_2,\dots\} P={P1,P2,}是一个有限的参数集,其联合值标识各个类成员。本文中我们关注以下加性展式 F ( x ; { β m , a m } 1 M ) = ∑ m = 1 M β m h ( x ; a m ) (2) F(x;\{\beta_m,a_m\}_1^M)=\sum_{m=1}^M\beta_mh(x;a_m)\tag{2} F(x;{βm,am}1M)=m=1Mβmh(x;am)(2)

上式中生成函数 h ( x ; a ) h(x;a) h(x;a)通常是一个输入变量 x x x的简单的参数函数,特征参数为 a = { a 1 , a 2 , …   } a=\{a_1,a_2,\dots\} a={a1,a2,}。每一项在为这些参数选择的联合值 a m a_m am上有所不同。诸如此类的扩展是对诸如神经网络[Rumelhart, Hinton, and Williams(1986)]、径向基函数[Powell(1987)]、MARS [Friedman(1991)]、小波[Donoho(1993)]和支持向量机[Vapnik(1995)]等许多函数逼近方法的验证。这里有趣的是每个函数 h ( x ; a m ) h(x;a_m) h(x;am)都是一个小的回归树,例如CART决策树[Breiman, Friedman, Olshen and Stone (1983)]。对于回归树来说,参数 a m a_m am是单个树的分裂变量、分裂位置和终端节点均值。

1.1 数值优化

一般来说,选择一个参数模型 F ( x ; P ) F(x;P) F(x;P)把函数优化问题变为参数优化问题 P ∗ = arg ⁡ min ⁡ P Φ ( P ) P^*=\arg\min_P\Phi(P) P=argPminΦ(P)其中 Φ ( P ) = E y , x L ( y , F ( x ; P ) ) \Phi(P)=E_{y,x}L(y,F(x;P)) Φ(P)=Ey,xL(y,F(x;P)) F ∗ ( x ) = F ( x ; P ∗ ) F^*(x)=F(x;P^*) F(x)=F(x;P)

对大部分的 F ( x ; P ) F(x;P) F(x;P) L L L,求解上式一定会用到数值优化方法。这通常涉及用下式表示参数的解 P ∗ = ∑ m = 0 M p m P^*=\sum_{m=0}^Mp_m P=m=0Mpm其中 p 0 p_0 p0是初始化猜测, { p m } 1 M \{p_m\}_1^M {pm}1M是连续的增量(“步骤”或“提升”),每个步骤基于前面步骤的顺序。利用优化方法确定了计算各步 p m p_m pm的方法。

1.2 最速下降

最速下降是常用的数值最小化方法中最简单的一种。它如下定义了增量 { p m } 1 M \{p_m\}_1^M {pm}1M。首先计算当前梯度 g m g_m gm g m = { g j m } = { [ ∂ Φ ( P ) ∂ P j ] P = P m − 1 } g_m=\{g_{jm}\}=\bigg\{\bigg[{\partial\Phi(P)\over\partial P_j}\bigg]_{P=P_{m-1}}\bigg\} gm={gjm}={[PjΦ(P)]P=Pm1}这里 P m − 1 = ∑ i = 1 m − 1 p i P_{m-1}=\sum_{i=1}^{m-1}p_i Pm1=i=1m1pi然后每步取为 p m = − ρ m g m p_m=-\rho_mg_m pm=ρmgm其中 ρ m = arg ⁡ min ⁡ ρ Φ ( P m − 1 − ρ g m ) \rho_m=\arg\min_\rho\Phi(P_{m-1}-\rho g_m) ρm=argρminΦ(Pm1ρgm)负梯度 − g m -g_m gm称为最速下降方向,且上式的 ρ \rho ρ称为沿着这个方向的线性搜索。

2. 函数空间中的数值优化

在此,我们采取“非参”的方法,并将数值优化应用于函数空间。即我们将在每个点 x x x估计的 F ( x ) F(x) F(x)作为一个“参数”,并最小化 Φ ( F ) = E y , x L ( y , F ( x ) ) = E x [ E y ( L ( y , F ( x ) ) ) ∣ x ] \Phi(F)=E_{y,x}L(y,F(x))=E_x\bigg[E_y\bigg(L\big(y,F(x)\big)\bigg)\bigg|x\bigg] Φ(F)=Ey,xL(y,F(x))=Ex[Ey(L(y,F(x)))x]或等价地,在每个点 x x x直接关于 F ( x ) F(x) F(x)最小化 ϕ ( F ( x ) ) = E y [ L ( y , F ( x ) ) ∣ x ] \phi(F(x))=E_y\bigg[L\bigg(y,F(x)\bigg)\bigg|x\bigg] ϕ(F(x))=Ey[L(y,F(x))x]在函数空间中有无数这样的参数,但在(下面讨论的)数据集中只有有限个 { F ( x i ) } 1 N \{F(x_i)\}_1^N {F(xi)}1N。按照数值优化的范例,我们把解取为 F ∗ ( x ) = ∑ m = 1 M f m ( x ) F^*(x)=\sum_{m=1}^Mf_m(x) F(x)=m=1Mfm(x)其中 f 0 ( x ) f_0(x) f0(x)是初始化猜测, { f m ( x ) } 1 M \{f_m(x)\}_1^M {fm(x)}1M是由优化方法定义的增量函数(“步骤”或“提升”)。

对于最速下降 f m ( x ) = − ρ m g m ( x ) (6) f_m(x)=-\rho_mg_m(x)\tag{6} fm(x)=ρmgm(x)(6)其中 g m ( x ) = [ ∂ ϕ ( F ( x ) ) ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) = [ ∂ E y [ L ( y , F ( x ) ) ∣ x ] ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) g_m(x)=\bigg[{\partial\phi(F(x))\over\partial F(x)}\bigg]_{F(x)=F_{m-1}(x)}=\bigg[{\partial E_y\big[L\big(y,F(x)\big)\big|x\big]\over\partial F(x)}\bigg]_{F(x)=F_{m-1}(x)} gm(x)=[F(x)ϕ(F(x))]F(x)=Fm1(x)=[F(x)Ey[L(y,F(x))x]]F(x)=Fm1(x) F m − 1 ( x ) = ∑ i = 0 m − 1 f i ( x ) F_{m-1}(x)=\sum_{i=0}^{m-1}f_i(x) Fm1(x)=i=0m1fi(x)

假设有充分的正则性可以交换微分和积分,它就变成了 g m ( x ) = E y [ ∂ L ( y , F ( x ) ) ∂ F ( x ) ∣ x ] F ( x ) = F m − 1 ( x ) (7) g_m(x)=E_y\bigg[{\partial L\big(y,F(x)\big)\over\partial F(x)}\bigg|x\bigg]_{F(x)=F_{m-1}(x)}\tag{7} gm(x)=Ey[F(x)L(y,F(x))x]F(x)=Fm1(x)(7)由线性搜索给出乘数 ρ m \rho_m ρm ρ m = arg ⁡ min ⁡ ρ E y , x L ( y , F m − 1 ( x ) − ρ g m ( x ) ) (8) \rho_m=\arg\min_\rho E_{y,x}L\big(y,F_{m-1}(x)-\rho g_m(x)\big)\tag{8} ρm=argρminEy,xL(y,Fm1(x)ρgm(x))(8)

3. 有限数据

这种非参数方法在用有限数据样本 { y i , x i } 1 N \{y_i,x_i\}_1^N {yi,xi}1N来估计 ( y , x ) (y,x) (y,x)的联合分布时失效,在这种情况下 E y [ ⋅ ∣ x ] E_y[\cdot|x] Ey[x]无法通过每个样本点 x x x的数据值来准确估计,即使可能,我们也希望在 x x x值处估计 F ∗ ( x ) F^*(x) F(x)而不是在训练样本上。必须从附近的数据点得到一些帮助,通过在解上施加平滑度。一种方法是采用参数化形式,如(2),并进行1.1节中讨论的参数优化,以最小化相应的数据的期望损失估计, { β m , a m } 1 M = arg ⁡ min ⁡ { β m ′ , a m ′ } 1 M ∑ i = 1 N L ( y i , ∑ m = 1 M β m ′ h ( x i ; a m ′ ) ) \{\beta_m,a_m\}_1^M=\arg\min_{\{\beta'_m,a'_m\}_1^M}\sum_{i=1}^NL\bigg(y_i,\sum_{m=1}^M\beta'_mh(x_i;a'_m)\bigg) {βm,am}1M=arg{βm,am}1Mmini=1NL(yi,m=1Mβmh(xi;am))在这种不可行的情况下我们可以试着用“贪婪分步”方法,对 m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,,M ( β m , a m ) = arg ⁡ min ⁡ β , a ∑ i = 1 N L ( y i , F m − 1 ( x i ) + β h ( x i ; a ) ) (9) (\beta_m,a_m)=\arg\min_{\beta,a}\sum_{i=1}^NL\big(y_i,F_{m-1}(x_i)+\beta h(x_i;a)\big)\tag{9} (βm,am)=argβ,amini=1NL(yi,Fm1(xi)+βh(xi;a))(9) F m ( x ) = F m − 1 ( x ) + β m h ( x ; a m ) (10) F_m(x)=F_{m-1}(x)+\beta_mh(x;a_m)\tag{10} Fm(x)=Fm1(x)+βmh(x;am)(10)

注意,这个分步策略与逐步方法不同,后者在添加新项时重新调整先前输入的项。

在信号处理中这样的分步策略被称为“匹配的追求”(Mallat和张(1993)),其中 L ( y , F ) L(y,F) L(y,F)是均方误损失,且 { h ( x , a m ) } 1 M \{h(x,a_m)\}_1^M {h(x,am)}1M被称为基函数,通常是从一个过完备的类小波字典取得。在机器学习中,(9)、(10)被称为“boosting”,其中 y ∈ { − 1 , 1 } y\in\{-1,1\} y{1,1} L ( y , F ) L(y,F) L(y,F)要么是一个指数损失准则 e − y F e^{−yF} eyF[Freund and Schapire (1996), Schapire and Singer (1998)]要么是负二项对数似然[Friedman, Hastie and Tibshirani (2000)]。函数 h ( x ; a ) h(x;a) h(x;a)被称为“弱学习器”或“基学习器”,通常是一个分类树。

假设对于一个特定的损失 L ( y , F ) L(y,F) L(y,F)和/或基学习器 h ( x ; a ) h(x;a) h(x;a),(9)式的解很难求。给定任意逼近 F m − 1 ( x ) F_{m-1}(x) Fm1(x),(9)式 β m h ( x , a m ) \beta_mh(x,a_m) βmh(x,am)和(10)式可以看做是在步方向 h ( x ; a m ) h(x;a_m) h(x;am)为参数化的函数类 h ( x ; a ) h(x;a) h(x;a)中的一个这样的限制下,对(1)式中基于数的估计 F ∗ ( x ) F^*(x) F(x)的最佳贪婪的步骤。因此它可以看做是在这个限制下(6)式中的最速下降步。通过限制,基于数据的无约束负梯度(7)模拟 − g m ( x i ) = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) -g_m(x_i)=-\bigg[{\partial L\big(y_i,F(x_i)\big)\over\partial F(x_i)}\bigg]_{F(x)=F_{m-1}(x)} gm(xi)=[F(xi)L(yi,F(xi))]F(x)=Fm1(x)给出了在 F m − 1 ( x ) F_{m-1}(x) Fm1(x)的N维数据空间中最佳的最速下降步方向 − g m = { − g m ( x i ) } 1 N -g_m=\{-g_m(x_i)\}_1^N gm={gm(xi)}1N。然而,这种梯度只有在数据点 { x i } 1 N \{x_i\}^N_1 {xi}1N上定义,不能推广到其他的 x x x值。推广的可能性是选择参数化的类的成员 h ( x , a m ) h(x,a_m) h(x,am),它产生最平行于 − g m ∈ R N -g_m\in R^N gmRN h m = { h ( x , a m ) } 1 N h_m=\{h(x,a_m)\}_1^N hm={h(x,am)}1N。这是在数据分布上和 − g m ( x ) -g_m(x) gm(x)最高度相关的 h ( x , a ) h(x,a) h(x,a)。它可以由解下式得到 a m = arg ⁡ min ⁡ a , β ∑ i = 1 N [ − g m ( x i ) − β h ( x i ; a ) ] 2 (11) a_m=\arg\min_{a,\beta}\sum_{i=1}^N[-g_m(x_i)-\beta h(x_i;a)]^2\tag{11} am=arga,βmini=1N[gm(xi)βh(xi;a)]2(11)

这个约束的负梯度 h ( x ; a m ) h(x;a_m) h(x;am)用来替代最速下降策略中无约束的(7) − g m ( x ) -g_m(x) gm(x)。特别地,线性搜索(8)为 ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N L ( y i , F m − 1 ( x i ) + ρ h ( x i ; a m ) ) (12) \rho_m=\arg\min_\rho\sum_{i=1}^NL(y_i,F_{m-1}(x_i)+\rho h(x_i;a_m))\tag{12} ρm=argρmini=1NL(yi,Fm1(xi)+ρh(xi;am))(12)且更新的近似为 F m ( x ) = F m − 1 ( x ) + ρ m h ( x ; a m ) F_m(x)=F_{m-1}(x)+\rho_mh(x;a_m) Fm(x)=Fm1(x)+ρmh(x;am)

基本上,都是通过用 h ( x ; a ) h(x;a) h(x;a)拟合“伪响应” { y ~ i = − g m ( x i ) } 1 N \{\tilde{y}_i=-g_m(x_i)\}_1^N {y~i=gm(xi)}1N将约束应用于无约束(粗糙)的解,而不是平滑约束下获得解(9)。通过最小二乘函数的最小化(11),这允许替换比较难的最小化问题(9)的函数,这样就只有一个基于最初的标准(12)的参数优化。因此,对于任意求解(11)存在可行的最小二乘算法的 h ( x ; a ) h(x;a) h(x;a),可以使用这种方法结合前向分步加性模型来最小化任何可微的损失 L ( y , F ) L(y,F) L(y,F)。这就引出了下面使用最速下降的(通用)算法。

算法1(梯度提升Gradient Boost)

  1. F 0 ( x ) = arg ⁡ min ⁡ ρ ∑ i = 1 N L ( y i , ρ ) F_0(x)=\arg\min_\rho\sum_{i=1}^NL(y_i,\rho) F0(x)=argminρi=1NL(yi,ρ)
  2. m = 1 m=1 m=1 M M M执行:
  3. y ~ i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) ,    i = 1 , N \tilde{y}_i=-\bigg[{\partial L\big(y_i,F(x_i)\big)\over\partial F(x_i)}\bigg]_{F(x)=F_{m-1}(x)},\ \ i=1,N y~i=[F(xi)L(yi,F(xi))]F(x)=Fm1(x),  i=1,N
  4. a m = arg ⁡ min ⁡ a , β ∑ i = 1 N [ y ~ i − β h ( x i ; a ) ] 2 a_m=\arg\min_{a,\beta}\sum_{i=1}^N[\tilde{y}_i-\beta h(x_i;a)]^2 am=argmina,βi=1N[y~iβh(xi;a)]2
  5. ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N L ( y i , F m − 1 ( x i ) + ρ h ( x i ; a m ) ) \rho_m=\arg\min_\rho\sum_{i=1}^NL(y_i,F_{m-1}(x_i)+\rho h(x_i;a_m)) ρm=argminρi=1NL(yi,Fm1(xi)+ρh(xi;am))
  6. F m ( x ) = F m − 1 ( x ) + ρ m h ( x ; a m ) F_m(x)=F_{m-1}(x)+\rho_mh(x;a_m) Fm(x)=Fm1(x)+ρmh(x;am)
  7. 结束循环,结束算法

注意,任何估计条件期望(给定 x x x)的拟合准则原则上都可以用来估计算法1中第4步的(平滑的)负梯度(7)。由于许多最小二乘算法具有优越的计算性能,因此最小二乘(11)是一种自然选择。

y ∈ { − 1 , 1 } y\in\{-1,1\} y{1,1}以及只通过乘积 L ( y , F ) = L ( y F ) L(y,F)=L(yF) L(y,F)=L(yF)取决于 y y y F F F的损失函数 L ( y , F ) L(y,F) L(y,F)的特殊情况下,(9)、(10)类似的用最速下降最小化的boosting已经在机器学习文献中指出[Ratsch, Onoda and Muller (1998), Breiman (1999)]。Duffy和Helmbold(1999)巧妙地利用这个类似来激发他们的GeoLev和GeoArc程序。 y F yF yF称为“边界”(margin),并在边界值的空间而不是在函数值 F F F的空间内进行最速下降。后一种方法允许应用于更一般的损失函数,在这种损失函数中不出现边界。Drucker(1997)在AdaBoost算法的背景下采用了一种不同的将回归转换为到分类框架的策略[FreundandSchapire(1996)]。

4. 应用:加性模型

在本节中,梯度增强方法应用于几种常用的损失准则:最小二乘(LS)、最小绝对偏差(LAD)、Huber(M)和logistic二项对数似然(L)。第一个是作为“实现验证”,而其他得到了新的boosting算法。

4.1 最小二乘回归

这里 L ( y , F ) = ( y − F ) 2 / 2 L(y,F)=(y-F)^2/2 L(y,F)=(yF)2/2,算法1中第3行的伪响应为 y ~ i = y i − F m − 1 ( x i ) \tilde{y}_i=y_i-F_{m-1}(x_i) y~i=yiFm1(xi)。所以,第4行只是拟合了当前的残差,并且第5行中的线性搜索得到 ρ m = β m \rho_m=\beta_m ρm=βm,这里 β m \beta_m βm是第4行中最小化的 β \beta β。因此,在均方误差损失上的梯度提升产生了一个通常的分步算法,它迭代地拟合了当前的残差。
集成学习—GBDT(论文研读)_第1张图片

4.2 最小绝对偏差(LAD)回归

对于损失函数 L ( y , F ) = ∣ y − F ∣ L(y,F)=|y-F| L(y,F)=yF,有 y ~ i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) = s i g n ( y i − F m − 1 ( x i ) ) (13) \tilde{y}_i=-\bigg[{\partial L\big(y_i,F(x_i)\big)\over\partial F(x_i)}\bigg]_{F(x)=F_{m-1}(x)}=sign(y_i-F_{m-1}(x_i))\tag{13} y~i=[F(xi)L(yi,F(xi))]F(x)=Fm1(x)=sign(yiFm1(xi))(13)这意味着 h ( x ; a ) h(x;a) h(x;a)通过最小二乘来拟合算法1中的第4行的当前误差的sign函数。线性搜索变为 ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N ∣ y i − F m − 1 ( x i ) − ρ h ( x i ; a m ) ∣ = arg ⁡ min ⁡ ρ ∑ i = 1 N ∣ h ( x i ; a m ) ∣ ⋅ ∣ y i − F m − 1 ( x i ) h ( x i ; a m ) − ρ ∣ = m e d i a n w { y i − F m − 1 ( x i ) h ( x i ; a m ) } 1 N   ,     w i = ∣ h ( x i ; a m ) ∣ (14) \begin{aligned} \rho_m&=\arg\min_\rho\sum_{i=1}^N|y_i-F_{m-1}(x_i)-\rho h(x_i;a_m)|\\ &=\arg\min_\rho\sum_{i=1}^N|h(x_i;a_m)|\cdot |{y_i-F_{m-1}(x_i)\over h(x_i;a_m)}-\rho |\\ &=median_w\bigg\{{y_i-F_{m-1}(x_i)\over h(x_i;a_m)}\bigg\}_1^N\ ,\ \ \ w_i=|h(x_i;a_m)|\\ \end{aligned}\tag{14} ρm=argρmini=1NyiFm1(xi)ρh(xi;am)=argρmini=1Nh(xi;am)h(xi;am)yiFm1(xi)ρ=medianw{h(xi;am)yiFm1(xi)}1N ,   wi=h(xi;am)(14)

这里 m e d i a n w { ⋅ } median_w\{\cdot\} medianw{}表示关于权重 w i w_i wi的加权中位数。将(13)、(14)的结果带入算法1,再使用基学习器 h ( x ; a ) h(x;a) h(x;a)就得到了对于最小绝对偏差的boosting算法。

4.3 回归树

这里我们考虑一个特殊的情况,即每个基学习器是一个J个叶结点的回归树[Breiman, Friedman, Olshen andStone(1983)]。每一个回归树模型都有自己的加性形式 h ( x ; { b j , R j } 1 J ) = ∑ j = 1 J b j 1 ( x ∈ R j ) (15) h(x;\{b_j,R_j\}_1^J)=\sum_{j=1}^Jb_j1(x\in R_j)\tag{15} h(x;{bj,Rj}1J)=j=1Jbj1(xRj)(15)

这里 { R j } 1 J \{R_j\}_1^J {Rj}1J不相交的区域,共同覆盖了预测变量 x x x的所有联合取值空间。这些区域由对应的决策树的叶结点来表示。示性函数 1 ( ⋅ ) 1(\cdot) 1()表示为真时取1,否则取0。(15)中这些基学习器的参数为系数 { b j } 1 J \{b_j\}_1^J {bj}1J以及定义了区域边界的量 { R j } 1 J \{R_j\}_1^J {Rj}1J。这些是分裂变量和代表树的非终端节点上的分裂的那些变量的值。因为这些区域是不相交的,(15)等价于这样的预测规则:若 x ∈ R j x\in R_j xRj,则 h ( x ) = b j h(x)=b_j h(x)=bj

对于一个回归树,算法1中的第6行的更新就变成了 F m ( x ) = F m − 1 ( x ) + ρ m ∑ j = 1 J b j m 1 ( x ∈ R j m ) (16) F_m(x)=F_{m-1}(x)+\rho_m\sum_{j=1}^Jb_{jm}1(x\in R_{jm})\tag{16} Fm(x)=Fm1(x)+ρmj=1Jbjm1(xRjm)(16)这里的 { R j m } 1 J \{R_{jm}\}_1^J {Rjm}1J是在 m m m次迭代中由树的叶结点定义的区域。通过第4行中的最小二乘来构建这些区域去得到预测的伪响应 { y ~ i } 1 N \{\tilde{y}_{i}\}_1^N {y~i}1N { b j m } \{b_{jm}\} {bjm}为对应的最小二乘的系数 b j m = a v e x i ∈ R j m y ~ i b_{jm}=ave_{x_i\in R_{jm}}\tilde{y}_{i} bjm=avexiRjmy~i比例因子 ρ m \rho_m ρm为第5行中的线性搜索的解。

(16)式的更新可以等价的表示为 F m ( x ) = F m − 1 ( x ) + ∑ j = 1 J γ j m 1 ( x ∈ R j m ) (17) F_m(x)=F_{m-1}(x)+\sum_{j=1}^J\gamma_{jm}1(x\in R_{jm})\tag{17} Fm(x)=Fm1(x)+j=1Jγjm1(xRjm)(17)其中 γ j m = ρ j m b j m \gamma_{jm}=\rho_{jm}b_{jm} γjm=ρjmbjm。我们可以将(17)式看做是在每步 { 1 ( x ∈ R j m ) } 1 J \{1(x\in R_{jm})\}_1^J {1(xRjm)}1J增加了J个独立的基函数,而不是像(16)式中单独的一个加性函数。因此,在这种情况下,可以通过使用这些独立基函数(17)的最优系数进一步提高拟合的质量。这些最优系数是 { γ j m } 1 J = arg ⁡ min ⁡ { γ j } 1 J ∑ i = 1 N L ( y i , F m − 1 ( x i ) + ∑ j = 1 J γ j 1 ( x ∈ R j m ) ) \{\gamma_{jm}\}_1^J=\arg\min_{\{\gamma_{j}\}_1^J}\sum_{i=1}^NL\bigg(y_i,F_{m-1}(x_i)+\sum_{j=1}^J\gamma_j 1(x\in R_{jm})\bigg) {γjm}1J=arg{γj}1Jmini=1NL(yi,Fm1(xi)+j=1Jγj1(xRjm))由于回归树产生的区域具有不相交的性质,这就简化为 γ j m = arg ⁡ min ⁡ γ ∑ x i ∈ R j m L ( y i , F m − 1 ( x i ) + γ ) (18) \gamma_{jm}=\arg\min_{\gamma}\sum_{x_i\in R_{jm}}L\bigg(y_i,F_{m-1}(x_i)+\gamma \bigg)\tag{18} γjm=argγminxiRjmL(yi,Fm1(xi)+γ)(18)这只是在给定当前近似 F m − 1 ( x ) F_{m-1}(x) Fm1(x)的情况下,根据损失函数 L L L,每个终端节点区域进行的最优常数更新。

对于LAD回归,(18)式变为 γ j m = m e d i a n x i ∈ R j m { y i − F m − 1 ( x i ) } \gamma_{jm}=median_{x_i\in R_{jm}}\{y_i-F_{m-1}(x_i)\} γjm=medianxiRjm{yiFm1(xi)}即第 m m m次迭代时第 j j j个终端节点的当前残差的中位数。在每次迭代,回归树基于最小二乘准则来构建当前残差 y i − F m − 1 ( x i ) y_i-F_{m-1}(x_i) yiFm1(xi)的sign函数的最佳预测。然后通过在每个派生的终端节点中添加残差的中位数来更新这个近似。
集成学习—GBDT(论文研读)_第2张图片

这个算法高度地稳健,决策树只使用了每一个输入变量 x j x_j xj的阶数信息,伪响应 y ~ i \tilde{y}_i y~i只有两个值 y ~ i ∈ { − 1 , 1 } \tilde{y}_i\in\{-1,1\} y~i{1,1},终端结点的更新是基于中位数。另一种方法是建立一个树来直接最小化损失准则 t r e e m ( x ) = arg ⁡ min ⁡ J − n o d e   t r e e ∑ i = 1 N ∣ y i − F m − 1 ( x i ) − t r e e ( x i ) ∣ tree_m(x)=\arg\min_{J-node\ tree}\sum_{i=1}^N|y_i-F_{m-1}(x_i)-tree(x_i)| treem(x)=argJnode treemini=1NyiFm1(xi)tree(xi) F m ( x ) = F m − 1 ( x ) + t r e e m ( x ) F_m(x)=F_{m-1}(x)+tree_m(x) Fm(x)=Fm1(x)+treem(x)然而,算法3要快得多,因为它使用最小二乘来诱导树。当构建树的过程中搜索分割时,平方误差损失比平均绝对偏差更新得快得多。

4.4 M回归

M回归技术试图抵抗长尾误差分布和异常值,同时保持对正态分布误差的高效率。考虑Huber损失函数[Huber (1964)] L ( y , F ) = { 1 2 ( y − F ) 2 , ∣ y − F ∣ ⩽ δ δ ( ∣ y − F ∣ − δ / 2 ) , ∣ y − F ∣ > δ (19) L(y,F)=\begin{cases} {1\over2}(y-F)^2, & |y-F|\leqslant\delta\\ \delta(|y-F|-\delta/2), & |y-F|>\delta \end{cases}\tag{19} L(y,F)={21(yF)2,δ(yFδ/2),yFδyF>δ(19)这里的伪响应为 y ~ i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) = { y i − F m − 1 ( x i ) , ∣ y i − F m − 1 ( x i ) ∣ ⩽ δ δ ⋅ s i g n ( y i − F m − 1 ( x i ) ) , ∣ y i − F m − 1 ( x i ) ∣ > δ \begin{aligned} \tilde{y}_i&=-\bigg[{\partial L\big(y_i,F(x_i)\big)\over\partial F(x_i)}\bigg]_{F(x)=F_{m-1}(x)}\\ &=\begin{cases} y_i-F_{m-1}(x_i), & |y_i-F_{m-1}(x_i)|\leqslant\delta\\ \delta\cdot sign(y_i-F_{m-1}(x_i)), & |y_i-F_{m-1}(x_i)|>\delta \end{cases} \end{aligned} y~i=[F(xi)L(yi,F(xi))]F(x)=Fm1(x)={yiFm1(xi),δsign(yiFm1(xi)),yiFm1(xi)δyiFm1(xi)>δ线性搜索变为 ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N L ( y i , F m − 1 ( x i ) + ρ h ( x i ; a m ) ) (20) \rho_m=\arg\min_\rho\sum_{i=1}^NL(y_i,F_{m-1}(x_i)+\rho h(x_i;a_m))\tag{20} ρm=argρmini=1NL(yi,Fm1(xi)+ρh(xi;am))(20)这里的 L L L由(19)式给出。(19)、(20)式得解可以由标准的迭代方法得到[see Huber (1964)]。

边界点 δ \delta δ的值受绝对损失函数而不是平方误差损失控制,定义了这些被认为是“离群点”的残差值。最优值将取决于 y − F ∗ ( x ) y-F^*(x) yF(x)的分布,其中 F ∗ F^* F是真正的目标函数(1)。选择 δ \delta δ值的常见的做法是选为分布 ∣ y − F ∗ ( x ) ∣ |y-F^*(x)| yF(x) α \alpha α分位数,这里 ( 1 − α ) (1-\alpha) (1α)控制了程序的断点。这个“断点”把样本分为一部分,这部分可以任意修改而不会降低结果的质量。因为 F ∗ ( x ) F^*(x) F(x)是未知的,我们在第 m m m次迭代中使用当前估计 F m − 1 ( x ) F_{m-1}(x) Fm1(x)作为近似。 ∣ y − F m − 1 ( x ) ∣ |y-F_{m-1}(x)| yFm1(x)的分布由当前残差来估计,这样 δ m = q u a n t i l e α { ∣ y i − F m − 1 ( x i ) ∣ } 1 N \delta_m=quantile_\alpha\{|y_i-F_{m-1}(x_i)|\}_1^N δm=quantileα{yiFm1(xi)}1N

使用回归树作为基学习器,我们使用4.3节的策略,即在每个终端节点 R j m R_{jm} Rjm中单独更新(18)。对于Huber损失(19),(18)的解可以近似为从中位数开始的标准迭代过程[Huber(1964)]单个步骤 r ~ j m = m e d i a n x i ∈ R j m { r m − 1 ( x i ) } \tilde{r}_{jm}=median_{x_i\in R_{jm}}\{r_{m-1}(x_i)\} r~jm=medianxiRjm{rm1(xi)}其中 { r m − 1 ( x i ) } 1 N \{r_{m-1}(x_i)\}_1^N {rm1(xi)}1N为当前残差 r m − 1 ( x i ) = y i − F m − 1 ( x i ) r_{m-1}(x_i)=y_i-F_{m-1}(x_i) rm1(xi)=yiFm1(xi)近似为 γ j m = r ~ j m + 1 N j m ∑ x i ∈ R j m s i g n ( r m − 1 ( x i ) − r ~ j m ) ⋅ min ⁡ ( δ m , a b s ( r m − 1 ( x i ) − r ~ j m ) ) \gamma_{jm}=\tilde{r}_{jm}+{1\over N_{jm}}\sum_{x_i\in R_{jm}}sign(r_{m-1}(x_i)-\tilde{r}_{jm})\cdot \min(\delta_m,abs(r_{m-1}(x_i)-\tilde{r}_{jm})) γjm=r~jm+Njm1xiRjmsign(rm1(xi)r~jm)min(δm,abs(rm1(xi)r~jm))这里的 N j m N_{jm} Njm是在第 j j j个终端结点中的样本数。这样就给出了以下基于Huber损失的boosting回归树算法。
集成学习—GBDT(论文研读)_第3张图片
根据稳健回归背后的动机,该算法应该具有与正态分布误差的最小二乘boosting算法(Algorithm2)相似的性质,与极长尾分布的最小绝对偏差回归(算法3)相似的性质。对于只有中等长度尾部的误差分布,它的性能可能优于两者(参见第6.2节)。

4.5 二分类逻辑回归和分类

这里的损失函数为负二项对数似然(FHT00) L ( y , F ) = l o g ( 1 + e x p ( − 2 y F ) ) ,    y ∈ { − 1 , 1 } L(y,F)=log(1+exp(-2yF)),\ \ y\in\{-1,1\} L(y,F)=log(1+exp(2yF)),  y{1,1}其中 F ( x ) = 1 2 l o g [ P r ( y = 1 ∣ x ) P r ( y = − 1 ∣ x ) ] (21) F(x)={1\over2}log\bigg[{Pr(y=1|x)\over Pr(y=-1|x)}\bigg]\tag{21} F(x)=21log[Pr(y=1x)Pr(y=1x)](21)伪响应为 y ~ i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) = 2 y i / ( 1 + e x p ( 2 y i F m − 1 ( x ) ) ) (22) \tilde{y}_i=-\bigg[{\partial L(y_i,F(x_i))\over \partial F(x_i)}\bigg]_{F(x)=F_{m-1}(x)}=2y_i\big/\bigg(1+exp\big(2y_iF_{m-1}(x)\big)\bigg)\tag{22} y~i=[F(xi)L(yi,F(xi))]F(x)=Fm1(x)=2yi/(1+exp(2yiFm1(x)))(22)线性搜索变为 ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N l o g ( 1 + e x p ( − 2 y i ( F m − 1 ( x i ) + ρ h ( x i ; a m ) ) ) ) \rho_m=\arg\min_\rho\sum_{i=1}^Nlog\bigg(1+exp\big(-2y_i(F_{m-1}(x_i)+\rho h(x_i;a_m))\big)\bigg) ρm=argρmini=1Nlog(1+exp(2yi(Fm1(xi)+ρh(xi;am))))用回归树作为基学习器,我们再次使用4.3节中的办法,单独更新每个终端结点 R j m R_{jm} Rjm γ j m = arg ⁡ min ⁡ γ ∑ x i ∈ R j m l o g ( 1 + e x p ( − 2 y i ( F m − 1 ( x i ) + γ ) ) ) (23) \gamma_{jm}=\arg\min_\gamma\sum_{x_i\in R_{jm}}log\bigg(1+exp\big(-2y_i(F_{m-1}(x_i)+\gamma)\big)\bigg)\tag{23} γjm=argγminxiRjmlog(1+exp(2yi(Fm1(xi)+γ)))(23)(23)式没有闭式解。在负二项对数似然的损失函数下,我们用一个Newton–Raphson迭代步来替代,即 γ j m = ∑ x i ∈ R j m y ~ i / ∑ x i ∈ R j m ∣ y ~ i ∣ ( 2 − ∣ y ~ i ∣ ) \gamma_{jm}=\sum_{x_i\in R_{jm}}\tilde{y}_i\bigg/\sum_{x_i\in R_{jm}}|\tilde{y}_i|(2-|\tilde{y}_i|) γjm=xiRjmy~i/xiRjmy~i(2y~i)其中 y ~ i \tilde{y}_i y~i由(22)式给出。这就给出了下面用回归树的似然梯度boosting算法。
集成学习—GBDT(论文研读)_第4张图片
最后的近似 F M ( x ) F_M(x) FM(x)通过(21)式和对数几率联系起来,这样可以转化得到概率估计 p + ( x ) = P r ^ ( y = 1 ∣ x ) = 1 / ( 1 + e − 2 F M ( x ) ) p − ( x ) = P r ^ ( y = − 1 ∣ x ) = 1 / ( 1 + e 2 F M ( x ) ) p_+(x)=\hat{Pr}(y=1|x)=1/(1+e^{-2F_M(x)})\\ p_-(x)=\hat{Pr}(y=-1|x)=1/(1+e^{2F_M(x)}) p+(x)=Pr^(y=1x)=1/(1+e2FM(x))p(x)=Pr^(y=1x)=1/(1+e2FM(x))这些反过来又可以用于分类 y ^ ( x ) = 2 ⋅ 1 [ c ( − 1 , 1 ) p + ( x ) > c ( 1 , − 1 ) p − ( x ) ] − 1 \hat{y}(x)=2\cdot1[c(-1,1)p_+(x)>c(1,-1)p_-(x)]-1 y^(x)=21[c(1,1)p+(x)>c(1,1)p(x)]1其中 c ( y ^ , y ) c(\hat y,y) c(y^,y)是当真实值为 y y y预测值为 y ^ \hat y y^时有关的损失。

4.5.1 影响修剪(权重修剪)

对于二分类的逻辑回归问题在 m m m次迭代时的经验损失函数为 ϕ m ( ρ , a ) = ∑ i = 1 N l o g [ 1 + e x p ( − 2 y i F m − 1 ( x i ) ) ⋅ e x p ( − 2 y i ρ h ( x i ; a ) ) ] (24) \phi_m(\rho,a)=\sum_{i=1}^Nlog[1+exp(-2y_iF_{m-1}(x_i))\cdot exp(-2y_i\rho h(x_i;a))]\tag{24} ϕm(ρ,a)=i=1Nlog[1+exp(2yiFm1(xi))exp(2yiρh(xi;a))](24)
y i F m − 1 ( x i ) y_iF_{m-1}(x_i) yiFm1(xi)非常大,则对于接近于零的很小到一般的数(24)式都几乎不相关于 ρ h ( x i ; a ) \rho h(x_i;a) ρh(xi;a)。这意味着第 i i i个样本 ( y i , x i ) (y_i,x_i) (yi,xi)对损失函数几乎没有影响,因此在其解也没有影响 ( ρ m , a m ) = arg ⁡ min ⁡ ρ , a ϕ m ( ρ , a ) (\rho_m,a_m)=\arg\min_{\rho,a}\phi_m(\rho,a) (ρm,am)=argρ,aminϕm(ρ,a)这表明可以从第 m m m次迭代的所有计算中删除所有的那些 y i F m − 1 ( x i ) y_iF_{m-1}(x_i) yiFm1(xi)相对很大的样本 ( y i , x i ) (y_i,x_i) (yi,xi),而不会对结果产生实质性的影响。因此 w i = e x p ( − 2 y i F m − 1 ( x i ) ) (25) w_i=exp(-2y_iF_{m-1}(x_i))\tag{25} wi=exp(2yiFm1(xi))(25)可以看作是第 i i i个样本在估计 ρ h ( x ; a m ) \rho h(x;a_m) ρh(x;am)上的影响或者权重的一种度量。

更一般地,从第2节的非参数函数空间角度来看,参数为样本函数值 { F ( x i ) } 1 N \{F(x_i)\}_1^N {F(xi)}1N。对于“参数”值 F ( x i ) F(x_i) F(xi)(保持所有其他参数固定)的变化,估计的影响可以用损失函数关于这个参数求二阶导数来衡量。这里在第 m m m次迭代中的二阶导数为 ∣ y ~ i ∣ ( 2 − ∣ y ~ i ∣ ) |\tilde{y}_i|(2-|\tilde{y}_i|) y~i(2y~i),其中 ∣ y ~ i ∣ |\tilde{y}_i| y~i由(22)给出。因此,另一种衡量第 m m m次迭代中第 i i i个样本在估计 ρ h ( x ; a m ) \rho h(x;a_m) ρh(x;am)上的影响或者权重的方法为 w i = ∣ y ~ i ∣ ( 2 − ∣ y ~ i ∣ ) w_i=|\tilde{y}_i|(2-|\tilde{y}_i|) wi=y~i(2y~i)

影响修剪就是删除那些 w i w_i wi值小于 w l ( α ) w_{l(\alpha)} wl(α)的所有样本,这里 l ( α ) l(\alpha) l(α)是下式的解 ∑ i = 1 l ( α ) w i = α ∑ I = 1 N w i (27) \sum_{i=1}^{l(\alpha)}w_i=\alpha\sum_{I=1}^Nw_i\tag{27} i=1l(α)wi=αI=1Nwi(27)这里 { w ( i ) } 1 N \{w_{(i)}\}_1^N {w(i)}1N是将权重 { w i } 1 N \{w_{i}\}_1^N {wi}1N以升序排列,特殊值是 α ∈ [ 0.05 , 0.2 ] \alpha\in[0.05,0.2] α[0.05,0.2]。注意,基于(25)、(27)的影响修剪与Real AdaBoost使用的“权重修剪”策略相同,而(26)、(27)与FHT00中使用的LogitBoost相同。在那里可以看到,使用任何一种影响度量,90%到95%的样本常被删除,而不牺牲估计的准确性。这使得计算量相应减少了10到20倍。

4.6 多分类逻辑回归和分类

这里我们得到了一个 K K K分类问题的梯度下降boosting算法。损失函数为 L ( { y k , F k ( x ) } 1 K ) = − ∑ k = 1 K y k log ⁡ p k ( x ) (28) L(\{y_k,F_k(x)\}_1^K)=-\sum_{k=1}^Ky_k\log p_k(x)\tag{28} L({yk,Fk(x)}1K)=k=1Kyklogpk(x)(28)其中 y k = 1 ( c l a s s = k ) ∈ { 0 , 1 } y_k=1(class=k)\in\{0,1\} yk=1(class=k){0,1} p k ( x ) = P r ( y k = 1 ∣ x ) p_k(x)=Pr(y_k=1|x) pk(x)=Pr(yk=1x)。在FHT00之后,我们使用对称的多重逻辑变换 F k ( x ) = log ⁡ p k ( x ) − 1 K ∑ l = 1 K log ⁡ p l ( x ) (29) F_k(x)=\log p_k(x)-{1\over K}\sum_{l=1}^K\log p_l(x)\tag{29} Fk(x)=logpk(x)K1l=1Klogpl(x)(29)或者等价地 p k ( x ) = exp ⁡ ( F k ( x ) ) / ∑ l = 1 K exp ⁡ ( F l ( x ) ) (30) p_k(x)=\exp(F_k(x))\bigg/\sum_{l=1}^K\exp(F_l(x))\tag{30} pk(x)=exp(Fk(x))/l=1Kexp(Fl(x))(30)将(30)代入(28),求一阶导数得到 y ~ i k = − [ ∂ L ( { y i l , F l ( x i ) } l = 1 K ) ∂ F k ( x i ) ] { F l ( x ) = F l , m − 1 ( x ) } 1 K = y i k − p k , m − 1 ( x i ) (31) \tilde{y}_{ik}=-\bigg[{\partial L(\{y_{il},F_l(x_i)\}_{l=1}^K)\over \partial F_k(x_i)}\bigg]_{\{F_l(x)=F_{l,m-1}(x)\}_1^K}=y_{ik}-p_{k,m-1}(x_i)\tag{31} y~ik=[Fk(xi)L({yil,Fl(xi)}l=1K)]{Fl(x)=Fl,m1(x)}1K=yikpk,m1(xi)(31)这里 p k , m − 1 ( x ) p_{k,m-1}(x) pk,m1(x)是通过(30)式从 F k , m − 1 ( x ) F_{k,m-1}(x) Fk,m1(x)中推得。因此,在每个迭代 m m m中引入 K K K树来预测每个类在概率尺度上的相应的当前残差。这些树每个都有 J J J个终端结点,对应区域为 { R j k m } j = 1 J \{R_{jkm}\}_{j=1}^J {Rjkm}j=1J。模型更新 γ j k m \gamma_{jkm} γjkm相当于这些区域是下式的解 { γ j k m } = arg ⁡ min ⁡ { γ j k } ∑ i = 1 N ∑ k = 1 K ϕ ( y i k , F k , m − 1 ( x i ) + ∑ j = 1 J γ j k 1 ( x i ∈ R j m ) ) \{\gamma_{jkm}\}=\arg\min_{\{\gamma_{jk}\}}\sum_{i=1}^N\sum_{k=1}^K\phi\bigg(y_{ik},F_{k,m-1}(x_i)+\sum_{j=1}^J\gamma_{jk}1(x_i\in R_{jm})\bigg) {γjkm}=arg{γjk}mini=1Nk=1Kϕ(yik,Fk,m1(xi)+j=1Jγjk1(xiRjm))其中由(28)式 ϕ ( y k , F k ) = − y k log ⁡ p k \phi(y_k,F_k)=-y_k\log p_k ϕ(yk,Fk)=yklogpk F k F_k Fk由(30)式和 p k p_k pk有关。它没有闭式解,此外,不同类别的树所对应的区域是重叠的,这样解就不会像(18)那样,在每棵树的每个区域中进行单独的计算。在FHT00之后,我们用单个Newton–Raphson步骤来近似解,使用对海森的对角近似。这将问题分解为每个树的每个终端节点的单独计算。结果为 γ j k m = K − 1 K ∑ x i ∈ R j k m y ~ i k ∑ x i ∈ R j k m ∣ y ~ i k ∣ ( 1 − ∣ y ~ i k ∣ ) (32) \gamma_{jkm}={K-1\over K}{\sum_{x_i\in R_{jkm}}\tilde{y}_{ik}\over\sum_{x_i\in R_{jkm}}|\tilde{y}_{ik}|(1-|\tilde{y}_{ik}|)}\tag{32} γjkm=KK1xiRjkmy~ik(1y~ik)xiRjkmy~ik(32)

这样就得到了下面的 K K K分类问题的逻辑梯度下降boosting算法。
集成学习—GBDT(论文研读)_第5张图片
最后的估计 { F k M ( x ) } 1 K \{F_{kM}(x)\}_1^K {FkM(x)}1K可以通过(30)式用来得到对应的概率估计 { p k M ( x ) } 1 K \{p_{kM}(x)\}_1^K {pkM(x)}1K。这些反过来又可以用于分类 k ^ ( x ) = arg ⁡ min ⁡ 1 ⩽ k ⩽ K ∑ k ′ = 1 K c ( k , k ′ ) p k ′ M ( x ) \hat k(x)=\arg\min_{1\leqslant k\leqslant K}\sum_{k'=1}^Kc(k,k')p_{k'M}(x) k^(x)=arg1kKmink=1Kc(k,k)pkM(x)这里 c ( k , k ′ ) c(k,k') c(k,k)表示当真实是 k ′ k' k预测为 k k k类时的损失。注意对 K = 2 K=2 K=2,算法6等价于算法5。

算法6与FHT00的 K K K分类的LogitBoost过程相似,该过程是基于Newton–Raphson而不是函数空间中的梯度下降。在该算法中, K K K棵树被诱导,每棵树都对每个样本 ( y ~ i k , x i ) (\tilde{y}_{ik},x_i) (y~ik,xi)使用相应的伪响应 y ~ i k = K − 1 K y i k − p k ( x i ) p k ( x i ) ( 1 − p k ( x i ) ) (33) \tilde{y}_{ik}={K-1\over K}{y_{ik}-p_k(x_i)\over p_k(x_i)(1-p_k(x_i))}\tag{33} y~ik=KK1pk(xi)(1pk(xi))yikpk(xi)(33)以及权重 w k ( x i ) = p k ( x i ) ( 1 − p k ( x i ) ) (34) w_k(x_i)=p_k(x_i)(1-p_k(x_i))\tag{34} wk(xi)=pk(xi)(1pk(xi))(34)终端结点的更新为 γ j k m = ∑ x i ∈ R j k m w k ( x i ) y ~ i k ∑ x i ∈ R j k m w k ( x i ) \gamma_{jkm}={\sum_{x_i\in R_{jkm}}w_k(x_i)\tilde{y}_{ik}\over \sum_{x_i\in R_{jkm}}w_k(x_i)} γjkm=xiRjkmwk(xi)xiRjkmwk(xi)y~ik这和(32)式等价。这两种算法的区别在于用于诱导树和最终区域的分裂准则 { R j k m } 1 J \{R_{jkm}\}_1^J {Rjkm}1J

用于评估一个当前终端区域 R R R可能分裂为两个子区域 ( R l , R r ) (R_l,R_r) (Rl,Rr)的最小二乘改进准则为 i 2 ( R l , R r ) = w l w r w l + w r ( y ˉ l − y ˉ r ) 2 (35) i^2(R_l,R_r)={w_lw_r\over w_l+w_r}(\bar y_l-\bar y_r)^2\tag{35} i2(Rl,Rr)=wl+wrwlwr(yˉlyˉr)2(35)其中 y ˉ l , y ˉ r \bar y_l,\bar y_r yˉl,yˉr分别为左、右两边的子响应均值, w l , w r w_l,w_r wl,wr为对应的权重之和。对于一个给定的分裂,利用带单位权重的(31)式或者带权重(34)式的(33)式,得到 y ˉ l , y ˉ r \bar y_l,\bar y_r yˉl,yˉr有相同的值。然而,权重之和 w l , w r w_l,w_r wl,wr是不同的。单位权重( L K L_K LK_TreeBoost)偏向在每个子节点中关于样本数对称的分裂,然而(34)(LogitBoost)偏向使得当前估计的响应方差 v a r ( y i k ) = p k ( x i ) ( 1 − p k ( x i ) ) var (y_{ik})=p_k(x_i)(1-p_k(x_i)) var(yik)=pk(xi)(1pk(xi))之和更相等的分裂。

在数值稳定性上 L K L_K LK_TreeBoost具有实际优势,当对于任何样本 x i x_i xi,(34)的值接近于0时,LogitBoost在数值上变得不稳定,这种现象经常发生。这是Newton–Raphson所面临的二阶导数消失的困难的结果。它的性能受到处理这个问题的方式的强烈影响(参见FHT00)。 L K L_K LK_TreeBoost只有当(34)对一个终端节点的所有样本值接近于0时才会出现这种困难。这种情况发生的频率要低得多,发生时也更容易处理。

多分类过程的影响修剪与第4.5.1节中概述的二分类情况的影响修剪的实现方法相同。与每个“样本” ( y i k , x i ) (y_{ik},x_i) (yik,xi)有关的是一个影响 w i k = ∣ y ~ i k ∣ ( 1 − ∣ y ~ i k ∣ ) w_{ik}=|\tilde{y}_{ik}|(1-|\tilde{y}_{ik}|) wik=y~ik(1y~ik),当诱导第 k k k颗树时它用于在当前迭代 m m m中删除样本(27)。

5. 正则化

在预测问题中,过于紧密地拟合训练数据可能会适得其反。将除了一些点的训练数据上的期望损失减少,将导致分布的期望损失停止下降,并常常开始增加。正则化方法试图通过约束拟合过程来防止这种“过拟合”。对于加性展式(2),一个自然的正则化参数是项的数量 M M M,这类似于分步回归,其中 { h ( x ; a m ) } 1 M \{h(x;a_m)\}_1^M {h(x;am)}1M被认为是依次加入的解释变量。控制 M M M的值可以调节训练数据上期望损失最小化的程度。 M M M的最佳值可以通过一些模型选择方法来估计,比如使用一个独立的“测试”集,或者交叉验证。

通过控制展式中的项的数量来进行正则化,这就隐含了一种先验信念,即“稀疏”近似的项数越少,预测效果越好。然而,人们经常发现,通过收缩实现的正则化比通过限制项的数量实现的正则化效果更好[Copas(1983)]。在以前向分步规则(9)(10)构造的可加性模型(2)中,一个简单的收缩策略是将通用算法(算法1)的第6行替换为 F m ( x ) = F m − 1 ( x ) + ν ⋅ ρ m h ( x ; a m ) ,     0 < ν ⩽ 1 (36) F_m(x)=F_{m-1}(x)+\nu\cdot\rho_mh(x;a_m),\ \ \ 0<\nu\leqslant 1\tag{36} Fm(x)=Fm1(x)+νρmh(x;am),   0<ν1(36)且在所有特定的算法(算法2-6)中作相应的等价变化。每次更新都是简单地根据“学习率”参数 ν \nu ν的值进行缩放。

以这种方式引入收缩到梯度提升(36),提供了两种正则化参数,学习速率 ν \nu ν和项的数量 M M M。任何一个都可以控制拟合的程度,从而影响到另一个的最佳值。减少 ν \nu ν的值会增加 M M M的最佳值。理想地,我们应该同时最小化关于这两个参数的模型选择准则来估计这两个的最优值。这里还有计算方面的考虑,增加 M M M的大小会使计算量按比例增加。

我们通过模拟实验来阐述这样的 ν − M \nu-M νM之间的权衡。训练集有5000个样本 { y i , x i } \{y_i,x_i\} {yi,xi}组成,其中 y i = F ∗ ( x i ) + ϵ i y_i=F^*(x_i)+\epsilon_i yi=F(xi)+ϵi目标函数 F ∗ ( x i ) ,   x ∈ R 10 F^*(x_i),\ x\in R^{10} F(xi), xR10是由6.1节中描述那样随机生成的,噪音 ϵ \epsilon ϵ是由零均值的正态分布生成,方差调整以满足在给定2/1的信噪比下 E ∣ ϵ ∣ = 1 2 E x ∣ F ∗ ( x ) − m e d i a n x F ∗ ( x ) ∣ E|\epsilon|={1\over2}E_x|F^*(x)-median_xF^*(x)| Eϵ=21ExF(x)medianxF(x)对于这个阐述,基学习器 h ( x ; a ) h(x;a) h(x;a)取为11个终端节点的以最佳优先的方式诱导(FHT00)的回归树。关于树大小选择的一般性讨论在第7节。

图1显示了对于不同的收缩参数 ν ∈ { 1.0 , 0.25 , 0.125 , 0.06 } \nu\in\{1.0,0.25,0.125,0.06\} ν{1.0,0.25,0.125,0.06} L S LS LS_TreeBoost、 L A D LAD LAD_TreeBoost和 L 2 L_2 L2_TreeBoost的拟合损失(LOF)作为项的数量(迭代次数) M M M的函数。对前两种方法,LOF是由估计 F ^ M ( x ) \hat F_M(x) F^M(x)相对于最优常数解的平均绝对误差来度量的 A ( F ^ M ( x ) ) = E x ∣ F ∗ ( x ) − F ^ M ( x ) ∣ E x ∣ F ∗ ( x ) − m e d i a n x F ∗ ( x ) ∣ A(\hat F_M(x))={E_x|F^*(x)-\hat F_M(x)|\over E_x|F^*(x)-median_xF^*(x)|} A(F^M(x))=ExF(x)medianxF(x)ExF(x)F^M(x)对于逻辑回归的 y y y值,是在 x x x值的分布上把 F ∗ ( x ) F^*(x) F(x)的中位数作为阈值来得到的; F ∗ ( x i ) F^*(x_i) F(xi)的值比中位数大则 y i = 1 y_i=1 yi=1,比中位数小则 y i = − 1 y_i=-1 yi=1。因此贝叶斯错误率为零,但是决策边界相当的复杂。对 L 2 L_2 L2_TreeBoost有两种LOF计算方法;负二倍对数似然(偏差)和分类错误率 E x [ 1 ( y ≠ s i g n ( F ^ M ( x ) ) ) ] E_x[1(y\neq sign(\hat F_M(x)))] Ex[1(y=sign(F^M(x)))]。所有LOF测量值都是通过使用一个包含10,000个观测值的独立验证集来计算的。

如图1所示,小的收缩参数 ν \nu ν(收缩)被认为导致更好的性能,尽管存在收益递减的最小值。对于较大的值,可以观察到过拟合的行为特征;性能达到 M M M的某个值时达到最优,之后随着 M M M的增加而降低。这种效果在 L A D LAD LAD_TreeBoost和 L 2 L_2 L2_TreeBoost的错误率标准下不太明显。对较小的 ν \nu ν,可以减少过度拟合,正如所预期的那样。

尽管除了 ν = 1 \nu=1 ν=1很难看到分类错误率(右下)在逻辑似然可能已经达到最佳(左下)继续减少。因此,通过过拟合来降低似然实际上改善了分类错误率。尽管这可能违反直觉,但这并不矛盾;似然和错误率度量了拟合质量的不同方面。错误率只取决于 F ^ M ( x ) \hat F_M(x) F^M(x)的符号而似然受其符号和量级的影响。显然,过拟合降低了量级估计的质量而不影响(有时改进)符号。因此,分类错误率对过度拟合的敏感性要小得多。

表1总结了包括如图1所示的几个 ν \nu ν值的模拟结果。显示了每个 ν \nu ν值(行)到达最低LOF的的迭代次数和相应的最小值(双列)。

ν − M \nu-M νM之间的权衡一览无遗; ν \nu ν的较小产生较大的最佳 M M M值,他们还提供更高的精度, ν < 0.125 \nu<0.125 ν<0.125时收益递减。分类错误率当 M ≳ 200 M\gtrsim200 M200非常平缓,因此最佳 M M M值不稳定。

虽然这里只阐述了一个目标函数和基学习器(11个终端节点树),但这些结果的定性性质是相当普遍的,其他的目标函数和树的大小(未显示)会导致相同的行为。这表明 ν \nu ν的最佳值取决于迭代次数 M M M。后者应该在计算方便或者可行的时候尽可能大。 ν \nu ν值应该调整使得LOF达到其最小值,接近选择的 M M M值。如果LOF在最后迭代时仍在减小, ν \nu ν值或迭代次数 M M M应该增加,最好是后者。考虑到算法的顺序性,它可以很容易地在以前完成的地方重新启动,因此不需要重复计算。LOF作为迭代次数的函数,最方便的估计方法是使用遗漏的测试样本。

如这里所示,降低学习速率可以明显地提高性能,通常是显著地提高性能。其原因尚不清楚。在每次迭代中收缩模型更新(36)产生的效果比整个模型的成比例收缩更复杂 F ^ ν ( x ) = y ˉ + ν ⋅ ( F ^ M ( x ) − y ˉ ) \hat F_\nu(x)=\bar y+\nu\cdot(\hat F_M(x)-\bar y) F^ν(x)=yˉ+ν(F^M(x)yˉ)其中 F ^ M ( x ) \hat F_M(x) F^M(x)是没有收缩的模型得到的。每个迭代中的更新 ρ m h ( x ; a m ) \rho_mh(x;a_m) ρmh

你可能感兴趣的:(机器学习)