文章目录

  • 提升方法与AdaBoost算法
    • 提升方法的基本思路
    • AdaBoost算法
  • AdaBoost算法的训练误差分析
    • 一般分类问题训练误差分析
    • 二分类问题训练误差分析
    • 由误差分析产生的推论
  • AdaBoost算法的另一种理解
    • 两种理解的等价性证明
  • 提升树
    • 提升树模型
    • 提升树算法
    • 梯度提升

提升方法在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。本篇笔记主要思路源自《统计学习方法》。

提升方法与AdaBoost算法

提升方法的核心思想就是:一个复杂的任务由多个专家的判断进行适当综合所得出的结论,比其中任何一个专家单独判断所给出的结论要好。

提升方法的基本思路

对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(分类结果比随机猜测要好的规则也叫弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(也就是训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。以AdaBoost为例,第一个问题其做法是,提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类样本的权值。这样没有得到正确分类的数据就会在后一轮中得到更大关注。第二个问题其做法是,采取加权多数表决的方法。具体就是加大分类误差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小作用。

AdaBoost算法

首先明确算法的输入,就是一个训练数据集还有诸多弱学习算法,其中训练数据集如下。
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\} T={(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)}
其中y有1和-1两类,最后输出一个最终分类器G(x)
算法的执行步骤如下:
(1)初始化训练数据的权值分布。这里假设训练数据有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这样就保证了第一步是在原始数据上学习基本分类器 G 1 ( x ) G_1(x) G1​(x)。
D 1 = ( w 11 , ⋯ , w 1 i , ⋯ , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , ⋯ , N D_{1}=\left(w_{11}, \cdots, w_{1 i}, \cdots, w_{1 N}\right), \quad w_{1 i}=\frac{1}{N}, \quad i=1,2, \cdots, N D1​=(w11​,⋯,w1i​,⋯,w1N​),w1i​=N1​,i=1,2,⋯,N
(2)训练,这一步中,AdaBoost将反复学习基本分类器,在每一轮m执行下列操作,共循环M轮。

  • 使用当前分布 D m D_m Dm​加权的训练数据集,学习基本分类器 G m ( x ) G_m(x) Gm​(x)。
  • 计算基本分类器 G m ( x ) G_m(x) Gm​(x)在加权训练数据集上的分类误差率:
    e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ G m ( x i ) ≠ y i w m i \begin{aligned} e_{m} &=\sum_{i=1}^{N} P\left(G_{m}\left(x_{i}\right) \neq y_{i}\right) \\ &=\sum_{G_{m}\left(x_{i}\right) \neq y_{i}} w_{m i} \end{aligned} em​​=i=1∑N​P(Gm​(xi​)​=yi​)=Gm​(xi​)​=yi​∑​wmi​​
    这里 w m i w_{mi} wmi​表示第m轮中第i个实例的权值,权值之和为1。这表明 G m ( x ) G_m(x) Gm​(x)在加权的训练数据集上的分类误差率是被 G m ( x ) G_m(x) Gm​(x)误分类样本的权值之和
  • 计算基本分类器 G m ( x ) G_m(x) Gm​(x)的系数,该系数就表示了 G m ( x ) G_m(x) Gm​(x)在最终分类器中的重要性。
    α m = 1 2 log ⁡ 1 − e m e m \alpha_{m}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}} αm​=21​logem​1−em​​
    这里的对数是自然对数,由该式可知,当 e m ⩽ 1 2 e_{m} \leqslant \frac{1}{2} em​⩽21​时, α m ⩾ 0 \alpha_{m} \geqslant 0 αm​⩾0,并且 α m \alpha_{m} αm​随着 e m e_{m} em​的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
  • 更新训练数据的权值分布为下一轮作准备:
    D m + 1 = ( w m + 1 , 1 , ⋯ , w m + 1 , i , ⋯ , w m + 1 , N ) w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 , ⋯ , N \begin{array}{c} D_{m+1}=\left(w_{m+1,1}, \cdots, w_{m+1, i}, \cdots, w_{m+1, N}\right) \\ w_{m+1, i}=\frac{w_{m i}}{Z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right), \quad i=1,2, \cdots, N \end{array} Dm+1​=(wm+1,1​,⋯,wm+1,i​,⋯,wm+1,N​)wm+1,i​=Zm​wmi​​exp(−αm​yi​Gm​(xi​)),i=1,2,⋯,N​
    这里的 Z m Z_m Zm​是规范化因子,使得 D m D_m Dm​成为一个概率分布
    Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) Z_{m}=\sum_{i=1}^{N} w_{m i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) Zm​=i=1∑N​wmi​exp(−αm​yi​Gm​(xi​))
    其实权值还可以写成如下形式
    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}=\left\{\begin{array}{ll} \frac{w_{m i}}{Z_{m}} \mathrm{e}^{-\alpha_{m}}, & G_{m}\left(x_{i}\right)=y_{i} \\ \frac{w_{m i}}{Z_{m}} \mathrm{e}^{\alpha_{m}}, & G_{m}\left(x_{i}\right) \neq y_{i} \end{array}\right. wm+1,i​={Zm​wmi​​e−αm​,Zm​wmi​​eαm​,​Gm​(xi​)=yi​Gm​(xi​)​=yi​​
    这样就明显一些,基本分类器 G m ( x ) G_m(x) Gm​(x)误分类样本的权值扩大了,被正确分类样本的权值缩小了,扩大和缩小的幅度和 G m ( x ) G_m(x) Gm​(x)在最终分类器中的作用直接相关。也就是这个分类器越重要,下一个分类器就要越关注到这个分类器的缺点

(3)构建基本分类器的线性组合,这个线性组合实现的是M个基本分类器的加权表决,这个权重之和并不为1。这个函数的符号决定了实例x的类,其绝对值表示了分类的确信度
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M} \alpha_{m} G_{m}(x) f(x)=m=1∑M​αm​Gm​(x)
得到最终分类器
G ( x ) = sign ⁡ ( f ( x ) ) = sign ⁡ ( ∑ m = 1 M α m G m ( x ) ) \begin{aligned} G(x) &=\operatorname{sign}(f(x)) \\ &=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right) \end{aligned} G(x)​=sign(f(x))=sign(m=1∑M​αm​Gm​(x))​

AdaBoost算法的训练误差分析

AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。关于这个问题有下面的定理。

一般分类问题训练误差分析

AdaBoost算法最终分类器训练误差界
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ⩽ 1 N ∑ i exp ⁡ ( − y i f ( x i ) ) = ∏ m Z m \frac{1}{N} \sum_{i=1}^{N} I\left(G\left(x_{i}\right) \neq y_{i}\right) \leqslant \frac{1}{N} \sum_{i} \exp \left(-y_{i} f\left(x_{i}\right)\right)=\prod_{m} Z_{m} N1​i=1∑N​I(G(xi​)​=yi​)⩽N1​i∑​exp(−yi​f(xi​))=m∏​Zm​
不等式部分很简单就能证明,后面部分如何证明呢?首先需要用到前一部分中用到的公式
w m i exp ⁡ ( − α m y i G m ( x i ) ) = Z m w m + 1 , i w_{m i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right)=Z_{m} w_{m+1, i} wmi​exp(−αm​yi​Gm​(xi​))=Zm​wm+1,i​
接下来推导如下:
1 N ∑ i exp ⁡ ( − y i f ( x i ) ) = 1 N ∑ i exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i w 1 i ∏ m = 1 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 ∑ i w 2 i ∏ m = 2 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 Z 2 ∑ i w 3 i ∏ m = 3 M exp ⁡ ( − α m y i G m ( x i ) ) = ⋯ = Z 1 Z 2 ⋯ Z M − 1 ∑ i w M i exp ⁡ ( − α M y i G M ( x i ) ) = ∏ m = 1 M Z m \begin{aligned} \frac{1}{N} \sum_{i} \exp \left(-y_{i} f\left(x_{i}\right)\right) &=\frac{1}{N} \sum_{i} \exp \left(-\sum_{m=1}^{M} \alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \\ &=\sum_{i} w_{1 i} \prod_{m=1}^{M} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \\ &=Z_{1} \sum_{i} w_{2 i} \prod_{m=2}^{M} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \\ &=Z_{1} Z_{2} \sum_{i} w_{3 i} \prod_{m=3}^{M} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \\ &=\cdots \\ &=Z_{1} Z_{2} \cdots Z_{M-1} \sum_{i} w_{M i} \exp \left(-\alpha_{M} y_{i} G_{M}\left(x_{i}\right)\right) \\ &=\prod_{m=1}^{M} Z_{m} \end{aligned} N1​i∑​exp(−yi​f(xi​))​=N1​i∑​exp(−m=1∑M​αm​yi​Gm​(xi​))=i∑​w1i​m=1∏M​exp(−αm​yi​Gm​(xi​))=Z1​i∑​w2i​m=2∏M​exp(−αm​yi​Gm​(xi​))=Z1​Z2​i∑​w3i​m=3∏M​exp(−αm​yi​Gm​(xi​))=⋯=Z1​Z2​⋯ZM−1​i∑​wMi​exp(−αM​yi​GM​(xi​))=m=1∏M​Zm​​
这个定理说明,可以在每一轮选取适当的 G m G_m Gm​使得 Z m Z_m Zm​最小,从而使得训练误差下降最快。 Z m Z_m Zm​其实就代表了该轮次m的所有损失值之和。

二分类问题训练误差分析

二分类问题AdaBoost的训练误差界可表示如下
∏ 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 ) \begin{aligned} \prod_{m=1}^{M} Z_{m} &=\prod_{m=1}^{M}[2 \sqrt{e_{m}\left(1-e_{m}\right)}] \\ &=\prod_{m=1}^{M} \sqrt{\left(1-4 \gamma_{m}^{2}\right)} \\ & \leqslant \exp \left(-2 \sum_{m=1}^{M} \gamma_{m}^{2}\right) \end{aligned} m=1∏M​Zm​​=m=1∏M​[2em​(1−em​) ​]=m=1∏M​(1−4γm2​) ​⩽exp(−2m=1∑M​γm2​)​
其中, γ m = 1 2 − e m \gamma_{m}=\frac{1}{2}-e_{m} γm​=21​−em​,证明过程如下:
Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) = ∑ y i = G m ( x i ) w m i e − α m + ∑ y i ≠ G m ( x i ) w m i e α m = ( 1 − e m ) e − α m + e m e α m = 2 e m ( 1 − e m ) = 1 − 4 γ m 2 \begin{aligned} Z_{m} &=\sum_{i=1}^{N} w_{m i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \\ &=\sum_{y_{i}=G_{m}\left(x_{i}\right)} w_{m i} \mathrm{e}^{-\alpha_{m}}+\sum_{y_{i} \neq G_{m}\left(x_{i}\right)} w_{m i} \mathrm{e}^{\alpha_{m}}\\ &=\left(1-e_{m}\right) \mathrm{e}^{-\alpha_{m}}+e_{m} \mathrm{e}^{\alpha_{m}}\\ &=2 \sqrt{e_{m}\left(1-e_{m}\right)}\\ &=\sqrt{1-4 \gamma_{m}^{2}} \end{aligned} Zm​​=i=1∑N​wmi​exp(−αm​yi​Gm​(xi​))=yi​=Gm​(xi​)∑​wmi​e−αm​+yi​​=Gm​(xi​)∑​wmi​eαm​=(1−em​)e−αm​+em​eαm​=2em​(1−em​) ​=1−4γm2​ ​​
由此等式部分证明完毕,不等式部分则可先由 e x e^x ex和 1 − x \sqrt{1-x} 1−x ​在x=0处的泰勒展开式推出结论。

由误差分析产生的推论

如果存在 γ > 0 \gamma>0 γ>0,对所有m有 γ m ⩾ γ \gamma_{m} \geqslant \gamma γm​⩾γ,那么
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ⩽ exp ⁡ ( − 2 M γ 2 ) \frac{1}{N} \sum_{i=1}^{N} I\left(G\left(x_{i}\right) \neq y_{i}\right) \leqslant \exp \left(-2 M \gamma^{2}\right) N1​i=1∑N​I(G(xi​)​=yi​)⩽exp(−2Mγ2)
这个不等式说明一个重要问题,那就是在存在 γ > 0 \gamma>0 γ>0,对所有m有 γ m ⩾ γ \gamma_{m} \geqslant \gamma γm​⩾γ这个条件下,AdaBoost的训练误差是以指数速率下降的。其实也就是误分类的训练权重不过半,那么误差就是以指数速率下降的。注意的是,AdaBoost具有适应性,它能适应弱分类器各自的训练误差率。这也是其名称的由来,Ada指的是adaptive。

AdaBoost算法的另一种理解

如果去掉提升的概念,仅仅将AdaBoost看作一个简单的统计模型,那我们该怎么理解这个统计模型呢?
先说结论,我们可以认为AdaBoost算法是模型为加法模型、损失函数为指数函数(计算e的表达式)、学习算法为前向分步算法的二分类学习方法。
考虑加法模型为
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^{M} \beta_{m} b\left(x ; \gamma_{m}\right) f(x)=m=1∑M​βm​b(x;γm​)
其中b为基函数, γ m \gamma_m γm​为基函数的参数, β m \beta_m βm​为基函数的系数。回顾一下上文中最终分类器的形式为
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M} \alpha_{m} G_{m}(x) f(x)=m=1∑M​αm​Gm​(x)
两者都是加法模型,但是前者参数却并未得到训练和修正。
在给定训练数据及损失函数条件下,学习加法模型就成为损失函数极小化问题:
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) \min _{\beta_{m}, \gamma_{m}} \sum_{i=1}^{N} L\left(y_{i}, \sum_{m=1}^{M} \beta_{m} b\left(x_{i} ; \gamma_{m}\right)\right) βm​,γm​min​i=1∑N​L(yi​,m=1∑M​βm​b(xi​;γm​))
这个表达式,有点像单隐层神经网络,batchsize是整个数据集时的loss值。这是一个很复杂的优化问题,AdaBoost采用的是前向分步算法,这个优化算法的想法是:因为学习的是加法模型,如果能从前向后,每一步只学习一个基函数及其系数,逐步逼近目标函数,那么就可以简化优化的复杂度。每一步只需要优化如下损失函数:
min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) \min _{\beta, \gamma} \sum_{i=1}^{N} L\left(y_{i}, \beta b\left(x_{i} ; \gamma\right)\right) β,γmin​i=1∑N​L(yi​,βb(xi​;γ))
具体地,《统计学习方法》中给出了前向分步算法的步骤:

由前向分布算法即可推导出AdaBoost,用定理叙述两者之间的关系就是:AdaBoost算法是前向分步加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

两种理解的等价性证明

下面证明一下加法模型损失函数是指数函数且采用前向分步算法优化时,其学习的具体操作等价于AdaBoost算法学习的具体操作。
首先假设前向分步算法经过m-1轮迭代
f m − 1 ( x ) = f m − 2 ( x ) + α m − 1 G m − 1 ( x ) = α 1 G 1 ( x ) + ⋯ + α m − 1 G m − 1 ( x ) \begin{aligned} f_{m-1}(x) &=f_{m-2}(x)+\alpha_{m-1} G_{m-1}(x) \\ &=\alpha_{1} G_{1}(x)+\cdots+\alpha_{m-1} G_{m-1}(x) \end{aligned} fm−1​(x)​=fm−2​(x)+αm−1​Gm−1​(x)=α1​G1​(x)+⋯+αm−1​Gm−1​(x)​
在第m轮迭代则得到 α m \alpha_{m} αm​, G m ( x ) G_{m}(x) Gm​(x)和 f m ( x ) f_{m}(x) fm​(x)
f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_{m}(x)=f_{m-1}(x)+\alpha_{m} G_{m}(x) fm​(x)=fm−1​(x)+αm​Gm​(x)
这里怎样得到 α m \alpha_{m} αm​和 G m ( x ) G_{m}(x) Gm​(x)?需要求解,使得 f m ( x ) f_{m}(x) fm​(x)在训练数据集T上的指数损失最小,即
( α m , G m ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 N exp ⁡ [ − y i ( f m − 1 ( x i ) + α G ( x i ) ) ] \left(\alpha_{m}, G_{m}(x)\right)=\arg \min _{\alpha, G} \sum_{i=1}^{N} \exp \left[-y_{i}\left(f_{m-1}\left(x_{i}\right)+\alpha G\left(x_{i}\right)\right)\right] (αm​,Gm​(x))=argα,Gmin​i=1∑N​exp[−yi​(fm−1​(xi​)+αG(xi​))]
上式可表示为(算法的核心来了
( α m , G m ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 N w ˉ m i exp ⁡ [ − y i α G ( x i ) ] \left(\alpha_{m}, G_{m}(x)\right)=\arg \min _{\alpha, G} \sum_{i=1}^{N} \bar{w}_{m i} \exp \left[-y_{i} \alpha G\left(x_{i}\right)\right] (αm​,Gm​(x))=argα,Gmin​i=1∑N​wˉmi​exp[−yi​αG(xi​)]
其中, w ˉ m i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar{w}_{m i}=\exp \left[-y_{i} f_{m-1}\left(x_{i}\right)\right] wˉmi​=exp[−yi​fm−1​(xi​)]。因为 w ˉ m i \bar{w}_{m i} wˉmi​既不依赖 α \alpha α也不依赖于G,所以与最小化无关。但它依赖于 f m − 1 ( x i ) f_{m-1}\left(x_{i}\right) fm−1​(xi​),会随着每一轮迭代发生改变。
如果要证明两个算法等价,证明使得上式达到最小的 α m \alpha_{m} αm​和 G m ( x ) G_{m}(x) Gm​(x)就是AdaBoost算法得到的 α m \alpha_{m} αm​和 G m ( x ) G_{m}(x) Gm​(x)即可。所以先对上式进行求解,分为两步:

  • 第一步,先求 G m ( x ) G_{m}(x) Gm​(x)。对任意 α > 0 \alpha>0 α>0,使上式最小的G(x)等价于使得下式最小的G(x)
    G m ∗ ( x ) = arg ⁡ min ⁡ G ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) G_{m}^{*}(x)=\arg \min _{G} \sum_{i=1}^{N} \bar{w}_{m i} I\left(y_{i} \neq G\left(x_{i}\right)\right) Gm∗​(x)=argGmin​i=1∑N​wˉmi​I(yi​​=G(xi​))
    易知,分类器 G m ∗ ( x ) G_{m}^{*}(x) Gm∗​(x)就是AdaBoost算法的基本分类器 G m ( x ) G_{m}(x) Gm​(x),因为它是使得第m轮加权训练数据分类误差率最小的分类器
  • 第二步,求 α m ∗ \alpha^*_m αm∗​。
    ∑ i = 1 N w ˉ m i exp ⁡ [ − y i α G ( x i ) ] = ∑ y i = G m ( x i ) w ˉ m i e − α + ∑ y i ≠ G m ( x i ) w ˉ m i e α = ( e α − e − α ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) + e − α ∑ i = 1 N w ˉ m i \begin{aligned} \sum_{i=1}^{N} \bar{w}_{m i} \exp \left[-y_{i} \alpha G\left(x_{i}\right)\right] &=\sum_{y_{i}=G_{m}\left(x_{i}\right)} \bar{w}_{m i} \mathrm{e}^{-\alpha}+\sum_{y_{i} \neq G_{m}\left(x_{i}\right)} \bar{w}_{m i} \mathrm{e}^{\alpha} \\ &=\left(\mathrm{e}^{\alpha}-\mathrm{e}^{-\alpha}\right) \sum_{i=1}^{N} \bar{w}_{m i} I\left(y_{i} \neq G\left(x_{i}\right)\right)+\mathrm{e}^{-\alpha} \sum_{i=1}^{N} \bar{w}_{m i} \end{aligned} i=1∑N​wˉmi​exp[−yi​αG(xi​)]​=yi​=Gm​(xi​)∑​wˉmi​e−α+yi​​=Gm​(xi​)∑​wˉmi​eα=(eα−e−α)i=1∑N​wˉmi​I(yi​​=G(xi​))+e−αi=1∑N​wˉmi​​
    将已求得的 G m ∗ ( x ) G_{m}^{*}(x) Gm∗​(x)代入上式,对 α \alpha α求导并使得导数为0,解得
    α m ∗ = 1 2 log ⁡ 1 − e m e m \alpha_{m}^{*}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}} αm∗​=21​logem​1−em​​
    其中 e m e_m em​为
    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 ) ) \begin{aligned} e_{m} &=\frac{\sum_{i=1}^{N} \bar{w}_{m i} I\left(y_{i} \neq G_{m}\left(x_{i}\right)\right)}{\sum_{i=1}^{N} \bar{w}_{m i}} \\ &=\sum_{i=1}^{N} w_{m i} I\left(y_{i} \neq G_{m}\left(x_{i}\right)\right) \end{aligned} em​​=∑i=1N​wˉmi​∑i=1N​wˉmi​I(yi​​=Gm​(xi​))​=i=1∑N​wmi​I(yi​​=Gm​(xi​))​
    可见 e m e_m em​就是分类误差率,这完全符合了adaboost算法中对 e m e_m em​的定义。
    权值更新部分,已知
    f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_{m}(x)=f_{m-1}(x)+\alpha_{m} G_{m}(x) fm​(x)=fm−1​(x)+αm​Gm​(x)
    以及 w ˉ m i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar{w}_{m i}=\exp \left[-y_{i} f_{m-1}\left(x_{i}\right)\right] wˉmi​=exp[−yi​fm−1​(xi​)],可得
    w ˉ m + 1 , i = w ˉ m , i exp ⁡ [ − y i α m G m ( x ) ] \bar{w}_{m+1, i}=\bar{w}_{m, i} \exp \left[-y_{i} \alpha_{m} G_{m}(x)\right] wˉm+1,i​=wˉm,i​exp[−yi​αm​Gm​(x)]
    这和adaboost算法也一样,只相差了一个规范化因子,所以两者的求解流程完全是等价的。

提升树

提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。和之前的区别在于提升树的每个基函数都没有权重的概念了,每多的一个基函数都是为了拟合之前模型的误差。

提升树模型

提升方法实际采用加法模型基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树。提升树模型可表示如下
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_{M}(x)=\sum_{m=1}^{M} T\left(x ; \Theta_{m}\right) fM​(x)=m=1∑M​T(x;Θm​)
其中, T ( x ; Θ m ) T\left(x ; \Theta_{m}\right) T(x;Θm​)表示决策树, Θ m \Theta_{m} Θm​为决策树的参数,M为树的个数。

提升树算法

提升树算法采用前向分步算法。首先确定初始提升树 f 0 ( x ) = 0 f_{0}(x)=0 f0​(x)=0,第m步的模型是
f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_{m}(x)=f_{m-1}(x)+T\left(x ; \Theta_{m}\right) fm​(x)=fm−1​(x)+T(x;Θm​)
其中, f m − 1 ( x ) f_{m-1}(x) fm−1​(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数 Θ m \Theta_{m} Θm​:
Θ ^ m = arg ⁡ min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) \hat{\Theta}_{m}=\arg \min _{\Theta_{m}} \sum_{i=1}^{N} L\left(y_{i}, f_{m-1}\left(x_{i}\right)+T\left(x_{i} ; \Theta_{m}\right)\right) Θ^m​=argΘm​min​i=1∑N​L(yi​,fm−1​(xi​)+T(xi​;Θm​))
由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是可以很好拟合,所以提升树是一个高功能的学习算法。
对于二分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二分类树即可,是AdaBoost算法的特殊情况,就不再赘述。而回归问题的提升树下面具体介绍一下:
首先回归问题的树具体可参考个人笔记决策树详解的内容,回归树可表示为:
T ( x ; Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x ; \Theta)=\sum_{j=1}^{J} c_{j} I\left(x \in R_{j}\right) T(x;Θ)=j=1∑J​cj​I(x∈Rj​)
回归问题提升树使用以下前向分步算法:
f 0 ( x ) = 0 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) , m = 1 , 2 , ⋯ , M f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) \begin{aligned} &f_{0}(x)=0\\ &\begin{aligned} f_{m}(x) &=f_{m-1}(x)+T\left(x ; \Theta_{m}\right), \quad m=1,2, \cdots, M \\ f_{M}(x) &=\sum_{m=1}^{M} T\left(x ; \Theta_{m}\right) \end{aligned} \end{aligned} ​f0​(x)=0fm​(x)fM​(x)​=fm−1​(x)+T(x;Θm​),m=1,2,⋯,M=m=1∑M​T(x;Θm​)​​
在前向分步算法的第m步,给定当前模型 f m − 1 ( x ) f_{m-1}(x) fm−1​(x),需求解
Θ ^ m = arg ⁡ min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) \hat{\Theta}_{m}=\arg \min _{\Theta_{m}} \sum_{i=1}^{N} L\left(y_{i}, f_{m-1}\left(x_{i}\right)+T\left(x_{i} ; \Theta_{m}\right)\right) Θ^m​=argΘm​min​i=1∑N​L(yi​,fm−1​(xi​)+T(xi​;Θm​))
当采用平方误差损失函数时,其损失变为
L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 = [ r − T ( x ; Θ m ) ] 2 \begin{aligned} L\left(y, f_{m-1}(x)+T\left(x ; \Theta_{m}\right)\right) &=\left[y-f_{m-1}(x)-T\left(x ; \Theta_{m}\right)\right]^{2} \\ &=\left[r-T\left(x ; \Theta_{m}\right)\right]^{2} \end{aligned} L(y,fm−1​(x)+T(x;Θm​))​=[y−fm−1​(x)−T(x;Θm​)]2=[r−T(x;Θm​)]2​
这里 r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=y−fm−1​(x)是当前模型拟合数据的残差。所以,对回归问题的提升树算法来说,只需简单地拟合当前模型的残差。这样,算法是相当简单的。为什么拟合残差,感性上理解就是之前的几个基函数共同表决还不能解决的问题(残差),当前的基函数得解决好。
《统计学习方法》对回归问题的提升树算法描述如下:

梯度提升

提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数是平方损失函数和指数函数时,每一步优化简单,但对一般损失函数而言,往往每一步优化并不容易。针对这一问题,Freidman提出了梯度提升算法。这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
− [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -\left[\frac{\partial L\left(y, f\left(x_{i}\right)\right)}{\partial f\left(x_{i}\right)}\right]_{f(x)=f_{m-1}(x)} −[∂f(xi​)∂L(y,f(xi​))​]f(x)=fm−1​(x)​
作为回归问题提升树算法中的残差的近似值,拟合一个回归树。这里有一个重要的核心点,用负梯度的方法(只用损失函数对函数求导的方法)确实可以代表残差(可手推得表达式),具体推导过程用了一阶泰勒展开的近似,这个近似只是残差的代表,但还是不等于残差(前面有系数随损失函数不同而变化),所以有了下面推导过程的c步。
《统计学习方法》中对梯度提升算法的描述如下:

第一步估计损失函数极小化的常数值,理解为只有一个根节点的树。第2a步计算损失函数负梯度在当前模型的值,将其作为残差的估计。对平方损失函数其就是残差,对一般损失函数它就是残差的近似值。2b步以各个样本产生的误差值为拟合值,拟合出一个回归树,得到划分方案。2c步利用线性搜索估计叶节点区域的值,使损失函数最小化。2d步更新回归树。最后得到输出的最终模型。这里参数 Θ \Theta Θ包括两部分,一个是划分方式R,一个是叶节点输出值c。

Boosting方法详解相关推荐

  1. 集成学习(ensemble learning)干货系列(3)——Boosting方法详解

    集成学习(ensemble learning)干货系列(1)--集成学习概述 集成学习(ensemble learning)干货系列(2)--随机森林(Bagging) Boosting基本原理 提升 ...

  2. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  3. python标准库random中函数的作用_Python随机函数库random的使用方法详解

    Python随机函数库random的使用方法详解 前言 众所周知,python拥有丰富的内置库,还支持众多的第三方库,被称为胶水语言,随机函数库random,就是python自带的标准库,他的用法极为 ...

  4. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

  5. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  6. python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  7. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  8. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...

    Golang 实现 PHP里的 serialize() . unserialize() 安装 go get -u github.com/techleeone/gophp/serialize 用法 pa ...

  9. ES5和ES6数组遍历方法详解

    ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1.原始的for循环语句 2.Array.prototype.forEach数组对象内置方法 3.Array.prototype. ...

最新文章

  1. 网友:Java岗,自学一个月跳槽计算机视觉,其实入门很简单
  2. CentOs7 修改rpm安装背景图
  3. 第二章 GuassDB 数据库基础知识
  4. c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据
  5. 初识JAVA--foreach语句的应用
  6. 【Kafka】Kafka如何开启SSL 控制台消费与生产 代码消费与生产
  7. potato什么软件_曝光:诈骗数十亿的“张鹏”再出新项目美生在线,诈骗犯都这么努力,你还有什么资格不努力!?...
  8. tips of MIPS
  9. 二叉树非递归遍历——python
  10. 冯乐乐之三,SHADERLAB入门
  11. ChineseBERT Chinese Pretraining Enhanced by Glyph and Pinyin Information
  12. 因无聊用python写了个爬取蓝奏云直链的爬虫(含注释并包装为函数)
  13. windows 根据端口杀进程 部署jar包 批处理脚本
  14. 小台灯内部电路原理图,仅供参考(实际测量自己的台灯的输入电压是直流135V。时间2021.3.9)
  15. Device /dev/sdc excluded by a filter.
  16. 天球坐标系、地球坐标系、地理坐标系、投影坐标系...一次搞清
  17. Azure资源托管标识浅析和实践
  18. 软件工程直招士官生_如何看待今年首次面向普通高校毕业生直招士官?是毕业生的一个好选择吗?...
  19. mysql oracle as_ORACLE WITH AS 用法
  20. 可见的轮廓线用虚线绘制_工程建设制图中的主要可见轮廓线应选用(

热门文章

  1. AD7606的国产替代方案—ADCS8162
  2. python条形图和线形图的绘制,并显示数据
  3. WPS表格VLOOKUP函数的基本用法
  4. 终极单词index 排序 C-D
  5. 组建一个最简单的局域网
  6. C++栈和堆原理介绍
  7. 使用libCurl进行百度图片翻译一直返回invalid_sign错误
  8. goahead实现文件下载功能实例详解
  9. Android 设置锁屏时间,屏幕常亮效果
  10. 微软官方制作纯净版的U盘启动盘(详细步骤)