提升方法(boost)

文章目录

  • 提升方法(boost)
    • 1. 前向分步算法
      • 1.1. 算法流程
    • 2. adaboost
      • 2.1. 算法流程
      • 2.2. adaboost的误差分析
    • 3. adaboost与前向分步算法
    • 4. 提升树
      • 4.1. 分类提升树
      • 4.2. 回归提升树
        • 4.2.1. 算法流程
    • 5. 梯度提升
        • 5.1. 算法流程

提升方法(boost)

  提升方法(boost)的基本思路就是学习一堆弱学习器(精度低),组合成一个强学习器(精度高),即把弱学习方法"提升"为强学习方法。所以有两个问题贯彻提升方法整个过程,第一个问题是如何学习每个弱学习器,使得各个弱学习器可以优劣互补,例如可以改变弱学习器学习过程中的训练数据的权值分布或概率分布;第二个问题是如何组合成一个强学习器,例如简单的加法模型。

1. 前向分步算法

  先介绍前方分步算法(forward stagewise algorithm),前向分步算法是adaboost与提升树的基础。前向分步算法若按统计学习方法三要素看,属于三要素中的学习要素,但隐含的也限定了模型要素为加法模型(加权加法模型),并未对策略要素中的损失函数做出要求。
  前方分步算法比较简单,其主要思想是通过分步的方法,化简优化问题。直接看其算法流程如下:

1.1. 算法流程

输入:训练数据 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}) \dots (x_{N},y_{N})\} T={(x1,y1),(x2,y2)(xN,yN)};弱学习器集合 { b 1 ( x ; γ ) , b 2 ( x ; γ ) … b M ( x ; γ ) } \{b_{1}(x;\gamma),b_{2}(x;\gamma) \dots b_{M}(x;\gamma)\} {b1(x;γ),b2(x;γ)bM(x;γ)} γ \gamma γ为相应弱学习器的模型参数;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
输出:强学习器 F ( x ) F(x) F(x)
执行流程:

  1. 初始化 b 0 ( x ) = 0 b_{0}(x)=0 b0(x)=0
  2. 对每个弱学习器 b m ( x ) , m = 1 , 2 … M b_{m}(x),m=1,2 \dots M bm(x)m=1,2M,前m-1个弱学习器已经确定,按 a r g min ⁡ γ , β m ∑ i = 1 N L ( y i , ∑ j = 0 m − 1 β j b j ( x i ) + β m b m ( x i ; γ ) ) arg\min\limits_{\gamma,\beta_{m}} \sum\limits_{i=1}^{N}L(y_{i},\sum\limits_{j=0}^{m-1}\beta_{j}b_{j}(x_{i})+\beta_{m}b_{m}(x_{i};\gamma)) argγ,βmmini=1NL(yi,j=0m1βjbj(xi)+βmbm(xi;γ))学习 b m ( x ) b_{m}(x) bm(x)的模型参数 γ \gamma γ以及系数参数 β m \beta_{m} βm,可以看成 b m ( x ) b_{m}(x) bm(x)学习了前m-1个学习器与实际输出的误差。
  3. 得到加权模型 F ( x ) = ∑ j = 1 M β j b j ( x ) F(x)=\sum\limits_{j=1}^{M}\beta_{j}b_{j}(x) F(x)=j=1Mβjbj(x)

  这样,前向分步算法就把一次求解M个 β \beta β γ \gamma γ的问题( 2 M 2M 2M个变量的一个优化问题),化简为分步求解 M M M个优化问题中的 β \beta β γ \gamma γ(2个变量的优化问题)。


2. adaboost

  adaboost(adaptive boost,适应提升方法)是一种十分有代表性的提升方法,它能适应弱学习器各自的训练误差率。adaboost最初只适用于二分类问题,Schapire与Singer将它扩展到多分类问题。
  还以二分类问题为例,adaboost算法通过降低前一轮弱分类器学习过程中被正确分类的数据的权重,提高前一轮弱分类器学习过程中被误分类的数据权重,使得被误分类的数据在后一轮弱分类器的学习中被重点关注;adaboost通过加权求和的方法组合弱分类器,分类误差低的弱分类器权重高,分类误差高的弱分类器权重低。所以整个过程有两套权重数据的权重以及弱分类器的权重

2.1. 算法流程

输入:训练数据 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}) \dots (x_{N},y_{N})\} T={(x1,y1),(x2,y2)(xN,yN)};弱分类器集合 { b 1 ( x ; γ ) , b 2 ( x ; γ ) … b M ( x ; γ ) } \{b_{1}(x;\gamma),b_{2}(x;\gamma) \dots b_{M}(x;\gamma)\} {b1(x;γ),b2(x;γ)bM(x;γ)} b m ( x ) b_{m}(x) bm(x)输出就是弱分类器的分类结果, γ \gamma γ为相应弱分类器的模型参数;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
输出:强分类器 F ( x ) F(x) F(x)
执行流程:

  1. 初始化数据权重 D = { ω 1 , ω 2 … ω N } = { 1 N , 1 N … 1 N } 1 ∗ N D=\{\omega_{1},\omega_{2}\dots \omega_{N}\}=\{\frac{1}{N},\frac{1}{N}\dots \frac{1}{N}\}_{1\ast N} D={ω1,ω2ωN}={N1,N1N1}1N
  2. 对每个弱分类器 b m ( x ) , m = 1 , 2 … M b_{m}(x),m=1,2 \dots M bm(x)m=1,2M,前m-1个弱分类器已经确定,使用带权值的数据训练基本分类器 b m ( x ) b_{m}(x) bm(x),计算其误差 e m = ∑ i = 1 N ω m i ( I ( y i    ≠ b m ( x i ; γ ) ) ) e_{m}=\sum\limits_{i=1}^{N} \omega_{mi}(I(y_{i}~~\ne b_{m}(x_{i};\gamma))) em=i=1Nωmi(I(yi  ̸=bm(xi;γ))) 其中 ω m i \omega_{mi} ωmi表示第 m m m个弱分类器对第 i i i条数据的权重, I ( ⋅ ) I(·) I()为指示函数;
  3. 计算 b m ( x ) b_{m}(x) bm(x)的弱分类器权重 α m \alpha_{m} αm如下,对数以2为底, α m = 1 2 log ⁡ 1 − e m e m \alpha_{m}=\frac{1}{2}\log{\frac{1-e_{m}}{e_{m}}} αm=21logem1em
  4. 更新数据权重参数如下 (1) ω m + 1 , i = ω m i Z m exp ⁡ ( − α m y i b m ( x i ) ) \omega_{m+1,i}=\frac{\omega_{mi}}{Z_{m}}\exp{(-\alpha_{m}y_{i}b_{m}(x_{i}))}\tag{1} ωm+1,i=Zmωmiexp(αmyibm(xi))(1) (2) Z m = ∑ i = 1 N ω m i exp ⁡ ( − α m y i b m ( x i ) ) Z_{m}=\sum\limits_{i=1}^{N}\omega_{mi}\exp{(-\alpha_{m}y_{i}b_{m}(x_{i}))}\tag{2} Zm=i=1Nωmiexp(αmyibm(xi))(2)
  5. m ≠ M m \neq M m̸=M,令 m = m + 1 m=m+1 m=m+1,递归回到步骤2;
  6. 最终得到强分类器 f ( x ) = ∑ i = 1 M α i b i ( x ) f(x)=\sum\limits_{i=1}^{M}\alpha_{i}b_{i}(x) f(x)=i=1Mαibi(x) F ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ i = 1 M α i b i ( x ) ) F(x)=sign(f(x))=sign(\sum\limits_{i=1}^{M}\alpha_{i}b_{i}(x)) F(x)=sign(f(x))=sign(i=1Mαibi(x))

  从步骤2的角度看,adaboost用的是0-1损失函数,但是从前向分步算法看,adaboost用的指数损失函数,后面会详细说明。
  在详细说一下步骤2中,"使用带权值的数据"的含义,最初看到这里一直不太清楚其含义,《统计学习方法》中给的adaboost的例子甚至可能会误导你,让你觉得步骤2的学习依据是 e m = a r g min ⁡ γ ∑ i = 1 N ω m i ( I ( y i ≠ b m ( x i ; γ ) ) ) e_{m}=arg\min\limits_{\gamma}\sum\limits_{i=1}^{N} \omega_{mi}(I(y_{i}\neq b_{m}(x_{i};\gamma))) em=argγmini=1Nωmi(I(yi̸=bm(xi;γ)))。其实当你详细看sklearn中的分类方法时,分类器的学习往往是包含权重的,在sklearn中样本权重sample_weight一般在类方法fit中传入,笔者看了一下CART分类树方法如何使用带权重的数据,这一过程在类criterion中实现,大体就是,如果sample_weight=None,则每条记录带的权重 w = 1 w=1 w=1,如果sample_weight ≠ \neq ̸=None,则每条记录的权重 w w w就是传入的权重,在计算基尼指数时,概率的极大似然估计其实是用的 w w w,即 w 的 和 w 的 和 \frac{w的和}{w的和} ww。下面给出了sklearn中,继承了criterion类的ClassificationCriterion类的init()类方法中关于权值的使用,sample_weight即是传入的样本权值列表。

        for p in range(start, end):
            i = samples[p]

            # w is originally set to be 1.0, meaning that if no sample weights
            # are given, the default weight of each sample is 1.0
            if sample_weight != NULL:
                w = sample_weight[i]

            # Count weighted class frequency for each target
            for k in range(self.n_outputs):
                c =  y[i * y_stride + k]
                sum_total[k * self.sum_stride + c] += w

            self.weighted_n_node_samples += w

  在看一下 e m e_{m} em α m \alpha_{m} αm,不难看出 e m ∈ [ 0 , 1 ] e_{m} \in [0,1] em[0,1] α m ∈ [ − ∞ , ∞ ] \alpha_{m} \in [-\infty,\infty] αm[,] e m e_{m} em增大, α m \alpha_{m} αm会随之变小。当误差 e m e_{m} em较大,说明 b m ( x ) b_{m}(x) bm(x)不够好, α m \alpha_{m} αm较小, b m ( x ) b_{m}(x) bm(x)在最终分类器的权值也会较小,同时看步骤4中的参数更新,当 α m \alpha_{m} αm较小, e x p ( − α m y i b m ( x i ) ) exp(-\alpha_{m}y_{i}b_{m}(x_{i})) exp(αmyibm(xi))趋于1, ω m + 1 , i \omega_{m+1,i} ωm+1,i会近似等于 ω m , i \omega_{m,i} ωm,i,可见前一个弱分类器效果不好,会近似地延用数据权重到后一个弱分类器。这样的设计很巧妙。极端情况下, e m = 0 或 1 e_{m}=0或1 em=01 α m = ∞ 或 − ∞ \alpha_{m}=\infty或-\infty αm=,说明弱分类器十分可靠或者反向十分可靠;当 e m = 0.5 e_{m}=0.5 em=0.5 α m = 0 \alpha_{m}=0 αm=0,说明弱分类器十分不可靠。
   F ( x ) F(x) F(x)的符号决定实例x的类, F ( x ) F(x) F(x)的绝对值表示分类的确信度。

2.2. adaboost的误差分析

  adaboost的本质是在学习过程中不断减少训练误差。关于其训练误差上界,有如下定理:
1 N ∑ i = 1 N I ( F ( x i ) ≠ y i ) ≤ 1 N ∑ i = 1 N exp ⁡ ( − y i f ( x i ) ) = ∏ m = 1 M Z m \frac{1}{N}\sum\limits_{i=1}^{N}I(F(x_{i}) \neq y_{i}) \leq \frac{1}{N}\sum\limits_{i=1}^{N} \exp{(-y_{i} f(x_{i}))} = \prod \limits_{m=1}^{M} Z_{m} N1i=1NI(F(xi)̸=yi)N1i=1Nexp(yif(xi))=m=1MZm

证明:
F ( x i ) = y i F(x_{i}) = y_{i} F(xi)=yi I ( F ( x i ) ≠ y i ) = 0 ≤ exp ⁡ ( − y i f ( x i ) ) I(F(x_{i}) \neq y_{i})=0 \leq \exp{(-y_{i}f(x_{i}))} I(F(xi)̸=yi)=0exp(yif(xi))
F ( x i ) ≠ y i F(x_{i}) \neq y_{i} F(xi)̸=yi − f ( x i ) ⋅ y i > 0 -f(x_{i})·y_{i} > 0 f(xi)yi>0 I ( F ( x i ) ≠ y i ) = 1 ≤ exp ⁡ ( − y i f ( x i ) ) I(F(x_{i}) \neq y_{i})=1 \leq \exp{(-y_{i}f(x_{i}))} I(F(xi)̸=yi)=1exp(yif(xi))
所以 I ( F ( x i ) ≠ y i ) ≤ exp ⁡ ( − y i f ( x i ) ) I(F(x_{i}) \neq y_{i})\leq \exp{(-y_{i}f(x_{i}))} I(F(xi)̸=yi)exp(yif(xi))。第一个不等式证毕,下面证明第二个等式。
需要用到 ω 1 i = 1 N \omega_{1i}=\frac{1}{N} ω1i=N1以及 ( 1 ) (1) (1) ω m + 1 , i = ω m i Z m exp ⁡ ( − α m y i b m ( x i ) ) \omega_{m+1,i}=\frac{\omega_{mi}}{Z_{m}}\exp{(-\alpha_{m}y_{i}b_{m}(x_{i}))} ωm+1,i=Zmωmiexp(αmyibm(xi)),和其等价变换 (3) Z m ω m + 1 , i = ω m i exp ⁡ ( − α m y i b m ( x i ) ) Z_{m}\omega_{m+1,i}=\omega_{mi}\exp{(-\alpha_{m}y_{i}b_{m}(x_{i}))} \tag{3} Zmωm+1,i=ωmiexp(αmyibm(xi))(3)

1 N ∑ i = 1 N exp ⁡ ( − y i f ( x i ) ) = 1 N ∑ i = 1 N exp ⁡ ( − y i ∑ j = 1 M α j b j ( x i ) ) = ∑ i = 1 N ω 1 i exp ⁡ ( − y i ∑ j = 1 M α j b j ( x i ) ) = ∑ i = 1 N ω 1 i ∏ j = 1 M exp ⁡ ( − y i α j b j ( x i ) ) = ∑ i = 1 N Z 1 ω 2 i ∏ j = 2 M exp ⁡ ( − y i α j b j ( x i ) ) = ∑ i = 1 N Z 1 Z 2 ω 3 i ∏ j = 3 M exp ⁡ ( − y i α j b j ( x i ) ) … = ∑ i = 1 N Z 1 Z 2 … Z M − 1 ω M , i ∏ j = M M exp ⁡ ( − y i α j b j ( x i ) ) = Z 1 Z 2 … Z M − 1 ∑ i = 1 N ω M , i exp ⁡ ( − y i α M b M ( x i ) ) 由 ( 2 ) 式 知 = Z 1 Z 2 … Z M − 1 Z M = ∏ m = 1 M Z m \begin{aligned} \frac{1}{N}\sum\limits_{i=1}^{N} \exp{(-y_{i} f(x_{i}))} &= \frac{1}{N}\sum\limits_{i=1}^{N} \exp{(-y_{i}\sum\limits_{j=1}^{M}\alpha_{j}b_{j}(x_{i}))} \\ &= \sum\limits_{i=1}^{N} \omega_{1i} \exp{(-y_{i}\sum\limits_{j=1}^{M}\alpha_{j}b_{j}(x_{i}))}\\ &=\sum\limits_{i=1}^{N}\omega_{1i} \prod\limits_{j=1}^{M}\exp{(-y_{i}\alpha_{j}b_{j}(x_{i}))}\\ &=\sum\limits_{i=1}^{N}Z_{1}\omega_{2i} \prod\limits_{j=2}^{M}\exp{(-y_{i}\alpha_{j}b_{j}(x_{i}))} \\ &=\sum\limits_{i=1}^{N}Z_{1}Z_{2}\omega_{3i} \prod\limits_{j=3}^{M}\exp{(-y_{i}\alpha_{j}b_{j}(x_{i}))} \\ & \dots \\ &=\sum\limits_{i=1}^{N}Z_{1}Z_{2} \dots Z_{M-1}\omega_{M,i} \prod\limits_{j=M}^{M}\exp{(-y_{i}\alpha_{j}b_{j}(x_{i}))} \\ &=Z_{1}Z_{2} \dots Z_{M-1}\sum\limits_{i=1}^{N}\omega_{M,i} \exp{(-y_{i}\alpha_{M}b_{M}(x_{i}))} \\ 由(2)式知 \\ &=Z_{1}Z_{2} \dots Z_{M-1}Z_{M}=\prod\limits_{m=1}^{M}Z_{m} \end{aligned} N1i=1Nexp(yif(xi))(2)=N1i=1Nexp(yij=1Mαjbj(xi))=i=1Nω1iexp(yij=1Mαjbj(xi))=i=1Nω1ij=1Mexp(yiαjbj(xi))=i=1NZ1ω2ij=2Mexp(yiαjbj(xi))=i=1NZ1Z2ω3ij=3Mexp(yiαjbj(xi))=i=1NZ1Z2ZM1ωM,ij=MMexp(yiαjbj(xi))=Z1Z2ZM1i=1NωM,iexp(yiαMbM(xi))=Z1Z2ZM1ZM=m=1MZm
证毕

  由定理可知,我们只要降低每一个弱分类器的 Z m Z_{m} Zm,就可以降低整体误差的上限,而 Z m Z_{m} Zm ( 2 ) (2) (2)式那样,从(2)式的直观来看, Z m Z_{m} Zm变小要求每个弱分类器分类误差 e m e_{m} em尽量的小,因为分类误差变小, y i b m ( x i ) > 0 y_{i}b_{m}(x_{i}) > 0 yibm(xi)>0的频率更大,由前面分析知 α m \alpha_{m} αm e m e_{m} em变小而变大,所以 exp ⁡ ( − y i α m b m ( x i ) ) \exp{(-y_{i}\alpha_{m}b_{m}(x_{i}))} exp(yiαmbm(xi))整体是在变小的,进而造成 Z m Z_{m} Zm变小。
  特别的,对于二元分类器,设输出结果为 { 1 , − 1 } \{1,-1\} {1,1},则可以进一步推导定理如下:
∏ m = 1 M Z m = ∏ m = 1 M ( 2 e m ( 1 − e m ) ) = ∏ m = 1 M 1 − 4 γ m 2 ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) \prod\limits_{m=1}^{M}Z_{m}=\prod\limits_{m=1}^{M}(2\sqrt{e_{m}(1-e_{m})})=\prod\limits_{m=1}^{M}\sqrt{1-4\gamma_{m}^{2}} \leq \exp{(-2\sum\limits_{m=1}^{M}\gamma_{m}^{2})} m=1MZm=m=1M(2em(1em) )=m=1M14γm2 exp(2m=1Mγm2)

γ m = 1 2 − e m \gamma_{m}=\frac{1}{2}-e_{m} γm=21em

证明:
∏ m = 1 M Z m = ∏ m = 1 M ∑ i = 1 N ω m i exp ⁡ ( − α m y i b m ( x i ) ) = ∏ m = 1 M ( ∑ y i = b m ( x i ) ω m i exp ⁡ ( − α m ) + ∑ y i ≠ b m ( x i ) ω m i exp ⁡ ( α m ) ) = ∏ m = 1 M ( e − α m ∑ y i = b m ( x i ) ω m i + e α m ∑ y i ≠ b m ( x i ) ω m i ) 由 2.1 中 , 步 骤 2 中 e m 定 义 式 , 进 一 步 化 简 得 = ∏ m = 1 M ( e − α m ( 1 − e m ) + e α m e m ) 由 2.1 中 , 步 骤 3 中 α m 定 义 式 , 进 一 步 化 简 得 = ∏ m = 1 M ( 2 e m ( 1 − e m ) ) 设 γ m = 1 2 − e m , 进 一 步 化 简 得 = ∏ m = 1 M 1 − 4 γ m 2 由 e x 与 1 − x 的 麦 克 劳 林 展 开 式 知 1 − 4 γ m 2 ≤ exp ⁡ ( − 2 γ m 2 ) , 进 一 步 化 简 得 ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) \begin{aligned} \prod\limits_{m=1}^{M}Z_{m} & =\prod\limits_{m=1}^{M}\sum\limits_{i=1}^{N}\omega_{mi}\exp{(-\alpha_{m}y_{i}b_{m}(x_{i}))} \\ &=\prod\limits_{m=1}^{M}(\sum\limits_{y_{i}=b_{m}(x_{i})}^{}\omega_{mi}\exp{(-\alpha_{m})}+\sum\limits_{y_{i}\neq b_{m}(x_{i})}^{}\omega_{mi}\exp{(\alpha_{m})})\\ &=\prod\limits_{m=1}^{M}(e^{-\alpha_{m}}\sum\limits_{y_{i}=b_{m}(x_{i})}^{}\omega_{mi}+e^{\alpha_{m}}\sum\limits_{y_{i}\neq b_{m}(x_{i})}^{}\omega_{mi})\\ &由2.1中,步骤2中e_{m}定义式,进一步化简得\\ &=\prod\limits_{m=1}^{M}(e^{-\alpha_{m}}(1-e_{m})+e^{\alpha_{m}}e_{m})\\ &由2.1中,步骤3中\alpha_{m}定义式,进一步化简得\\ &=\prod\limits_{m=1}^{M}(2\sqrt{e_{m}(1-e_{m})})\\ &设\gamma_{m}=\frac{1}{2}-e_{m},进一步化简得\\ &=\prod\limits_{m=1}^{M}\sqrt{1-4\gamma_{m}^{2}}\\ &由e^{x}与\sqrt{1-x}的麦克劳林展开式知\sqrt{1-4\gamma_{m}^{2}}\leq \exp{(-2\gamma_{m}^{2})},进一步化简得\\ &\leq \exp{(-2\sum\limits_{m=1}^{M}\gamma_{m}^{2})} \end{aligned} m=1MZm=m=1Mi=1Nωmiexp(αmyibm(xi))=m=1M(yi=bm(xi)ωmiexp(αm)+yi̸=bm(xi)ωmiexp(αm))=m=1M(eαmyi=bm(xi)ωmi+eαmyi̸=bm(xi)ωmi)2.12em=m=1M(eαm(1em)+eαmem)2.13αm=m=1M(2em(1em) )γm=21em=m=1M14γm2 ex1x 14γm2 exp(2γm2)exp(2m=1Mγm2)

  所以对于二元分类,adaboost有一个推论,设 γ = min ⁡ { γ m } \gamma = \min\{\gamma_{m}\} γ=min{γm}且想办法令 γ ≥ 0 \gamma \geq 0 γ0,则 1 N ∑ i = 1 N I ( F ( x i ) ≠ y i ) ≤ exp ⁡ ( − 2 ∑ m = 1 M γ 2 ) = exp ⁡ ( − 2 M γ 2 ) \frac{1}{N}\sum\limits_{i=1}^{N}I(F(x_{i}) \neq y_{i}) \leq \exp(-2\sum\limits_{m=1}^{M}\gamma^{2}) = \exp(-2M\gamma^{2}) N1i=1NI(F(xi)̸=yi)exp(2m=1Mγ2)=exp(2Mγ2)

  此时,随着弱分类器个数的增加,强分类器的误差上限呈指数下降


3. adaboost与前向分步算法

  adaboost与限定损失函数是指数损失函数的前向分步算法等价,所以利用前向分步算法可以很好地解释adaboost算法。下面就用前向分步算法推出来adaboost(二分类问题为例,类别为{1,-1})。
  前向分布算法对第m个弱分类器的学习是:
a r g min ⁡ β m , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β m b m ( x i ; γ ) ) arg\min\limits_{\beta_{m},\gamma} \sum\limits_{i=1}^{N}L(y_{i},f_{m-1}(x_{i})+\beta_{m}b_{m}(x_{i};\gamma)) argβm,γmini=1NL(yi,fm1(xi)+βmbm(xi;γ))

  若是指数损失函数 L ( x , y ) = exp ⁡ ( − x y ) L(x,y)=\exp{(-xy)} L(x,y)=exp(xy),则应写成:
a r g min ⁡ β m , γ ∑ i = 1 N exp ⁡ ( − y i ( f m − 1 ( x i ) + β m b m ( x i ; γ ) ) ) = a r g min ⁡ β m , γ ∑ i = 1 N ω m i ‾ exp ⁡ ( − y i β m b m ( x i ; γ ) ) arg\min\limits_{\beta_{m},\gamma} \sum\limits_{i=1}^{N}\exp{(-y_{i}(f_{m-1}(x_{i})+\beta_{m}b_{m}(x_{i};\gamma)))}=arg\min\limits_{\beta_{m},\gamma} \sum\limits_{i=1}^{N}\overline{\omega_{mi}}\exp{(-y_{i}\beta_{m}b_{m}(x_{i};\gamma))} argβm,γmini=1Nexp(yi(fm1(xi)+βmbm(xi;γ)))=argβm,γmini=1Nωmiexp(yiβmbm(xi;γ))

ω m i ‾ = exp ⁡ ( − y i f m − 1 ( x i ) ) \overline{\omega_{mi}}=\exp{(-y_{i}f_{m-1}(x_{i}))} ωmi=exp(yifm1(xi))

  求 γ \gamma γ使得经验风险最小,等价于求 b m ( x ; γ ) b_{m}(x;\gamma) bm(x;γ)使得经验风险最小,所以又可以变形为
      a r g min ⁡ β m , b m ( x ; γ ) ∑ i = 1 N ω m i ‾ exp ⁡ ( − y i β m b m ( x i ; γ ) ) 进 一 步 变 型 = a r g min ⁡ β m , b m ( x ; γ ) ∑ y i ≠ b m ( x ; γ ) ω m i ‾ e β m + ∑ y i = b m ( x ; γ ) ω m i ‾ e − β m = a r g min ⁡ β m , b m ( x ; γ ) ( e β m − e − β m ) ∑ y i ≠ b m ( x ; γ ) ω m i ‾ + e − β m ∑ i = 1 N ω m i ‾ = a r g min ⁡ β m , b m ( x ; γ ) ( e β m − e − β m ) ∑ i = 1 N ω m i ‾ I ( y i ≠ b m ( x i ; γ ) ) + e − β m ∑ i = 1 N ω m i ‾ \begin{aligned} &~~~~~arg\min\limits_{\beta_{m},b_{m}(x;\gamma)} \sum\limits_{i=1}^{N}\overline{\omega_{mi}}\exp{(-y_{i}\beta_{m}b_{m}(x_{i};\gamma))}\\ 进一步变型\\ &=arg\min\limits_{\beta_{m},b_{m}(x;\gamma)} \sum\limits_{y_{i}\neq b_{m}(x;\gamma)}\overline{\omega_{mi}}e^{\beta_{m}}+\sum\limits_{y_{i} = b_{m}(x;\gamma)}\overline{\omega_{mi}}e^{-\beta_{m}}\\ &=arg\min\limits_{\beta_{m},b_{m}(x;\gamma)}(e^{\beta_{m}}-e^{-\beta_{m}})\sum\limits_{y_{i}\neq b_{m}(x;\gamma)}\overline{\omega_{mi}}+e^{-\beta_{m}}\sum\limits_{i=1}^{N}\overline{\omega_{mi}}\\ &=arg\min\limits_{\beta_{m},b_{m}(x;\gamma)}(e^{\beta_{m}}-e^{-\beta_{m}})\sum\limits_{i=1}^{N}\overline{\omega_{mi}}I(y_{i}\neq b_{m}(x_{i};\gamma))+e^{-\beta_{m}}\sum\limits_{i=1}^{N}\overline{\omega_{mi}} \end{aligned}      argβm,bm(x;γ)mini=1Nωmiexp(yiβmbm(xi;γ))=argβm,bm(x;γ)minyi̸=bm(x;γ)ωmieβm+yi=bm(x;γ)ωmieβm=argβm,bm(x;γ)min(eβmeβm)yi̸=bm(x;γ)ωmi+eβmi=1Nωmi=argβm,bm(x;γ)min(eβmeβm)i=1NωmiI(yi̸=bm(xi;γ))+eβmi=1Nωmi

  其中
ω m i ‾ = exp ⁡ ( − y i f m − 1 ( x i ) ) \overline{\omega_{mi}}=\exp{(-y_{i}f_{m-1}(x_{i}))} ωmi=exp(yifm1(xi))

  先求最优 b m ( x ; γ ) b_{m}(x;\gamma) bm(x;γ),记为 b m ∗ ( x ; γ ) b_{m}^{*}(x;\gamma) bm(x;γ),对任意 β m > 0 \beta_{m}>0 βm>0使得 b m ( x ; γ ) b_{m}(x;\gamma) bm(x;γ)满足上式( β m , ω m i ‾ \beta_{m},\overline{\omega_{mi}} βmωmi是定值),等价于
b m ∗ ( x ; γ ) = a r g min ⁡ b m ( x ; γ ) ∑ i = 1 N ω m i ‾ I ( y i ≠ b m ( x i ; γ ) ) b_{m}^{*}(x;\gamma)=arg \min\limits_{b_{m}(x;\gamma)} \sum\limits_{i=1}^{N}\overline{\omega_{mi}} I(y_{i}\neq b_{m}(x_{i};\gamma)) bm(x;γ)=argbm(x;γ)mini=1NωmiI(yi̸=bm(xi;γ))

  再求最优的 β m \beta_{m} βm,对 β m \beta_{m} βm求偏导等于0,并带入 b m ∗ ( x ; γ ) b_{m}^{*}(x;\gamma) bm(x;γ),得最优 β m ∗ \beta_{m}^{*} βm如下
β m ∗ = 1 2 l o g 1 − e m e m \beta_{m}^{*}=\frac{1}{2}log\frac{1-e_{m}}{e_{m}} βm=21logem1em

e m = ∑ i = 1 N ω m i ‾ I ( y i ≠ b m ( x i ; γ ) ) e_{m}=\sum\limits_{i=1}^{N}\overline{\omega_{mi}} I(y_{i}\neq b_{m}(x_{i};\gamma)) em=i=1NωmiI(yi̸=bm(xi;γ))

  可见 β m \beta_{m} βm的更新和adaboost的 α m \alpha_{m} αm更新是一样的。我们进一步看一下 ω m + 1 , i ‾ \overline{\omega_{m+1,i}} ωm+1,i ω m i ‾ \overline{\omega_{mi}} ωmi的关系,由于 f m ( x ) = f m − 1 ( x ) + β m b m ( x ) f_{m}(x)=f_{m-1}(x)+\beta_{m}b_{m}(x) fm(x)=fm1(x)+βmbm(x) ω m i ‾ = exp ⁡ ( − y i f m − 1 ( x i ) ) \overline{\omega_{mi}}=\exp{(-y_{i}f_{m-1}(x_{i}))} ωmi=exp(yifm1(xi)),所以
ω m + 1 , i ‾ = exp ⁡ ( − y i f m ( x i ) ) = exp ⁡ ( − y i ( f m − 1 ( x ) + β m b m ( x ) ) ) = ω m i ‾ exp ⁡ ( − y i β m b m ( x ) ) \begin{aligned} \overline{\omega_{m+1,i}}&=\exp{(-y_{i}f_{m}(x_{i}))}\\ &=\exp{(-y_{i}(f_{m-1}(x)+\beta_{m}b_{m}(x)))}\\ &=\overline{\omega_{mi}}\exp{(-y_{i}\beta_{m}b_{m}(x))}\\ \end{aligned} ωm+1,i=exp(yifm(xi))=exp(yi(fm1(x)+βmbm(x)))=ωmiexp(yiβmbm(x))

  与adaboost的权值更新基本一致,仅差规范化因子 Z m Z_{m} Zm,所以说,adaboost等价于损失函数是指数损失函数时的前向分步算法。


4. 提升树

  提升树(boost tree)就是限定弱分类器(基分类器)为决策树分类器的前向分布算法,提升树是一个高功能的学习算法,可以很好地拟合训练数据,即使输入与输出的关系十分复杂,提升树也可以很好地拟合,所以提升树方法是统计学习中最有效的方法之一。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题

4.1. 分类提升树

  对于二分类问题,分类提升树就是adaboost算法的特殊情况,只需把基分类器限定成二类分类决策树,即二类分类提升树是损失函数为指数损失函数,基学习器为二类分类树的前向分步算法

4.2. 回归提升树

  回归提升树是损失函数为平方损失函数,基学习器为回归树的前向分步算法。对于第m个基回归树,其学习的是前m-1个回归树的加权和函数 f m − 1 ( x ) f_{m-1}(x) fm1(x),与输出的残差。

4.2.1. 算法流程

输入:训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}) \dots (x_{N},y_{N})\} T={(x1,y1),(x2,y2)(xN,yN)};回归树个数M;
输出:回归提升树
执行流程:

  1. 初始化 f 0 ( x ) = 0 f_{0}(x)=0 f0(x)=0
  2. 对每一个基回归树 b m ( x ) b_{m}(x) bm(x),计算残差 r m i = y i − f m − 1 ( x i ) , m = 1 , 2 … M , i = 1 , 2 … N r_{mi}=y_{i}-f_{m-1}(x_{i}),m=1,2\dots M, i=1,2\dots N rmi=yifm1(xi),m=1,2M,i=1,2N
  3. 利用残差 r m i r_{mi} rmi,学习基回归树 b m ( x ) b_{m}(x) bm(x),具体可以参考CART回归树的过程;
  4. 更新 f m ( x ) = f m − 1 ( x ) + b m ( x ) f_{m}(x)=f_{m-1}(x)+b_{m}(x) fm(x)=fm1(x)+bm(x),若m

  在《统计学习方法》中,回归提升树没有基学习器的权值,关于这一点存在异议。

5. 梯度提升

  损失函数是平方损失函数或指数损失函数时,前向分步算法并不难学习,分别对应上面的回归提升树和adaboost,但若是一般的损失函数,每一个基学习器的优化过程并不容易求得,毕竟我们要优化的目标函数是 a r g min ⁡ β m , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β m b m ( x i ; γ ) ) arg\min\limits_{\beta_{m},\gamma} \sum\limits_{i=1}^{N}L(y_{i},f_{m-1}(x_{i})+\beta_{m}b_{m}(x_{i};\gamma)) argβm,γmini=1NL(yi,fm1(xi)+βmbm(xi;γ))

针对这一问题,Freidman提出了梯度提升(gradient boosting),其基本思想是用损失函数的负梯度作为残差的近似值。

r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_{i},f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)

  然后用这个残差来对第 m m m个基学习器进行学习。

5.1. 算法流程

输入:训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}) \dots (x_{N},y_{N})\} T={(x1,y1),(x2,y2)(xN,yN)};基学习器个数 M M M
输出:梯度提升模型
执行流程:

  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)这里初始化和传统的前向分步算法令 f 0 ( x ) = 0 f_{0}(x)=0 f0(x)=0不同,这里这样做应该是保证后面求偏导过程不是在零点。
  2. 对第 m m m个基学习器,求其残差近似 r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_{i},f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)
    需要注意的是 r m i r_{mi} rmi中, 1 ≤ i ≤ N 1\leq i\leq N 1iN
  3. 利用残差组成新的数据 ( x i , r m i ) (x_{i}, r_{mi}) (xi,rmi),来学习第 m m m个基学习器 h m ( x ) h_{m}(x) hm(x)
  4. 更新梯度提升模型 f m ( x ) = f m − 1 ( x ) + h m ( x ) f_{m}(x)=f_{m-1}(x)+h_{m}(x) fm(x)=fm1(x)+hm(x) m < M m<M m<M,递归执行步骤2-4。
  5. 返回最终的梯度提升模型 F ( x ) = f M ( x ) F(x)=f_{M}(x) F(x)=fM(x)

  在《统计学习方法》中,梯度提升依然没有基学习器的权值,但在有些文献中,会在上面的步骤3后,加一步求权值的操作,这一步定义成3.1.步骤。

3.1. 计算权值 γ \gamma γ a r g min ⁡ γ m L ( y i , f m − 1 ( x ) + γ m h m ( x ) ) arg \min \limits_{\gamma_{m}} L(y_{i}, f_{m-1}(x)+\gamma_{m} h_{m}(x)) argγmminL(yi,fm1(x)+γmhm(x))

对应的步骤4中,更新的模型变成 f m ( x ) = f m − 1 ( x ) + γ m h m ( x ) f_{m}(x)=f_{m-1}(x)+\gamma_{m} h_{m}(x) fm(x)=fm1(x)+γmhm(x)


参考书籍:
《统计学习方法》

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