自适应提升与梯度提升

作者: 有机会一起种地OT | 来源:发表于2021-10-15 13:58 被阅读0次
    自适应提升

    提升方法通过前一个学习器所犯的错误来训练下一个学习器,是一种串行方法。关于提升算法有很多,最具代表性的是AdaBoost算法。

    集成学习-组合多学习器中介绍的Adaboost方法,样本按概率被抽取作为训练子学习器的训练集。而每个子学习器根据前一子学习器的结果误差更新样本抽取概率,使被误分类的实例在后面的训练中得到更多的重视。

    分类问题中,Adaboost方法还可以采用全样本数据训练每一个基学习器,根据前一子学习器的结果改变样本数据的权重,来使被误分类的实例得到更多重视。具体流程如下:

    训练数据集T={(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)},其中x_i\in X \subseteq R^Ny_i\in Y=\{-1,+1\}
    1)初始化训练数据权值分布
    D_1=(w_{11},\cdots,w_{1i},\cdots,w_{1N}), w_{1i} = \frac1{N},i=1,2,\cdots,N
    2)对m=1,2,\cdots,M
      (a)使用具有权值D_m的训练集学习,得到基分类器
    G_m(x):X\to \{-1,+1\}
      (b)计算G_m(x)在训练集上的分类误差率
    e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i)
      (c)计算G_m(x)的系数
    \alpha_m=\frac12\log \frac{1-e_m}{e_m}
      (d)更新训练集的权重分布
    D_{m+1}=(w_{m+1,1},\cdots,w_{m+1,i},\cdots,w_{m+1,N})
    w_{m+1,i}=\frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_i))
    Z_m=\sum_{i=1}^N w_{mi}\exp(-\alpha_my_iG_m(x_i))是规范化因子
    3)构建基本分类器的线性组合
    f(x)=\sum_{m=1}^M\alpha_m G_m(x)
    得到最终分类器G(x)=sign(f(x))

    回归问题情况下,则对上一个学习器拟合结果的残差进行学习,得到后面的学习器。

    基学习器根据具体问题选定。一般常见的是提升树算法,adaboost的最决策树一般被认为是最好的机器学习算法之一。
    而针对不同问题的提升树,主要区别在于使用的损失函数,包括回归问题的平方误差,分类问题的指数误差,或一般决策问题的一般损失函数。

    梯度提升

    提升树在学习过程中,当损失函数是平方损失和指数损失时,计算相对简单。但对一般损失函数,往往每一步优化不那么容易。基于此,梯度提升方法,通过学习前一个子学习器残差的负梯度,得到后面的学习器。典型的就是GBDT算法(回归树)。

    训练数据集T={(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)},其中x_i\in X \subseteq R^Ny_i\in Y \subseteq R,损失函数L(y,f(x))f(x)为回归树。

    1)初始化f_0(x)=\arg\min_c\sum_{i=1}^N L(y_i,c)
    2)对m=1,2,\cdots,M
      (a)对i=1,2,\cdots,N,计算
    r_{mi}=-[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i) }]_{f(x)=f_{m-1}(x)}
      (b)对r_{mi}拟合一个回归树,得到第m棵树,共有J个叶子结点,其叶子结点区域为R_{mj}j=1,2,\cdots,J
      (c)对j=1,2,\cdots,J,计算
    c_{mj}=\arg\min_c \sum_{x_i\in R_{mj}}L(y_i,f_{m+1}(x_i)+c)
      (d)更新f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x\in R_{mj})
    3)得到最终回归树f(x)=f_M(x)=\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x\in R_{mj})

    对比

    推荐GBDT树的深度一般为6,对比DecisionTree/RandomForest需要把树的深度调到15或更高。原因在于Bagging主要关注降低方差,并行地训练很多不同的分类器的目的就是降低这个方差。因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。

    Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。Boosting来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差,所以对于每个基分类器来说,问题就在于如何选择variance更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。

    相关文章

      网友评论

        本文标题:自适应提升与梯度提升

        本文链接:https://www.haomeiwen.com/subject/xpcmoltx.html