集成树之GBDT算法

427 阅读4分钟

目录:

  1. 导言
  2. GBDT算法
    2.1 GBDT回归树
    2.2 GBDT分类树
    2.2.1 二分类
    2.2.2 多分类
  3. Bosting提升树
    3.1 为什么Boosting能够降低偏差

1 导言

常见的集成学习算法一般可以分为两大类:Boosting和Bagging。Boosting类的核心思想在于训练多个弱分类器,最终的结果是这n个弱分类器的和,每一个弱分类器的目标是学习前m个弱分类器的和与样本label的残差,因此Boosting这类算法需要弱分类器足够简单,并且是低方差、高偏差的模型,因为训练的过程是通过降低偏差不断提高精度的
Boosting的典型代表便是GBDT,在GBDT的基础上还延伸出XgBoost、LightGBM、CatBoost等算法。Bagging的代表是随机森林算法,这类算法的目标是学习多个弱分类器,最终的结果是这n个弱分类器的加权平均,其中每个弱分类器的目标都是直接对样本进行学习,他们之间没有强相关性。

2 GBDT算法

GBDT是一种由CART回归树构成的集成学习算法,可用做分类、回归任务。关于决策树的介绍,可见另一篇文章:深入理解决策树

GBDT算法的核心思想:通过多轮迭代学习,每次迭代产生一个弱分类器,每个分类器的目标是对上一轮分类器的残差,也就是弥补前n个分类器的不足。

2.1 GBDT回归树

模型可表示为:


假设模型一共轮,每轮产生一个弱学习器,那么弱学习器的损失函数可表示为

其中为当前模型,GBDT通过经验风险极小化学习下一个弱学习器的参数。
损失函数可选择平方损失函数,我们让损失函数沿残差梯度方向下降。
在训练每个弱学习器时,利用损失函数的负梯度当作该弱学习器的目标去学习,也就是用残差去拟合一棵回归树。负梯度可表示为

利用去拟合一棵CART回归树。
当然,算法工程师的面试是少不了手推滴,下面来手推一下:
算法流程

  1. 初始化弱学习器:
  1. 迭代,对每个样本,计算其负梯度:
  1. 将上式中的作为新的样本label,并将数据作为下棵树的训练数据,得到新的回归树,其对应的叶子结点区域为,其中为回归树的叶子结点个数。
  2. 对于叶子区域,计算最佳拟合值:
  1. 更新强学习器:
2.1.1 shrinkge

如果在提升树算法上使用shrinkge能够在一定程度上防止过拟合,其主要思想为:

每次迭代走一小步逼近label,通过多次迭代的方式,要比每次迈一大步,通过较少次迭代逼近label的方式更容易避免过拟合。简单来说就是它不完全信任每一棵残差树,它认为每棵树只学习到了真理的一部分,所以在累加计算的时候只给它较小的权重,通过多学习出来几棵树来弥补不足。

  1. 没有shrinkge时:
  1. 有shrinkge时:

step一般取,相当于为每棵树设置一个权重,导致各个树的残差是渐变的,而不是陡变的。

2.2 GBDT分类树

2.2.1二元分类

假设该二分类为0,1分类,假设训练样本中label为1的比例为
算法流程

  1. For m=1,2,...,M:
    a.计算,用训练一棵回归树,其中 b.通过一纬最小化损失函数找到最优权重:

c.考虑shrinkge,可得

其中,为学习率。

2.2.2 多分类

对于多分类情况,则要考虑以下softmax模型:

个不同的tree ensemble,每一轮的训练实际上是训练了棵树去拟合softmax的每一个分支的负梯度。
softmax模型的单样本损失函数可表示为:

这里的是样本label在个类别上做one-hot编码之后的取值,只有一维为1,其余为0。

所以这棵树同样是拟合了样本的真实标签与预测概率之差,与二分类树在本质上是一致的。

3 为什么Boosting能够降低偏差

对于Boosting提升树算法来说,偏差可以表示为:

方差可以表示为:

所以如果基学习器如果不是弱模型的话,方差会较大,这将会导致整个模型的方差较大,严重过拟合。
因为基学习器是弱模型,所以精度不高,随着基学习器数量的增大,整个模型的准确度会提高,更接近真实值,但不会无限逼近于1,因为随着基学习器的数量提高,整个模型的方差也会变大,抗过拟合能力降低,在一定程度上会导致准确度下降。