0%

GBDT, Xgboost 和 LightGBM

1. Xgboost

  • 目标函数的意义 $Obj(\theta) = L(\theta) + G(\theta)$

    • $L(\theta)$ 衡量了模型对于训练数据的拟合能力: 均方根 (回归), 逻辑损失 (分类)。

    • $G(\theta)$ 测量了模型的复杂度:L1, L2 正则化。

  • 优化目标函数的意义:

      1. 优化 training loss 鼓励模型去学习一个有用的模型
      1. 优化 regularization loss 鼓励去学习一个简单的模型。
  • 对应树结构:$L(\theta)$ 就是各个树的结构,而 $G(\theta)$ 就是树的复杂性 (例如树的节点个数,树的深度等)

  • 目标函数: $\sum_{i=1}^{n}l(y_i, \hat{y_i}) + \sum_{k}G(f_k), f_k \in \ F$

    • 面临的问题: 我们不能使用 SGD 去寻找 $f_k$, 因为他们都是树结构,而不是数值向量。

    • 解决方法: 加法训练(Addtive Training or called Boosting)
      $$ \hat{y}_i^{(0)} = 0 $$
      $$ \hat{y}_i^{(1)} = f_1(x_i) = \hat{y}_i^{(0)} + f_1(x_i) $$
      $$ \hat{y}_i^{(2)} = f_1(x_i) + f_2(x_i) = \hat{y}_i^{(1)}+f_2(x_i) $$
      $$ \hat{y}i^{(t)} = \sum{k=1}^tf_k(x_i) = \hat{y}_i^{(t-1)} + f_t(x_i) $$

    • 如何决定在第 t 轮加入的 $f_t$
      第 t 轮的预测
      $$ \hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i)

    $$

GBDT 与 XGBoost 的对比

  • GBDT 是机器学习算法,XGBoost 是该算法的工程实现

  • 在使用 CART 作为及分类器时,XGBoost 显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,提高泛化能力

  • GBDT 在模型训练的时候仅使用了代价函数的一阶导数信息,XGBoost 对代价函数进行了二阶泰勒展开,使用了一阶和二阶倒数

  • GBDT 采用 CART 作为基分类器,XGBoost 支持多种类型的基分类器,比如线性分类器。

  • GBDT 在每轮迭代时是使用了全部的数据, XGBoost 则采用了随机森林相似的策略,最数据进行采样,支持列采样,降低过拟合,减少计算。

  • GBDT 没有设计对缺失值进行处理,XGBoost 可以自动学习出它的分类方法, XGBoost 对缺失值预先学习一个默认的分裂方向

  • Shrinkage (减弱),相当于学习速率(Xgboost 中的 eta), xgboost 每次迭代后,将叶子节点权重乘以该系数,减弱每棵树的影响,让后面有更大的学习空间。

坚持原创技术分享,您的支持将鼓励我继续创作!