传统机器学习-提升方法

在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,以提高分类器的性能。

提升方法需要回答两个问题:

  1. 每一轮如何改变训练数据的权值或概率分布
    • AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,降低被正确分类样本的权值
  2. 如何将弱分类器组合成一个强分类器。
    • AdaBoost:加权多数表决,加大分类误差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器的权值

AdaBoost算法算法流程

训练数据集:T=\{(x_1, y_1),(x_2, y_2),\cdots,(x_N,y_N)\},x_i \in \chi \subseteq \mathbb{R}^n, y_i \in \gamma = \{-1,+1\}

输出:最终分类器G(x)

(1)初始化训练数据的权值分布,初始具有均匀的权值分布,即每个训练样本在基本分类器的学习作用相同。

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

(2)对m=1,2,\cdots,M

          (a)使用具有权值分布D_m的训练数据集学习,得到基本分类器

                    G_m(x):\chi \rightarrow \{-1,+1\}

          (b)计算G_m(x)在训练数据集上的分类误差率,分类误差率是被G_m(x)误分类样本的权值之和。

                    e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neqy_i)                                                                           (1)

          (c)计算G_m(x)的系数,我们可以看出当e_m \leqslant 0.5\alpha_m \geqslant 0,并且\alpha_m随着e_m的减小而增大。

                    \alpha_m = \frac{1}{2}log\frac{1-e_m}{e_m} ,其中log是自然对数                                                                                  (2)

                                         

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

                    D_{m+1} = (w_{m+1,1},\cdots,w_{m+1,i},\cdots, w_{m+1,N})                                                                             (3)

                    w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)), \ \ i=1,2,\cdots,N                                                              (4)

                   其中Z_m是规范化因子,他使D_{m+1}成为一个概率分布

                    Z_m=\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i))                                                                                               (5)

                           弱分类器只那些比随机猜测略好的分类器,即e_m \leqslant 0.5,则有\alpha_m \geqslant 0,被基分类器G_m(x)错误分类的样本的权值得以扩大,被正确分类样本的权值得以缩小。

                            w_{m+1,i}=\left\{\begin{matrix} \frac{w_{m,i}}{Z_m}e^{-\alpha_m}, & G_m(x_i) =y_i \\ \frac{w_{m,i}}{Z_m}e^{\alpha_m}, & G_m(x_i) \neq y_i \end{matrix}\right.

(3)构建基本分类器的线性组合,\alpha_m随着e_m的减小而增大,即分类误差率越小的基本分类器在最终分类器中的作用越大。

                    f(x)=\sum_{m=1}^M\alpha_mG_m(x)                                                                                                                     (6)

           得到最终分类器,f(x)的符号决定实力x的类,f(x)的绝对值表示分类的确信度。

                    G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x))                                                                                (7)    

AdaBoost算法的解释

AdaBoost是模型为加法模型,损失函数为指数函数、学习算法为前向分步算法时的二分类算法。

前向分步算法

加法模型

        f(x) = \sum_{m=1}^M \beta_mb(x;\gamma_m)                                                                                                                                    (8)

给定训练数据及损失函数L(y,f(x))的条件下,学习加法模型f(x)成为经验风险极小化即损失函数极小化问题:

        \min_{\beta_m,\gamma_m}\sum_{i=1}^NL(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m))                                                                                                                    (9)

对该问题进行简化,前向分步算法的思路:从前向后,每次只学习一个基函数及其系数,逐渐逼近优化目标函数式(9),即每步只需优化:

        \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma))                                                                                                                                  (10)

输出:加法模型f(x)

(1)初始化f_0(x)=0

(2)对m=1,2,\cdots, M

          (a)极小化损失函数,得到参数\beta_m,\gamma_m

                    (\beta_m,\gamma_m)=argmin_{\beta, \gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma))                                                            (11)

          (b)更新

                   f_m(x)=f_{m-1}(x)+ \beta_m b(x;\gamma_m)                                                                                                  (12)

(3)得到加法模型

          f(x)=f_M(x)= \sum_{m=1}^M \beta_m b(x;\gamma_m)                                                                                                          (13)

 前向分步算法与AdaBoost

AdaBoost算法是前向分步加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

要证 前向分步算法学习的是加法模型,当基函数为基本分类器时,该加法模型等价于AdaBoost的最终分类器

         f(x)=\sum_{m=1}^M \alpha_m G_m(x)                                                                                                                                (14)

已知:模型是加法模型,损失函数是指数函数,损失函数公式如下

         L(y,f(x)) = exp(-yf(x))   

证明:假设经过m-1轮迭代前向分步算法已经得到f_{m-1}(x)

        \begin{aligned} f_{m-1}(x) &= f_{m-2}(x) + \alpha_{m-1}G_{m-1}(x) \\ &= \alpha_1G_1(x)+\cdots + \alpha_{m-1}G_{m-1}(x) \end{aligned}

           在第m轮迭代得到\alpha_mG_m(x)f_m(x) 

        \begin{aligned} f_{m}(x) &= f_{m-1}(x) + \alpha_{m}G_{m}(x) \end{aligned}       

           我们的目标是使前向算法得到的\alpha_mG_m(x)使f_m(x) 在训练集T上的指数损失最小,即

         (\alpha_m,G_m(x)) = argmin_{\alpha, G} \sum_{i=1}^Nexp(-y_i(f_{m-1}(x_i) + \alpha G(x_i)))                                                       (15)        

          式(15)可以表示为

         (\alpha_m,G_m(x)) = argmin_{\alpha, G} \sum_{i=1}^N\bar{w}_{m,i}exp(-y_i\alpha G(x_i))                                                                       (16)

        其中\bar{w}_{m,i}=exp[-y_if_{m-1}(x_i)],因为\bar{w}_{m,i}即不依赖于\alpha也不依赖于G,所以与最小化无关,但是\bar{w}_{m,i}依赖于f_{m-1}(x),随着每一轮迭代而发生变化。   

       首先求G^*_m(x),依据上下文,G输出的是类型,即非-1即+1,对\forall \alpha > 0\bar{w}_{m,i}与最小化无关,固定\alpha,则指数取值只能为exp(-\alpha)(当y_i=G(x_i)时,即判断正确),或者exp(\alpha)(当y_i \neq G(x_i)时,即判断错误),这时取最小,只能是误判最小化

      G^*_m(x)=argmin_G\sum_{i=1}^N\bar{w}_{m,i}I(y_i \neq G(x_i))

      次分类器G^*_m(x)即为AdaBoost算法的基本分类器G_m(x),因为它使第m轮迭代加权训练数据分类误差率最小的基本分类器。

     再求\alpha^*_m,式(16)中,

     \begin{aligned} \sum_{i=1}^N &\bar{w}_{m,i}exp[-y_i\alpha G_m(x_i)] \\ &=\sum_{y_i=G_m(x_i)}\bar{w}_{m,i }e^{-\alpha} + \sum_{y_i \neq G_m(x_i)}\bar{w}_{m,i }e^{\alpha} \\ &= (e^{\alpha}-e^{-\alpha})\sum_{i=1}^N\bar{w}_{m,i}I(y_i \neq G_m(x_i )) + e^{-\alpha}\sum_{I=1}^N\bar{w}_{m,i} \end{aligned}                                                                    (17)

      将已求得的G^*_m(x)带入式(17),对\alpha求导并使得导数为0,即得到使式(17)最小的\alpha

      \alpha^*_m = \frac{1}{2}log\frac{1-e_m}{e_m}

      其中e_m是分类误差率

     e_m=\frac{\sum_{i=1}^N\bar{w}_{m,i}I(y_i \neq G_m(x_i))}{\sum_{i=1}^N\bar{w}_{m,i}} =\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i)

    这里的\alpha^*_m与AdaBoost算法2(c)步的\alpha_m完全一致。

    最后来看每一轮样本权值的更新,由

    f_m(x)=f_{m-1}(x)+ \alpha_mG_m(x)

    以及\bar{w}_{m,i}=exp[-y_if_{m-1}(x_i)],可得

    \bar{w}_{m+1,i}=\bar{w}_{m,i}exp[-y_i\alpha_mG_m(x)]

    这与AdaBoost算法第2(d)步的样本权值的更新,只相差规范化因子,因而等价。

提升树

提升树模型

可以表示为决策树的加法模型,其中T(x;\Theta_m)表示决策树;\Theta_m是决策树的参数;M是树的个数:

        f_M(x)=\sum_{m=1}^MT(x;\Theta_m)                                                                                                                                      (18)

对分类问题决策树是二叉分类树;对回归问题决策树是二叉回归树。

提升树算法

初始提升树f_0(x)=0,第m步的模型是

      f_m(x) =f_{m-1}(x)+T(x;\Theta_m)                                                                                                                              (19)

其中,f_{m-1}(x)为当前模型,通过经验风险最小化确定下一棵决策树的参数\Theta_m

      \hat{\Theta}_m=argmin_{\Theta_m} \sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))                                                                                       (20)

针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一半决策问题。

回归提升树

训练数据集T=\{(x_1, y_1),(x_2, y_2),\cdots,(x_N,y_N)\},x_i \in \chi \subseteq \mathbb{R}^n, y_i \in \gamma \subseteq \mathbb{R},若将输入空间\chi划分为J个互不相交的区域R_1,R_2,\cdots,R_J,并且在每个区域上确定输出的常量c_j,则树可表示为:

      T(x;\Theta) =\sum_{j=1}^Jc_jI(x \in R_j)                                                                                                                          (21)

其中,参数\Theta = \{(R_1,c_1),(R_2,c_2), \cdots, (R_J,c_J)\}表示树的区域划分和各区域上的常量,J是回归树的复杂度即叶节点的个数。

回归提升树使用一下前向分步算法:

     \begin{aligned} f_0(x) &= 0 \\ f_m(x) &= f_{m-1}(x) + T(x;\Theta_m), \ \ \ m= 1,2,\cdots,M\\ f_M(x) &= \sum_{m=1}^MT(x;\Theta_m) \end{aligned}    

在前向分步算法的第m步,给定当前模型f_{m-1}(x),需求解

     \hat{\Theta}_m=argmin_{\Theta_m} \sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))

得到\hat{\Theta}_m,即第m棵树的参数。

采用平方损失函数时,

    L(y,f(x))=(y-f(x))^2

其损失变为

    \begin{aligned} &L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) \\ &=[y-f_{m-1}(x)-T(x;\Theta_m)]^2 \\ &=[r -T(x;\Theta_m)]^2 \end{aligned}

这里,

    r = y - f_m(x)                                                                                                                                                  (22)

是当前模型拟合数据的残差,所以对提升回归树算法来说,只需要简单的拟合当前模型的残差。

输出:提升树f_M(x)

(1)初始化f_0(x)=0

(2)对m=1,2,\cdots, M

        (a)按式(22)计算残差

             r_{m,i} = y_i - f_{m-1}(x_i), \ \ \ i =1,2,\cdots,N

      (b)拟合残差r_{m,i}学习一个回归树,得到T(x;\Theta_m)

      (c)更新f_m(x) &= f_{m-1}(x) + T(x;\Theta_m)

(3)得到回归提升树

       f_M(x) &= \sum_{m=1}^MT(x;\Theta_m)        

梯度提升

梯度提升是针对一般损失函数的优化,利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值

-[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}

作为回归问题提升树算法中的残差近似值,拟合一个回归树。

输出:提升树\hat{f}(x)

(1)初始化

          f_0(x)=argmin_c\sum_{i=1}^NL(y_i,c)

(2)对m=1,2,\cdots, M

        (a)按式(22)计算残差

             r_{m,i} =-[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} , \ \ \ i =1,2,\cdots,N

      (b)拟合残差r_{m,i}学习一个回归树,得到第m颗🌲的叶节点区域R_{mj},\ \ \ j=1,2,\cdots,J

      (c)对j=1,2,\cdots,J,计算

              c_{mj}=argmin_c\sum_{x_i \in R_{mj}}}L(y_i,f_{m-1}(x_i)+c)

      (c)更新f_m(x) &= f_{m-1}(x) + \sum_{j=1}^Jc_{mj}I(x \in R_{mj})

(3)得到回归提升树

       \hat{f}(x)=f_M(x) &= \sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x \in R_{mj})

算法第1步初始化,估计使损失函数极小化的常数值,它是只有一个根结点的树,即 x>c 和 x<c;第2 (a)步计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值。第2 (b)步估计回归树叶结点区域,以拟合残差的近似值。第2 (c)步利用线性搜索估计叶结点区域的值,使损失函数极小化。第2 (d)步更新回归树。第3步得到输出的最终模型。

梯度提升树(GBDT)的基本结构是决策树构成的树林,学习的方式是梯度提升。形象理解如下:

具体来说,GBDT作为集成模型,预测的方式是把所有子树的结果加起来。

            D(x) =d_{tree1}(x)+d_{tree2}(x) + \cdots

GBDT通过注意生成决策子树的方式生成整个树林,生成新子树的过程是利用样本标签值域当前树林预测值之间的残差,构建新子树。

假设当前已经产生了3颗子树,则当前的预测值为

            D(x) =d_{tree1}(x)+d_{tree2}(x) +d_{tree3}(x)

GBDT期望的是构建第4颗子树,使当前树林的预测结果D(x)与第4颗子树的预测值d_{tree4}(x)之和,进一步逼近理论上的拟合函数f(x),即

           D(x) + d_{tree4}(x) = f(x)

则,第4颗子树生成的过程是一目标拟合函数和已有树林预测结果的残差R(x)为目标的:

           R(x) = f(x) - D(x)

 

参考 :统计学习方法,李航

            深度学习推荐系统,王喆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值