提升方法(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)。
执行流程:
- 初始化 b 0 ( x ) = 0 b_{0}(x)=0 b0(x)=0。
- 对每个弱学习器 b m ( x ) , m = 1 , 2 … M b_{m}(x),m=1,2 \dots M bm(x),m=1,2…M,前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=1∑NL(yi,j=0∑m−1β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个学习器与实际输出的误差。
- 得到加权模型 F ( x ) = ∑ j = 1 M β j b j ( x ) F(x)=\sum\limits_{j=1}^{M}\beta_{j}b_{j}(x) F(x)=j=1∑Mβ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)。
执行流程:
- 初始化数据权重 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,N1…N1}1∗N;
- 对每个弱分类器 b m ( x ) , m = 1 , 2 … M b_{m}(x),m=1,2 \dots M bm(x),m=1,2…M,前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=1∑Nωmi(I(yi ̸=bm(xi;γ))) 其中 ω m i \omega_{mi} ωmi表示第 m m m个弱分类器对第 i i i条数据的权重, I ( ⋅ ) I(·) I(⋅)为指示函数;
- 计算 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=21logem1−em
- 更新数据权重参数如下 (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=1∑Nωmiexp(−αmyibm(xi))(2)
- 若 m ≠ M m \neq M m̸=M,令 m = m + 1 m=m+1 m=m+1,递归回到步骤2;
- 最终得到强分类器 f ( x ) = ∑ i = 1 M α i b i ( x ) f(x)=\sum\limits_{i=1}^{M}\alpha_{i}b_{i}(x) f(x)=i=1∑Mα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=1∑Mα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=1∑Nω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的和} w的和w的和。下面给出了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.0if sample_weight != NULL:w = sample_weight[i]# Count weighted class frequency for each targetfor k in range(self.n_outputs):c = <SIZE_t> y[i * y_stride + k]sum_total[k * self.sum_stride + c] += wself.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=0或1, α 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=1∑NI(F(xi)̸=yi)≤N1i=1∑Nexp(−yif(xi))=m=1∏MZm
证明:
当 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)=0≤exp(−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)=1≤exp(−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=1∑Nexp(−yif(xi))由(2)式知=N1i=1∑Nexp(−yij=1∑Mαjbj(xi))=i=1∑Nω1iexp(−yij=1∑Mαjbj(xi))=i=1∑Nω1ij=1∏Mexp(−yiαjbj(xi))=i=1∑NZ1ω2ij=2∏Mexp(−yiαjbj(xi))=i=1∑NZ1Z2ω3ij=3∏Mexp(−yiαjbj(xi))…=i=1∑NZ1Z2…ZM−1ωM,ij=M∏Mexp(−yiαjbj(xi))=Z1Z2…ZM−1i=1∑NωM,iexp(−yiαMbM(xi))=Z1Z2…ZM−1ZM=m=1∏MZm
证毕
由定理可知,我们只要降低每一个弱分类器的 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=1∏MZm=m=1∏M(2em(1−em) )=m=1∏M1−4γm2 ≤exp(−2m=1∑Mγm2)
γ m = 1 2 − e m \gamma_{m}=\frac{1}{2}-e_{m} γm=21−em
证明:
∏ 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=1∏MZm=m=1∏Mi=1∑Nωmiexp(−αmyibm(xi))=m=1∏M(yi=bm(xi)∑ωmiexp(−αm)+yi̸=bm(xi)∑ωmiexp(αm))=m=1∏M(e−αmyi=bm(xi)∑ωmi+eαmyi̸=bm(xi)∑ωmi)由2.1中,步骤2中em定义式,进一步化简得=m=1∏M(e−αm(1−em)+eαmem)由2.1中,步骤3中αm定义式,进一步化简得=m=1∏M(2em(1−em) )设γm=21−em,进一步化简得=m=1∏M1−4γm2 由ex与1−x 的麦克劳林展开式知1−4γm2 ≤exp(−2γm2),进一步化简得≤exp(−2m=1∑Mγ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=1∑NI(F(xi)̸=yi)≤exp(−2m=1∑Mγ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=1∑NL(yi,fm−1(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=1∑Nexp(−yi(fm−1(xi)+βmbm(xi;γ)))=argβm,γmini=1∑Nω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(−yifm−1(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=1∑Nωmiexp(−yiβmbm(xi;γ))=argβm,bm(x;γ)minyi̸=bm(x;γ)∑ωmieβm+yi=bm(x;γ)∑ωmie−βm=argβm,bm(x;γ)min(eβm−e−βm)yi̸=bm(x;γ)∑ωmi+e−βmi=1∑Nωmi=argβm,bm(x;γ)min(eβm−e−βm)i=1∑NωmiI(yi̸=bm(xi;γ))+e−βmi=1∑Nωmi
其中
ω m i ‾ = exp ( − y i f m − 1 ( x i ) ) \overline{\omega_{mi}}=\exp{(-y_{i}f_{m-1}(x_{i}))} ωmi=exp(−yifm−1(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=1∑Nω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∗=21logem1−em
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=1∑Nω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)=fm−1(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(−yifm−1(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(fm−1(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) fm−1(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;
输出:回归提升树
执行流程:
- 初始化 f 0 ( x ) = 0 f_{0}(x)=0 f0(x)=0;
- 对每一个基回归树 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=yi−fm−1(xi),m=1,2…M,i=1,2…N
- 利用残差 r m i r_{mi} rmi,学习基回归树 b m ( x ) b_{m}(x) bm(x),具体可以参考CART回归树的过程;
- 更新 f m ( x ) = f m − 1 ( x ) + b m ( x ) f_{m}(x)=f_{m-1}(x)+b_{m}(x) fm(x)=fm−1(x)+bm(x),若m<M,更新m=m+1,递归执行步骤2-4。
在《统计学习方法》中,回归提升树没有基学习器的权值,关于这一点存在异议。
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=1∑NL(yi,fm−1(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)=fm−1(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;
输出:梯度提升模型
执行流程:
- 初始化 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=1∑NL(yi,c)这里初始化和传统的前向分步算法令 f 0 ( x ) = 0 f_{0}(x)=0 f0(x)=0不同,这里这样做应该是保证后面求偏导过程不是在零点。
- 对第 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)=fm−1(x)
需要注意的是 r m i r_{mi} rmi中, 1 ≤ i ≤ N 1\leq i\leq N 1≤i≤N。 - 利用残差组成新的数据 ( x i , r m i ) (x_{i}, r_{mi}) (xi,rmi),来学习第 m m m个基学习器 h m ( x ) h_{m}(x) hm(x)。
- 更新梯度提升模型 f m ( x ) = f m − 1 ( x ) + h m ( x ) f_{m}(x)=f_{m-1}(x)+h_{m}(x) fm(x)=fm−1(x)+hm(x)若 m < M m<M m<M,递归执行步骤2-4。
- 返回最终的梯度提升模型 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,fm−1(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)=fm−1(x)+γmhm(x)
参考书籍:
《统计学习方法》
提升方法(boost)相关推荐
- 复现经典:《统计学习方法》第 8 章 提升方法
本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...
- 提升方法(boosting)详解
注:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-727-1-1.html 提升方法是基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综 ...
- 统计学习方法笔记(8)——提升方法之梯度树提升GTB(GBRT)
Introduction 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比 ...
- python 梯度提升树_梯度提升方法(Gradient Boosting)算法案例
GradientBoost算法 python实现,该系列文章主要是对<统计学习方法>的实现. 完整的笔记和代码以上传到Github,地址为(觉得有用的话,欢迎Fork,请给作者个Star) ...
- jekyll 博客对搜索引擎的SEO提升方法--head中的meta标签和Jekyll SEO Tag
我用GitHub Pages搭建了jekyll的博客后,想要提升自己博客的SEO,尤其是对搜索引擎:百度.谷歌. head中的meta标签 说道提升SEO,必然要提到HTML中的head标签中的met ...
- 重构职场竞争力之测试能力提升方法
重构职场竞争力之测试能力提升方法 通过,这十几年来一直在金融外包公司就职,在不同城商行出差协助公司处理不同项目的性能测试与优化,加上经历过08年的金融危机,看过多家企业倒闭.裁员等问题,明白一家企业在 ...
- 31天重构学习笔记3. 提升方法
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接 ...
- 十四个值得推荐的个人提升方法
十四个值得推荐的个人提升方法 文章分类:IT生活 1.每天读书.书是智慧的源泉.你读的书越多,你就会变得更加有智慧.都有什么书可以让你提高自己呢?博华看过的<建立你的时间资本>. ...
- 提升方法-Adaboost算法
总第85篇 01|基本概念: 提升方法的基本思想:对于任何一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独的判断好. 先来看两个概念:强可学习和弱可学习. 在概率近似 ...
最新文章
- Tomcat 系统架构
- 我读了这七本书,写了这篇关于如何高效阅读的文章(转)
- 利用solr实现商品的搜索功能
- 比较难发音的英语音标音符_音素_英语发音
- absolute和relative元素 设置百分比宽高的差异
- 解决statsmodels报错ValueError: Pandas data cast to numpy dtype of object.
- PYTHON网络爬虫与信息提取[网络爬虫协议](单元二)
- 使用ffmpeg获取影片信息
- (转)Aladdin, 领先的投资管理整合平台
- JDK API 1.6.0中文版零C币纯分享,直接下载即可。
- 无线通讯射频测试软件,ISIS射频工具(专业射频测试软件)V2.03 正式版
- 数据中心机房建设项目技术方案
- Unity2D入门(一):编辑素材、绘制地图
- 关于融资融券和转融通
- 股票python量化交易026-数据回测的概念以及现有框架
- v.douyin.com生成制作抖音缩短口令网址php接口方法
- Redis实现分布式锁(setnx、getset、incr)以及如何处理超时情况(二)
- 在 阿里云ECS 上安装 CDH6.2 standalong
- Android——RIL 机制源码分析
- 前端优化之回流(Reflow)与重绘(Repaint)