统计学习方法读书笔记第八章:提升方法

统计学习方法读书笔记第八章:提升方法

提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。

提升方法AdaBoost算法

  • 提升方法的基本思路
    提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。
    历史上,Kearns和Valiant首先提出了“强可学习”和“弱可学习”的概念。指出:在概率近似正确(probably approximately correct, PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
    这样一来,问题便成为,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升为“强学习算法”。大家知道,发现若学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。关于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法。
    对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
    这样,对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。关于第一个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。至于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
    AdaBoost的巧妙之处就在于它将这些想法自然且有效地实现在一种算法里。
  • AdaBoost算法
    现在叙述AdaBoost算法。假设给定一个二类分类的训练数据集
    T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)}
    其中,每个样本点由实例与标记组成。实例 x i ∈ X ⊆ R n x_i\in\mathcal{X}\subseteq R^n xiXRn,标记 y i ∈ Y = { − 1 , + 1 } y_i\in\mathcal{Y}=\{-1,+1\} yiY={1,+1} X \mathcal{X} X是实例空间, Y \mathcal{Y} Y是标记集合。AdaBoost利用以下算法,从训练数据中学习一系列弱分类器或基本分类器,并将这些弱分类器线性组合成为一个强分类器。
    算法1(AdaBoost)
    输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)},其中 x i ∈ X ⊆ R n x_i\in\mathcal{X}\subseteq R^n xiXRn y i ∈ Y = { − 1 , + 1 } y_i\in\mathcal{Y}=\{-1,+1\} yiY={1,+1};若学习算法;
    输出:最终分类器 G ( x ) G(x) G(x)
    (1) 初始化训练数据的权值分布
    D 1 = ( w 11 , ⋯   , w 1 i , ⋯   , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , ⋯   , N D_1=(w_{11},\cdots,w_{1i},\cdots,w_{1N}), w_{1i}=\frac{1}{N}, i=1,2,\cdots,N D1=(w11,,w1i,,w1N),w1i=N1,i=1,2,,N
    (2) 对 m = 1 , 2 , ⋯   , M m=1,2,\cdots,M m=1,2,,M
    (a) 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器
    G m ( x ) : X → { − 1 , + 1 } G_m(x):\mathcal{X}\rightarrow\{-1,+1\} Gm(x):X{1,+1}
    (b) 计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率
    (1) e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i) \tag{1} em=P(Gm(xi)̸=yi)=i=1NwmiI(Gm(xi)̸=yi)(1)
    © 计算 G m ( x ) G_m(x) Gm(x)的系数
    (2) α m = 1 2 log ⁡ 1 − e m e m \alpha_m=\frac{1}{2}\log\frac{1-e_m}{e_m} \tag{2} αm=21logem1em(2)
    这里的对数是自然对数。
    (d) 更新训练数据集的权值分布
    (3) D m + 1 = ( w m + 1 , 1 , ⋯   , w m + 1 , i , ⋯   , w m + 1 , N ) D_{m+1}=(w_{m+1,1},\cdots,w_{m+1,i},\cdots,w_{m+1,N}) \tag{3} Dm+1=(wm+1,1,,wm+1,i,,wm+1,N)(3)
    (4) w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 , ⋯   , N w_{m+1,i}=\frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_i)), i=1,2,\cdots,N \tag{4} wm+1,i=Zmwmiexp(αmyiGm(xi)),i=1,2,,N(4)
    这里, Z m Z_m Zm是规范化因子
    (5) Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}\exp(-\alpha_my_iG_m(x_i)) \tag{5} Zm=i=1Nwmiexp(αmyiGm(xi))(5)
    它使 D m + 1 D_{m+1} Dm+1成为一个概率分布。
    (3) 构建基本分类器的线性组合
    (6) f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) \tag{6} f(x)=m=1MαmGm(x)(6)
    得到最终分类器
    (7) 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\bigg(\sum_{m=1}^M\alpha_mG_m(x)\bigg) \tag{7} G(x)=sign(f(x))=sign(m=1MαmGm(x))(7)
    对AdaBoost算法作如下说明:
    步骤(1) 假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第1步能够在原始数据上学习基本分类器 G 1 ( x ) G_1(x) G1(x)
    步骤(2) AdaBoost反复学习基本分类器,在每一轮 m = 1 , 2 , ⋯   , M m=1,2,\cdots,M m=1,2,,M顺次地执行下列操作:
    (a) 使用当前分布 D m D_m Dm加权的训练数据集,学习基本分类器 G m ( x ) G_m(x) Gm(x)
    (b) 计算基本分类器 G m ( x ) G_m(x) Gm(x)在加权训练数据集上的分类误差率:
    (8) e m = P ( G m ( x i ) ≠ y i ) = ∑ G m ( x i ) ≠ y i w m i e_m=P(G_m(x_i)\neq y_i)=\sum_{G_m(x_i)\neq y_i}w_{mi} \tag{8} em=P(Gm(xi)̸=yi)=Gm(xi)̸=yiwmi(8)
    这里, w m i w_{mi} wmi表示第 m m m轮中第 i i i个实例的权值, ∑ i = 1 N w m i = 1 \sum_{i=1}^Nw_{mi}=1 i=1Nwmi=1。这表明, G m ( x ) G_m(x) Gm(x)在加权的训练数据集上的分类误差率是被 G m ( x ) G_m(x) Gm(x)误分类样本的权值之和,由此可以看出数据权值分布 D m D_m Dm与基本分类器 G m ( x ) G_m(x) Gm(x)的分类误差率的关系。
    © 计算基本分类器 G m ( x ) G_m(x) Gm(x)的系数 α m \alpha_m αm α m \alpha_m αm表示 G m ( x ) G_m(x) Gm(x)在最终分类器中的重要性。由式(2)可知,当 e m ≤ 1 2 e_m\leq \frac{1}{2} em21时, α m ≥ 0 \alpha_m\geq 0 αm0,并且 α m \alpha_m αm随着 e m e_m em的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
    (d) 更新训练数据的权值分布为下一轮作准备。式(4)可以写成:
    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_{mi}}{Z_m}e^{-\alpha_m}, &G_m(x_i)=y_i \\ \frac{w_{mi}}{Z_m}e^{\alpha_m}, &G_m(x_i)\neq y_i \end{array} \right. wm+1,i={Zmwmieαm,Zmwmieαm,Gm(xi)=yiGm(xi)̸=yi
    由此可知,被基本分类器 G m ( x ) G_m(x) Gm(x)误分类样本的权值得以扩大,而被正确分类样本的权值却得以缩小。两相比较,误分类样本的权值被放大 e 2 α m = e m 1 − e m e^{2\alpha_m}=\frac{e_m}{1-e_m} e2αm=1emem倍。因此,误分类样本在下一轮学习中起更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这时AdaBoost的一个特点。
    步骤(3) 线性组合 f ( x ) f(x) f(x)实现 M M M个基本分类器的加权表决。系数 α m \alpha_m αm表示了基本分类器 G m ( x ) G_m(x) Gm(x)的重要性,这里,所有 α m \alpha_m αm之和并不为1。 f ( x ) f(x) f(x)的符号决定实例 x x x的类, f ( x ) f(x) f(x)的绝对值表示分类的确信度。利用基本分类器的线性组合构建最终分类器是AdaBoost的另一特点。

AdaBoost算法的训练误差分析

AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。关于这个问题有下面的定理:
定理1(AdaBoost的训练误差界) AdaBoost算法最终分类器的训练误差界为
(9) 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}^NI(G(x_i)\neq y_i)\leq\frac{1}{N}\sum_i\exp(-y_if(x_i))=\prod_mZ_m \tag{9} N1i=1NI(G(xi)̸=yi)N1iexp(yif(xi))=mZm(9)
这里, G ( x ) G(x) G(x) f ( x ) f(x) f(x) Z m Z_m Zm分别由式(7)、式(6)和式(5)给出。
证明 G ( x i ) ≠ y i G(x_i)\neq y_i G(xi)̸=yi时, y i f ( x i ) &lt; 0 y_if(x_i)&lt;0 yif(xi)<0,因而 exp ⁡ ( − y i f ( x i ) ) ≥ 1 \exp(-y_if(x_i))\geq 1 exp(yif(xi))1。由此直接推到处前半部分。
后半部分的推到要用到 Z m Z_m Zm的定义式(5)及式(4)的变形:
w m i exp ⁡ ( − α m y i G m ( x i ) ) = Z m w m + 1 , i w_{mi}\exp(-\alpha_my_iG_m(x_i))=Z_mw_{m+1,i} wmiexp(αmyiGm(xi))=Zmwm+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 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}&amp;\sum_i\exp(-y_if(x_i)) \\ &amp;=\frac{1}{N}\sum_i\exp\bigg(-\sum_{m=1}^M\alpha_my_iG_m(x_i)\bigg) \\ &amp;=\sum_iw_{1i}\prod_{m=1}^M\exp(-\alpha_my_iG_m(x_i)) \\ &amp;=Z_1Z_2\sum_iw_{3i}\prod_{m=3}^M\exp(-\alpha_my_iG_m(x_i)) \\ &amp;=\cdots \\ &amp;=Z_1Z_2\cdots Z_{M-1}\sum_iw_{Mi}\exp(-\alpha_My_iG_M(x_i)) \\ &amp;=\prod_{m=1}^MZ_m \end{aligned} N1iexp(yif(xi))=N1iexp(m=1MαmyiGm(xi))=iw1im=1Mexp(αmyiGm(xi))=Z1Z2iw3im=3Mexp(αmyiGm(xi))==Z1Z2ZM1iwMiexp(αyiGM(xi))=m=1MZm
这一定理说明,可以在每一轮选取适当的 G m G_m Gm使得 Z m Z_m Zm最小,从而使训练误差下降最快。对二分类问题,有如下结果:
定理2(二分类问题AdaBoost的训练误差界)
(10) ∏ 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_{m=1}^MZ_m=\prod_{m=1}^M[2\sqrt(e_m(1-e_m))]=\prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leq\exp\bigg(-2\sum_{m=1}^M\gamma_m^2\bigg) \tag{10} m=1MZm=m=1M[2( em(1em))]=m=1M(14γm2) exp(2m=1Mγm2)(10)
这里, γ m = 1 2 − e m \gamma_m=\frac{1}{2}-e_m γm=21em
证明 Z m Z_m Zm的定义式(5)及式(8)得
(11) 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&amp;=\sum_{i=1}^Nw_{mi}\exp(-\alpha_my_iG_m(x_i)) \\ &amp;=\sum_{y_i=G_m(x_i)}w_{mi}e^{-\alpha_m}+\sum_{y_i\neq G_m(x_i)}w_{mi}e^{\alpha_m} \\ &amp;=(1-e_m)e^{-\alpha_m}+e_me^{\alpha_m} \\ &amp;=2\sqrt{e_m(1-e_m)}=\sqrt{1-4\gamma_m^2} \tag{11} \end{aligned} Zm=i=1Nwmiexp(αmyiGm(xi))=yi=Gm(xi)wmieαm+yi̸=Gm(xi)wmieαm=(1em)eαm+emeαm=2em(1em) =14γm2 (11)
至于不等式
∏ m = 1 M ( 1 − 4 γ m 2 ) ≤ exp ⁡ ( − 2 ∑ m = 1 M γ m 2 ) \prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leq \exp\bigg(-2\sum_{m=1}^M\gamma_m^2\bigg) m=1M(14γm2) exp(2m=1Mγm2)
则可先由 e x e^x ex 1 − x \sqrt{1-x} 1x 在点 x = 0 x=0 x=0的泰勒展开式推出不等式 ( 1 − 4 γ m 2 ) ≤ exp ⁡ ( − 2 γ m 2 ) \sqrt{(1-4\gamma_m^2)}\leq\exp(-2\gamma_m^2) (14γm2) exp(2γm2),进而得到
推论1 如果存在 γ &gt; 0 \gamma&gt;0 γ>0,对所有 m m m γ m ≥ γ \gamma_m\geq\gamma γmγ,则
(12) 1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ exp ⁡ ( − 2 M γ 2 ) \frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leq\exp(-2M\gamma^2) \tag{12} N1i=1NI(G(xi)̸=yi)exp(2Mγ2)(12)
这表明在此条件下AdaBoost的训练误差是以指数速率下降的。这一性质当然是很有吸引力的。
注意,AdaBoost算法不需要知道下界 γ \gamma γ。这正是Freund与Schapire设计AdaBoost时所考虑的。与一些早期的提升方法不同,AdaBoost具有适应性,即它能适应弱分类器各自的训练误差率。这也是它的名称(适应的提升)的由来,Ada是Adaptive的简写。

AdaBoost算法的解释

AdaBoost算法还有另一个解释,即可以认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习方法。

  • 前向分步算法
    考虑加法模型(additive model)
    (13) f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) \tag{13} f(x)=m=1Mβmb(x;γm)(13)
    其中, b ( x ; γ m ) b(x;\gamma_m) b(x;γm)为基函数, γ m \gamma_m γm为基函数的参数, β m \beta_m βm为基函数的系数。显然,式(6)是一个加法模型。
    在给定训练数据及损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))的条件下,学习加法模型 f ( x ) f(x) f(x)成为经验风险极小化即损失函数极小化问题:
    (14) 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}^NL\bigg(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)\bigg) \tag{14} βm,γmmini=1NL(yi,m=1Mβmb(xi;γm))(14)
    通常这时一个复杂的优化问题。前向分步算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(14),那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:
    (15) min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma)) \tag{15} β,γmini=1NL(yi,βb(xi;γ))(15)
    给定训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ &ThinSpace; , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y = { − 1 , + 1 } T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},x_i\in\mathcal{X}\subseteq R^n,y_i\in\mathcal{Y}=\{-1,+1\} T={(x1,y1),(x2,y2),,(xN,yN)},xiXRn,yiY={1,+1}。损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))和基函数的集合 b ( x ; γ ) b(x;\gamma) b(x;γ),学习加法模型 f ( x ) f(x) f(x)的前向分步算法如下:
    算法2(前向分步算法)
    输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ &ThinSpace; , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)};损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));基函数集 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}
    输出:加法模型 f ( x ) f(x) f(x)
    (1) 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
    (2) 对 m = 1 , 2 , ⋯ &ThinSpace; , M m=1,2,\cdots,M m=1,2,,M
    (a) 极小化损失函数
    (16) ( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) \tag{16} (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))(16)
    得到参数 β m \beta_m βm γ m \gamma_m γm
    (b) 更新
    (17) f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) \tag{17} fm(x)=fm1(x)+βmb(x;γm)(17)
    (3) 得到加法模型
    (18) f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) \tag{18} f(x)=fM(x)=m=1Mβmb(x;γm)(18)
    这样,前向分步算法将同时求解从 m = 1 m=1 m=1 M M M所有参数 β m \beta_m βm γ m \gamma_m γm的优化问题简化为逐次求解各个 β m \beta_m βm γ m \gamma_m γm的优化问题。

  • 前向分步算法与AdaBoost
    由前向分步算法可以推导出AdaBoost,用定理叙述这一关系。
    定理3 AdaBoost算法是前向分步算法加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
    证明 前向分步算法学习的是加法模型,当基函数为基本分类器时,该加法模型等价于AdaBoost的最终分类器
    (19) f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) \tag{19} f(x)=m=1MαmGm(x)(19)
    由基本分类器 G m ( x ) G_m(x) Gm(x)及其系数 α m \alpha_m αm组成, m = 1 , 2 , ⋯ &ThinSpace; , M m=1,2,\cdots,M m=1,2,,M。前向分步算法逐一学习基函数,这一过程与AdaBoost算法逐一学习基本分类器的过程一致。下面证明前向分步算法的损失函数是指数损失函数
    L ( y , f ( x ) ) = exp ⁡ [ − y f ( x ) ] L(y,f(x))=\exp[-yf(x)] L(y,f(x))=exp[yf(x)]
    时,其学习的具体操作等价于AdaBoost算法学习的具体操作。
    假设经过 m − 1 m-1 m1轮迭代前向分步算法已经得到 f m − 1 ( x ) f_{m-1}(x) fm1(x)
    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)&amp;=f_{m-2}(x)+\alpha_{m-1}G_{m-1}(x) \\ &amp;=\alpha_1G_1(x)+\cdots+\alpha_{m-1}G_{m-1}(x) \end{aligned} fm1(x)=fm2(x)+αm1Gm1(x)=α1G1(x)++αm1Gm1(x)
    在第 m m 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_mG_m(x) fm(x)=fm1(x)+αmGm(x)
    目标是使前向分步算法得到的 α m \alpha_m αm G m ( x ) G_m(x) Gm(x)使 f ( x ) f(x) f(x)在训练数据集 T T T上的损失最小,即
    (20) ( α m , G m ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 N exp ⁡ [ − y i ( f m − 1 ( x i ) + α G ( x i ) ) ] (\alpha_m,G_m(x))=\arg\min_{\alpha,G}\sum_{i=1}^N\exp[-y_i(f_{m-1}(x_i)+\alpha G(x_i))] \tag{20} (αm,Gm(x))=argα,Gmini=1Nexp[yi(fm1(xi)+αG(xi))](20)
    式(20)可以表示为
    (21) ( α m , G m ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 N w ˉ m i exp ⁡ [ − y i α G ( x i ) ] (\alpha_m,G_m(x))=\arg\min_{\alpha,G}\sum_{i=1}^N\bar w_{mi}\exp[-y_i\alpha G(x_i)] \tag{21} (αm,Gm(x))=argα,Gmini=1Nwˉmiexp[yiαG(xi)](21)
    其中, w ˉ m i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar w_{mi}=\exp[-y_if_{m-1}(x_i)] wˉmi=exp[yifm1(xi)]。因为 w ˉ m i \bar w_{mi} wˉmi既不依赖 α \alpha α也不依赖于 G G G,所以与最小化无关。但 w ˉ m i \bar w_{mi} wˉmi依赖于 f m − 1 ( x ) f_{m-1}(x) fm1(x),随着每一轮迭代而发生改变。
    现证使式(21)达到最小的 α ∗ \alpha^* α G m ∗ ( x ) G_m^*(x) Gm(x)就是AdaBoost算法所得到的 α m \alpha_m αm G m ( x ) G_m(x) Gm(x)。求解式(21)可分两步:
    首先,求 G m ∗ ( x ) G_m^*(x) Gm(x)。对任意 α &gt; 0 \alpha&gt;0 α>0,使式(21)最小的 G ( x ) 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_{mi}I(y_i\neq G(x_i)) Gm(x)=argGmini=1NwˉmiI(yi̸=G(xi))
    其中, w ˉ m i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar w_{mi}=\exp[-y_if_{m-1}(x_i)] wˉmi=exp[yifm1(xi)]
    此分类器 G m ∗ ( x ) G_m^*(x) Gm(x)即为AdaBoost算法的基本分类器 G m ( x ) G_m(x) Gm(x),因为它是使第 m m m轮加权训练数据分类误差率最小的基本分类器。
    之后,求 α ∗ \alpha^* α。参照式(11),式(21)中
    (22) ∑ 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&amp;\bar w_{mi}\exp[-y_i\alpha G(x_i)] \\ &amp;=\sum_{y_i=G_m(x_i)}\bar w_{mi}e^{-\alpha}+\sum_{y_i\neq G_m(x_i)}\bar w_{mi}e^{\alpha} \\ &amp;=(e^{\alpha}-e^{-\alpha})\sum_{i=1}^N\bar w_{mi}I(y_i\neq G(x_i))+e^{-\alpha}\sum_{i=1}^N\bar w_{mi} \tag{22} \end{aligned} i=1Nwˉmiexp[yiαG(xi)]=yi=Gm(xi)wˉmieα+yi̸=Gm(xi)wˉmieα=(eαeα)i=1NwˉmiI(yi̸=G(xi))+eαi=1Nwˉmi(22)
    将已求得的 G m ∗ ( x ) G_m^*(x) Gm(x)带入式(22),对 α \alpha α求导并使导数为0,即得到使式(21)最小的 α \alpha α
    α m ∗ = 1 2 log ⁡ 1 − e m e m \alpha_m^*=\frac{1}{2}\log\frac{1-e_m}{e_m} αm=21logem1em
    其中, 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 ) ) e_m=\frac{\sum_{i=1}^N\bar w_{mi}I(y_i\neq G_m(x_i))}{\sum_{i=1}^N\bar w_{mi}}=\sum_{i=1}^Nw_{mi}I(y_i\neq G_m(x_i)) em=i=1Nwˉmii=1NwˉmiI(yi̸=Gm(xi))=i=1NwmiI(yi̸=Gm(xi))
    这里的 α m ∗ \alpha_m^* αm与AdaBoost算法第2©步的 α m \alpha_m αm完全一致。
    最后来看每一轮样本权值的更新。由
    f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m-1}(x)+\alpha_mG_m(x) fm(x)=fm1(x)+αmGm(x)
    以及 w ˉ m i = exp ⁡ [ − y i f m − 1 ( x i ) ] \bar w_{mi}=\exp[-y_if_{m-1}(x_i)] wˉmi=exp[yifm1(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[-y_i\alpha_mG_m(x)] wˉm+1,i=wˉm,iexp[yiαmGm(x)]
    这与AdaBoost算法第2(d)步的样本权值的更新,只相差规范化因子,因而等价。

提升树

提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

  • 提升树模型
    提升方法实际采用加权模型(即基函数的现行组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。基本分类器 x &lt; ν x&lt;\nu x<ν x &gt; ν x&gt;\nu x>ν,可以看作是由一个根节点直接链接两个叶节点的简单决策树,即所谓的决策树桩。提升树模型可以表示为决策树的加法模型:
    (23) f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) \tag{23} fM(x)=m=1MT(x;Θm)(23)
    其中, T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)表示决策树; Θ m \Theta_m Θm为决策树的参数; M M M为树的个数。

  • 提升树算法
    提升树算法采用前向分步算法。首先确定初始提升树 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0,第 m m m步的模型是
    (24) f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) \tag{24} fm(x)=fm1(x)+T(x;Θm)(24)
    其中, f m − 1 ( x ) f_{m-1}(x) fm1(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数 Θ m \Theta_m Θm
    (25) Θ ^ 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}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) \tag{25} Θ^m=argθmmini=1NL(yi,fm1(xi)+T(xi;Θm))(25)
    由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个高功能的学习算法。
    下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。
    对于二类分类问题,提升树算法只需要将AdaBoost算法1中的基本分类器限制为二分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况,这里不再细述。下面叙述回归问题的提升树。
    已知一个训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ &ThinSpace; , ( x N , y N ) } , x i ∈ X ⊆ R n T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},x_i\in\mathcal{X}\subseteq R^n T={(x1,y1),(x2,y2),,(xN,yN)},xiXRn X \mathcal{X} X为输入空间, y i ∈ Y ⊆ R y_i\in\mathcal{Y}\subseteq R yiYR Y \mathcal{Y} Y为输出空间。如果将输入空间 X \mathcal{X} X划分为 J J J个互不相交的区域 R 1 , R 2 , ⋯ &ThinSpace; , R J R_1,R_2,\cdots,R_J R1,R2,,RJ,并且在每个区域上确定输出的常量 c j c_j cj,那么树可表示为
    (26) T ( x ; Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x;\Theta)=\sum_{j=1}^Jc_jI(x\in R_j) \tag{26} T(x;Θ)=j=1JcjI(xRj)(26)
    其中,参数 Θ = { ( R 1 , c 1 ) , ( R 2 , c 2 ) , ⋯ &ThinSpace; , ( R J , c J ) } \Theta=\{(R_1,c_1),(R_2,c_2),\cdots,(R_J,c_J)\} Θ={(R1,c1),(R2,c2),,(RJ,cJ)}表示树的区域划分和各区域上的常数。 J J J是回归树的复杂度即叶节点个数。
    回归问题提升树使用以下前向分步算法:
    f 0 ( x ) = 0 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) , m = 1 , 2 , ⋯ &ThinSpace; , M f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) \begin{aligned} &amp;f_0(x)=0 \\ &amp;f_m(x)=f_{m-1}(x)+T(x;\Theta_m), m=1,2,\cdots,M \\ &amp;f_M(x)=\sum_{m=1}^MT(x;\Theta_m) \end{aligned} f0(x)=0fm(x)=fm1(x)+T(x;Θm),m=1,2,,MfM(x)=m=1MT(x;Θm)
    在前向分步算法的第 m m m步,给定当前模型 f m − 1 ( x ) f_{m-1}(x) fm1(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}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) Θ^m=argΘmmini=1NL(yi,fm1(xi)+T(xi;Θm))
    得到 Θ ^ m \hat\Theta_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 , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 = [ r − T ( x ; Θ m ) ] 2 \begin{aligned} L(y,&amp;f_{m-1}(x)+T(x;\Theta_m)) \\ &amp;=[y-f_{m-1}(x)-T(x;\Theta_m)]^2 \\ &amp;=[r-T(x;\Theta_m)]^2 \end{aligned} L(y,fm1(x)+T(x;Θm))=[yfm1(x)T(x;Θm)]2=[rT(x;Θm)]2
    这里,
    (27) r = y − f m − 1 ( x ) r=y-f_{m-1}(x) \tag{27} r=yfm1(x)(27)
    是当前模型拟合数据的残差。所以,对回归问题的提升树算法来说,只需简单地拟合当前模型的残差。这样,算法是相当简单的。现将回归问题的提升树算法叙述如下。
    算法3(回归问题的提升树算法)
    输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ &ThinSpace; , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y ⊆ R T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},x_i\in\mathcal{X}\subseteq R^n,y_i\in\mathcal{Y}\subseteq R T={(x1,y1),(x2,y2),,(xN,yN)},xiXRn,yiYR
    输出:提升树 f M ( x ) f_M(x) fM(x)
    (1) 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
    (2) 对 m = 1 , 2 , ⋯ &ThinSpace; , M m=1,2,\cdots,M m=1,2,,M
    (a) 按式(27)计算残差
    r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , ⋯ &ThinSpace; , N r_{mi}=y_i-f_{m-1}(x_i), i=1,2,\cdots,N rmi=yifm1(xi),i=1,2,,N
    (b) 拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)
    © 更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm)
    (3) 得到回归问题提升树
    f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)

  • 梯度提升
    提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出梯度提升算法。这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
    − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -\bigg[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\bigg]_{f(x)=f_{m-1}(x)} [f(xi)L(y,f(xi))]f(x)=fm1(x)
    作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
    算法4(梯度提升算法)
    输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ &ThinSpace; , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y ⊆ R T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},x_i\in\mathcal{X}\subseteq R^n,y_i\in\mathcal{Y}\subseteq R T={(x1,y1),(x2,y2),,(xN,yN)},xiXRn,yiYR;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
    输出:回归树 f ^ ( x ) \hat f(x) f^(x)
    (1) 初始化
    f 0 ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y i , c ) f_0(x)=\arg\min_c\sum_{i=1}^NL(y_i,c) f0(x)=argcmini=1NL(yi,c)
    (2) 对 m = 1 , 2 , ⋯ &ThinSpace; , M m=1,2,\cdots,M m=1,2,,M
    (a) 对 i = 1 , 2 , ⋯ &ThinSpace; , N i=1,2,\cdots,N i=1,2,,N,计算
    r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-\bigg[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\bigg]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(y,f(xi))]f(x)=fm1(x)
    (b) 对 r m i r_{mi} rmi拟合一个回归树,得到第 m m m棵树的叶节点区域 R m j , j = 1 , 2 , ⋯ &ThinSpace; , J R_{mj},j=1,2,\cdots,J Rmj,j=1,2,,J
    © 对 j = 1 , 2 , ⋯ &ThinSpace; , J j=1,2,\cdots,J j=1,2,,J,计算
    c m j = arg ⁡ min ⁡ c ∑ x j ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\arg\min_c\sum_{x_j\in R_{mj}}L(y_i,f_{m-1}(x_i)+c) cmj=argcminxjRmjL(yi,fm1(xi)+c)
    (d) 更新 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)+\sum_{j=1}^Jc_{mj}I(x\in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)
    (3) 得到回归树
    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)=\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x\in R_{mj}) f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj)
    算法第1步初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树。第2(a)步计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值。第2(b)步估计回归树叶结点区域,以拟合残差的近似值。第2©步利用线性搜索估计叶结点区域的值,使损失函数极小化。第2(d)步更新回归树。第3步得到输出的最终模型 f ^ ( x ) \hat f(x) f^(x)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值