Boosting学习总结及理解(1)

Boosting是集成学习算法中用的比较多的一类,主要的代表算法有Adaboost,GBDT,XGBoost。

首先boosting算法是一个不断迭代提升的过程,这个过程整体是串行的(XGBoost在建立回归树的过程中可以实现并行化)。首先基于训练集训练出一个弱分类器,根据该弱分类器的分类结果看看哪些样本被分类错了,然后增大分类错误样本的权重,减小分类正确的样本的权重,构成新的数据集,然后传入下一个弱分类器中,根据分类结果再次改变权重组成新的数据集传入下一个弱分类器,这样反复迭代,就会得到若干个弱分类器,把这些弱分类器组合起来,就是一个强分类器。

Adaboost

Adaboost算法和boosting的整体思路基本一致:

输入:1)训练数据集% MathType!MTEF!2!1!+- % feaagKart1ev2aaatCvAUfeBSn0BKvguHDwzZbqefSSZmxoatCvAUf % eBSjuyZL2yd9gzLbvyNv2CaeHbuLwBLnhiov2DGi1BTfMBaeXatLxB % I9gBaeHbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqr % pepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs % 0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaGaaiGaciGacm % aacmGaaqaacaqbaeaakeaacaWGubGaeyypa0Jaai4EaiaacIcacaWG % 4bWaaSbaaSqaaiaaigdaaeqaaOGaaiilaiaadMhadaWgaaWcbaGaaG % ymaaqabaGccaGGPaGaaiilaiaacIcacaWG4bWaaSbaaSqaaiaaikda % aeqaaOGaaiilaiaadMhadaWgaaWcbaGaaGOmaaqabaGccaGGPaGaai % Olaiaac6cacaGGUaGaaiOlaiaac6cacaGGOaGaamiEamaaBaaaleaa % caWGobaabeaakiaacYcacaWG5bWaaSbaaSqaaiaad6eaaeqaaOGaai % ykaiaac2haaaa!5917! \[T = \{ ({x_1},{y_1}),({x_2},{y_2}).....({x_N},{y_N})\} \]% MathType!MTEF!2!1!+- % feaagKart1ev2aaatCvAUfeBSn0BKvguHDwzZbqefSSZmxoatCvAUf % eBSjuyZL2yd9gzLbvyNv2CaeHbuLwBLnhiov2DGi1BTfMBaeXatLxB % I9gBaeHbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqr % pepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs % 0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaGaaiGaciGacm % aacmGaaqaacaqbaeaakeaacaWGubGaeyypa0Jaai4EaiaacIcacaWG % 4bWaaSbaaSqaaiaaigdaaeqaaOGaaiilaiaadMhadaWgaaWcbaGaaG % ymaaqabaGccaGGPaGaaiilaiaacIcacaWG4bWaaSbaaSqaaiaaikda % aeqaaOGaaiilaiaadMhadaWgaaWcbaGaaGOmaaqabaGccaGGPaGaai % Olaiaac6cacaGGUaGaaiOlaiaac6cacaGGOaGaamiEamaaBaaaleaa % caWGobaabeaakiaacYcacaWG5bWaaSbaaSqaaiaad6eaaeqaaOGaai % ykaiaac2haaaa!5917! \[T = \{ ({x_1},{y_1}),({x_2},{y_2}).....({x_N},{y_N})\} \]T = \{ ({x_1},{y_1}),({x_2},{y_2}).....({x_N},{y_N})\},其中 {x_i} 表示训练数据,{y_i} = \{ + 1, - 1\} 表示标签

           2)弱分类器

输出:强分类器G(x)

(1)初始化训练数据的权值分布(一开始所有数据的权值都是相同的)

                                  {D_1} = ({w_{11}},{w_{12}}...{w_{1i}}...{w_{1N}}),{w_{1i}} = \frac{1}{N},i = 1,2...N

(2)(a)首先用具有权值分布的数据 {D_1} 来训练基分类器 {G_1}(x) 

          (b)计算 {G_1} 在训练数据集上的分类错误率

                            {e_1} = P({G_1}({x_i}) \ne {y_i})

          (c)计算{G_1}({x_i)} 的系数 

                            {\alpha _1} = \frac{1}{2}\ln \frac{​{1 - {e_1}}}{​{​{e_1}}}

          (d)更新训练数据集的权值分布

                             {D_2} = ({w_{21}},{w_{22}}...{w_{2i}}...{w_{2N}})

             其中\dpi{120} \fn_phv {w_{_{2i}}} = \frac{​{​{w_{1i}}}}{​{​{Z_1}}}\exp ( - {\alpha _1}{y_i}{G_1}({x_i})){Z_1} = \sum\limits_{i = 1}^N {​{w_{1i}}\exp ( - {\alpha _1}{y_i}{G_1}({x_i}))}i = 1,2...N,Z1是规范化因子,之所以需要Z1是为了让D2符合一个概率分布模型。

这样就得到了第二个基分类器 {G_2} 的训练数据,接着就把 {D_2} 传给 {G_2} ,从而能够得到 {e_2} 和 {\alpha _2} ,进而得到 {D_3} ,再接着把 {D_3} 传给第三个基分类器 {G_3} ,一直继续下去,最终得到 {D_m}从而得到 {G_m} ,所以一直这样迭代下去就可以得到M个基分类器。

(3)构建基分类器的现行组合

                                       f(x) = \sum\limits_{m = 1}^M {​{\alpha _m}{G_m}(x)}

        最终输出的分类器就是

                                     G(x) = sign(f(x)) = sign(\sum\limits_{m = 1}^M {​{\alpha _m}{G_m}(x)} )


提升树(BDT)如何拟合残差:

(a)假设有一组数据({x_1},{y_1})({x_2},{y_2})...({x_n},{y_n}),首先建立第一个回归树 {T_1}(x) 来拟合这些数据,得到预测结果为({x_1},\widehat {​{y_1}}^1)({x_2},\widehat {​{y_2}}^1)...({x_n},\widehat {​{y_n}}^1),计算预测结果与实际结果的残差{r_1}^1 = {y_1} - {\widehat {​{y_1}}^1}{r_2}^1 = {y_2} - \widehat {​{y_2}}^1,...,{r_n}^1 = {y_n} - \widehat {​{y_n}}^1。式中的上标‘1’表示第一个回归树预测的结果及残差

(b)建立第二个回归树 {T_2}(x) 来拟合({x_1},{r_1}^1)({x_2},{r_2}^1)...({x_n},{r_n}^1),得到预测结果为({x_1},\widehat {​{y_1}}^2)({x_2},\widehat {​{y_2}}^2)...({x_n},\widehat {​{y_n}}^2),再次计算残差{r_1}^2 = {y_1} - {\widehat {​{y_1}}^2}{r_2}^2 = {y_2} - \widehat {​{y_2}}^2,...,{r_n}^2 = {y_n} - \widehat {​{y_n}}^2。上标‘2’表示的是第二个回归树预测的结果及残差

(3)一直到建立第M个回归树{T_M}(x)来拟合({x_1},{r_1}^M^-^1)({x_2},{r_2}^M^-^1)...({x_n},{r_n}^M^-^1),最终的输出就是

                                                                 f(x) = \sum\limits_{m = 1}^M {​{T_m}(x)}


上面只是说到了拟合残差的过程,如何建立回归树:(下面的例子是李航老师的统计学习P149的一道题)

有一组数据如下:

{x_i}12345678910
{y_i}5.565.705.916.406.807.058.908.709.009.05

可以看出这里的特征只有一个,该特征对应的取值 {x_i} 有10个,

(a)首先需要将特征的取值按升序排列,这里已经是升序排列了。求数据的切分点s,根据所给的数据,考虑如下切分点:1.5,  2.5,  3.5,4.5,  5.5,  6.5,  7.5,  8.5,  9.5。

(b)对于切分点s=1.5,数据被分割成 {R_1} =(5.56){R_2}=(5.70,5.91,6.40,6.80,7.05,8.90,8.70,9.00,9.05),为了使 {R_1} 和 {R_2} 内部的平方误差最小,可知{R_1} 和 {R_2} 两个区域的取值应该是所有数的平均值,则

                                               {c_1} = \frac{1}{​{​{N_1}}}\sum\limits_{​{x_i} \in R_1} {​{y_i}},              {c_2} = \frac{1}{​{​{N_2}}}\sum\limits_{​{x_i} \in R_2} {​{y_i}}

计算得 c1=5.56, c2= 7.50

计算切分点为1.5时的平方误差

                            m(1.5) = {\sum\limits_{​{x_i} \in {R_1}} {({y_i} - {c_1})} ^2} + {\sum\limits_{​{x_i} \in {R_2}} {({y_i} - {c_2})} ^2}=0+15.72=15.72

同样的当s=2.5,3.5,4.5,  5.5,  6.5,  7.5,  8.5,  9.5都可以计算得到相应的平方误差:

s1.52.53.54.55.56.57.58.59.5
m(s)15.7212.078.365.783.911.938.0111.7315.74

(c)选出平方误差最小的切分点作为最终的切分点,可以看出当s=6.5时误差最小,所以可建立回归树{T_1}(x)

                                                      {T_1}(x) = \left\{ {\begin{array}{*{20}{c}} {6.24,x < 6.5}\\ {8.91,x \ge 6.5} \end{array}} \right.

     可以看出第一课树有两个叶子节点,左孩子具有样本(1,2,3,4,5,6),右孩子具有样本(7,8,9,10),左右孩子节点的取值就是每个样本对应 y 取值的平均值,这样第一课回归树就建立完成了,此时{f_1}(x) = {T_1}(x)

(d)计算残差 r = {y_i} - {f_1}({x_i}) 得到下表:

{x_i}12345678910
r-0.68-0.54-0.330.160.560.81-0.01-0.210.090.14

  得到每个样本对应的残差之后开始建立第二课回归树{T_2}(x)拟合残差,用同样的方式:

            注:因为这里只有一个特征,所以不考虑需要选择最优的特征分割点,只需要考虑切分点

            1)对切分点s,将数据切分成{R_1} = \{ x|x \le s\} ,{R_2} = \{ x|x > s\}

            2)计算 {R_1} 和 {R_2} 内部取值的平均值

                                    {c_1} = \frac{1}{​{​{N_1}}}\sum\limits_{​{x_i} \in R_1} {​{y_i}},              {c_2} = \frac{1}{​{​{N_2}}}\sum\limits_{​{x_i} \in R_2} {​{y_i}}

             3)计算均方误差,选出平方误差最小的那个切分点(这里s=1.5,  2.5,  3.5,4.5,  5.5,  6.5,  7.5,  8.5,  9.5)

                            \mathop {\min }\limits_s [{\sum\limits_{​{x_i} \in {R_1}} {({y_i} - {c_1})} ^2} + {\sum\limits_{​{x_i} \in {R_2}} {({y_i} - {c_2})} ^2}]

最后发现s=3.5时平方误差最小,所以{T_2}(x)为:

                                        {T_2}(x) = \left\{ {\begin{array}{*{20}{c}} {-0.52,x < 3.5}\\ {0.22,x \ge 3.5} \end{array}} \right.

(e)得到第二课回归树 {T_2}(x),这样输出就是:

                           {f_2}(x) = {f_1}(x) + {T_2}(x) = \left\{ {\begin{array}{*{20}{c}} {5.72,x < 3.5}\\ {6.46,3.5 \le x < 6.5}\\ {9.13,x \ge 6.5} \end{array}} \right.

 一直这样拟合下去,每建立一棵树预测之后,都可以求得对应的平方误差和,直到最终的平方误差和满足要求停止。

 最终的输出就是:

                                             f(x) = {f_M}(x) + \sum\limits_{m = 1}^{M - 1} {​{T_m}(x)} = \sum\limits_{m = 1}^M {​{T_m}(x)}


参考:李航《统计学习方法》

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值