Adaboost、GBDT、xgboost的原理基础

  • 这4种模型是集成模型中的提升树类别。(其他的类别还有装袋树(如RandomForest)、模型堆叠(stack))
  • 基于树模型的boosting方法是常用的,因为树模型相较于线性模型有更强的非线性拟合的能力。
  • 其中xgboost、lightgbm在众多的数据竞赛中表现出优秀的预测能力。

(本文通俗地描述对比几种算法的原理解释和区别)

 

1.  Adaboost

        Adaboost是各类数据挖掘、机器学习、统计学习书籍中都在介绍的算法。它每次迭代都会根据新的基学习器的误差$\epsilon_t$去更新基学习器的权重,然后根据基学习器权重去更新样本的权重,新的加权后的样本流入下一步的迭代。参考周志华《机器学习》P174中的算法描述(以分类为例):

算法描述

输入:训练集$D=\left\{(x_1,y_1),(x_2,y_2),…,(x_m,y_m)\right\}$;基学习器$h$;建立的基学习器数目$T$

步骤:

[1]$D_1(x)= \frac{1}{m}$ 

[2]$for \quad t  \quad in \quad range(T):$

[3]$\qquad \epsilon_t=P_{x\sim D_t}(h_t(x) \neq f(x));$

[4]$\qquad if \epsilon_t > 0.5 : break;$

[5]$\qquad \alpha=\frac{1}{2} ln(\frac{1-\epsilon}{\epsilon});$

[6]$ \begin{aligned} \qquad D_{t+1}(x)&=\frac{D_t(x)}{Z_t} \times \left\{ \begin{array}{} exp(-\alpha_t),\quad if \quad h_t(x) = f(x)&\\ exp(\alpha_t),\quad if \quad h_t(x) \neq f(x) \\ \end{array} \right. \\ &=\frac{D_t(x)exp(-\alpha_tf(x)h_t(x))}{Z_t} \end{aligned} $ 

输出:$H(x)=sign(\sum_{t=1}^{T}\alpha_t h_t(x))$

解释

[1]初始化样本权重为$\frac{1}{m}$

[3]基于t轮迭代时的样本权重,将加权样本喂入t时刻基学习器,计算所有样本预测值和真实值不相等的概率的均值。(更具体的损失定义、计算看《ESL》10.2节)

[4] 如果这个概率的均值大于0.5,说明这轮迭代的基学习器比随机猜测更差,需舍去

[5]否则,用这个错误率去计算正确/错误的优势比,并以此更新该轮基学习器的权重

[6]用计算得到的基学习器权重去更新样本权重:预测命中的样本减少其权重,预测错误的样本增加其权重,从而获得新的样本权重,用于下一轮迭代的数据输入

输出:集成模型的预测结果是每轮迭代训练出来的基学习器投票与之权重的加权平均,再经过符号函数处理,获取类别判定

 

个人观点

Adaboost通过这种方式,记录了容易错分类的样本分布,训练后的基学习器在最大保留容易正确分类的样本分布信息之外,给予了容易错误分类的样本分布最大的权重,这在迭代后期越明显。一般来说迭代后期的基学习器权重也会更高,但是由于基学习器的精度不高,因此其权重不会过分高。通过集成手段,综合各个有一定精度但是不同方向上有偏的模型,从而获得一个既有精度又有很强泛化能力的模型。

 

2.  GBDT

(梯度提升决策树,gradient boost decision tree。以树模型作为基学习器的梯度提升方法)

本节内容转载自 刘建平Pinard的博客 ,我用我的方式来理解这个算法。

image

我的理解:

  • GBDT是用梯度来拟合每一轮的学习器(相比Adaboost是以损失值去更新基学习器权重、样本权重),GBDT的梯度是用每个样本真实值与t-1轮集成的模型预测值之间的损失值,对t-1轮集成的模型进行求偏导,从而作为第t轮中每个样本的梯度$r_{ti}$。
  • 样本的特征向量和样本的梯度构成新的数据集$(x_i,r_{ti})$,我们基于样本的特征向量用决策树去拟合样本的梯度,这样能够在样本的特征空间中将梯度相近的样本划分成块儿(因为决策树的可视化就是将样本空间划分成不同的矩形块)(决策树的叶子结点里的样本梯度值会比较相近,但这个梯度只是帮助我们划分样本使用的,该轮后面的步骤不再使用)。
  • 我们对于每一块叶子结点中的样本去拟合这些样本对应的残差$C_{tj}$。汇总所有叶子结点样本拟合出的$C_{tj}$,就得到了本轮的基学习器,他实际上是一个指示函数($I(x \in R_{tj})$表示样本属于第j个叶子结点则I值为1,否则为0)。
  • 至此我们就得到了集成强学习器的表达式。

 

理解算法原理后,对于回归、分类的具体实现也就很好理解了,主要是损失函数的问题。更多信息参考刘建平Pinard的博客 

 

3.  XGBOOST

xgboost是GBDT的扩展。

1.

目标函数 = 损失项 + 正则化项 + 常数

$Obj(t)=\sum_{i=1}^n L(y_i, f_{t-1}(x_i) + h_t(x_i) )+ \Omega(h_t) + constant$

2.

其中, f_{t-1}(x_i)表示1到t-1轮集成模型的预测输出;h_t(x_i)是第t轮的学习器所学习的残差(t-1轮集成模型的预测和真实值之间的差距);

$\Omega(h_t) = \gamma T +\frac{1}{2} \lambda \sum_{j=1}^T w_j^2$;

  • T表示叶子结点的数量,$\gamma$表示该部分的权重
  • $w_j$表示第j个叶子结点的权重,$\lambda$表示这部分的权重

3.

提取出第t轮的构建的树h_t(x_i)进行单独优化。我们可以用二阶泰勒展开来进行近似,目标函数就变成了:

$Obj(t)\simeq\sum_{i=1}^n [L(y_i, f_{t-1}(x_i) )+ g_i^{'}h_t(x_i)+\frac{1}{2}g_i^{''}h_t^2(x_i)] + \Omega(h_t) $

其中,g_i^{‘}是第i个样本计算的损失值对t-1轮集成模型的一阶梯度;g_i^{‘‘}是第i个样本计算的损失值对t-1轮集成模型的一阶梯度。

4.

然后将上式进一步转换:损失项的展开式转化成关于第t轮学习器的二元函数,并移除与其无关的常数项:

$Obj(t)=\sum_{i=1}^n [ g_i^{'}h_t(x_i)+\frac{1}{2}g_i^{''}h_t^2(x_i)] + \Omega(h_t)$

5.

接下来我们要将上式进行转变:因为第t轮的基学习器是棵决策树,决策树的叶子结点包含了预测相近样本(回归),我们用每个叶子结点的样本来简化计算。步骤是,对于每一个叶子结点的样本子集,计算对属于该叶子点的样本子集对应的一阶梯度进行求和,将该一阶梯度求和与叶子结点的权重相乘。然后对属于该叶子结点的样本对应的二阶梯度与$\lambda$之和在该样本子集上求和,然后乘上该叶子结点的平方权重。理解$h_t(x)$的变换可以参考以上GBDT部分:$h_t(x)=\sum_{j=1}^T w_{tj}I(x\in R_{tj})$(我适当修改了字符描述)

$L=\sum_{j=1}^T[ (\sum_{i \in I_j}g_i^{'})w_j + \frac{1}{2}( \sum_{i \in I_j}g_i^{''} +\lambda )w_j^2 ]+\gamma T$

6.

于是可以通过对每个叶子结点权值$w_j$求偏导来计算极值点对应的权重参数:

$w_j^* = –\frac{\sum_{i \in I_j}g_i^{'}}{\sum_{i \in I_j}g_i^{''} + \lambda} $

7.

将权重带入目标函数得最优损失值

$L^* = –\frac{1}{2} \sum_{j=1}^T \frac{(\sum_{i \in I_j}g_i^{'})^2}{\sum_{i \in I_j}g_i^{''} + \lambda} + \gamma T$

8.

这样每轮迭代的解析解与最优值就推导出来了。我们用上式来衡量在构建第t轮树的时候用什么特征进行分裂,我们寻找的是能使目标函数最小的那个分裂点,计算方法和决策树各种分裂准则的贪心式方法一样:在每一个节点处计算子节点的损失之和再减去父节点的损失,如果值越小表明经过这个特征分裂成的子节点能减少损失,之后就是对比哪一个特征减少的最多,用作这次的分裂节点。

$L_{split} = \frac{1}{2} [ \frac{(\sum_{i \in I_{left}}g_i^{'})^2}{\sum_{i \in I_{left}}g_i^{''} + \lambda} + \frac{(\sum_{i \in I_{right}}g_i^{'})^2}{\sum_{i \in I_{right}}g_i^{''} + \lambda} - \frac{(\sum_{i \in I}g_i^{'})^2}{\sum_{i \in I}g_i^{''} + \lambda}] – \gamma$

 

 

 

 

 

GBDT与XGBOOST的区别

image

机器学习算法中 GBDT 和 XGBOOST 的区别有哪些? - wepon的回答 - 知乎 https://www.zhihu.com/question/41354392/answer/98658997

 

 

image

转载自知乎 机器学习算法中 GBDT 和 XGBOOST 的区别有哪些? - 溪亭日暮的回答 - 知乎 https://www.zhihu.com/question/41354392/answer/939491411

 

 

维基百科的简要回答是:

  • 巧妙设计的决策树惩罚项
  • 叶子结点成比例收缩
  • 牛顿提升法
  • 额外的随机参数
posted @ 2020-04-05 13:38  MO_JOJOJO  阅读(541)  评论(0编辑  收藏  举报