GDBT系列算法梳理

一、BDT

提升数,Boosting Decision Tree,以CART决策树为基学习器的集成学习方法。

1.1 BDT的表示

GDBT系列算法梳理_第1张图片

1.2 loss function

GDBT系列算法梳理_第2张图片
指数损失函数:
在这里插入图片描述
平方损失函数:
在这里插入图片描述

1.3 算法步骤

GDBT系列算法梳理_第3张图片

二、GBDT

2.1 GBDT的表示

GBDT全称为:Gradient Boosting Decision Tree,即梯度提升决策树,理解为梯度提升+决策树。
核心思想:利用损失函数的负梯度(BDT是残差)来拟合基学习器
GDBT系列算法梳理_第4张图片
原理:
GDBT系列算法梳理_第5张图片

2.2 GBDT的梯度提升流程

GDBT系列算法梳理_第6张图片

三、XGBoost的优化

功能方面:

  1. GDBT的基函数是回归树,而XGBoost还支持线性分类器,对于分类问题,此时XGBoost就相当于logistic回归,回归就是线性回归。
  2. 传统的GDBT使用的一阶导数,而XGBoost是用的一阶导数和二阶导数,更快的拟合;

避免过拟合策略

  1. XGBoost在目标函数里面加个了正则化项,这可以一定程度控制生成树的复杂度,从偏差方差均衡的角度,这有助于降低方差,避免过拟合。
  2. shrinkage的方式来缩减每棵树的影响。

加速计算方面

  1. 引入了分位数,GDBT是对特征的每个值去计算增益值,而XGBoost根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。

  2. 虽然生成每棵树一定要串行,但是选择特征是并行的,这也是非常耗时的一个阶段。

  3. 借鉴了随机森林的,行采样,列采用的特性,既省时间又可防止过拟合。

  4. 在工程方面,支持多线程,支持GPU等特性。

四、LightGBM的优化

4.1 引进直方图进行优化

XGBoost是采用presort的方式来选取最佳分割点,而LGBM是采用直方图,对于连续的特征统计为k类,然后以直方图为单位,选取最佳分割点;

  1. 用直方图算法来对特征进行计算,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。
    GDBT系列算法梳理_第7张图片
  2. 先计算直方图小的叶子节点,然后利用直方图做差来获得直方图大的叶子节点,这样就可以用非常微小的代价得到它兄弟叶子的直方图。
    GDBT系列算法梳理_第8张图片

4.2 带深度限制的 Leaf-wise 算法

XGBoost在预测的时候采用的是level-wise广度优先的策略,而LGBM采用的是leaf-wise的策略,区别对待同一层的叶子结点,对于增益较低结点不进行分裂,节约这部分没必要的计算开销。

  • 按层生长的决策树
    GDBT系列算法梳理_第9张图片
  • 按结点生长的决策树
    GDBT系列算法梳理_第10张图片
    说明:Level-wise相比
  1. Leaf-wise的优点是:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度;
  2. Leaf-wise的缺点是:可能会长出比较深的决策树,产生过拟合。因此LightGBM会在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

4.3 单边梯度采样算法(GOSS)

GOSS算法从减少样本的角度出发,排除大部分小梯度的样本,仅用剩下的样本计算信息增益,它是一种在减少数据量和保证精度上平衡的算法。

4.4 互斥特征捆绑算法

互斥特征捆绑算法(Exclusive Feature Bundling, EFB)指出如果将一些特征进行融合绑定,则可以降低特征数量。这样在构建直方图时的时间复杂度从O(#data * #feature)变为O(#data * #bundle),这里#bundle指特征融合绑定后特征包的个数,且#bundle远小于#feature

注意: 要捆绑互斥的特征,也就是onehot编码不同时为0的特征,这样才不会丢失信息,但现实中往往很难,因此用冲突比例来衡量,都为0则冲突比例越大,当这个值较小时,我们可以选择这个两个特征捆绑,而不影响最后的精度。

4.5 工程上的各种并行

包括特征并行、数据并行和投票并行。

参考:
https://mp.weixin.qq.com/s/clNVCXxNkAUsQC-oHL2b2g
https://zhuanlan.zhihu.com/p/99069186

你可能感兴趣的:(机器学习,算法,决策树,GDBT,XGBoost,LightGBM)