GBDT、Xgb、Lgb对比以及常见面试题

GBDT、Xgb、Lgb对比以及常见面试题

  • GBDT
    • 特点
    • 残差
    • 正则化
  • Xgb
    • 特点
    • 正则化
  • Lgb
  • 常见面试题
    • RF与GBDT之间的区别
    • GBDT训练时长
    • GBDT并行部分
    • Xgb与GBDT的区别
    • Lgb与Xgb的区别

之前写了一点RF的东西,作为决策树+bagging的模型自然经常会被拉出来和决策树+boosting的模型进行对比;而GBDT、Xgb、Lgb一系列的产物正式这种思路加上一些改进的工程产物,所以就一起放出来对比说明了。

GBDT

特点

GBDT 是梯度提升树(Gradient Boosting Decison Tree)的简称,GBDT 通过多轮迭代,每轮迭代产生一个弱分类器(二叉CART树,节点分裂标准是使得损失函数平方误差最小),每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。

并且GBDT的对样本的预测值是对所有树的加权平均,而每棵树的预测结果是样本对应的叶子节点的均值。(GBDT用于分类任务时也是按照回归的思想做的,像LR那样去预测对数几率的数值)

残差

GBDT迭代拟合的残差是当前模型损失函数的负梯度了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。(类似梯度下降那样慢慢靠近)

正则化

正则化的话可以用步长(相当于各个树结果相加时的权重,和最大迭代次数配合使用),子采样比例,剪枝等操作。

Xgb

特点

Xgb是GBDT思想的一个工程实现,传统GBDT以CART作为基分类器,Xgb还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的LR(分类问题)或者线性回归(回归问题)。传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数(联想梯度下降法和牛顿法求解最优化问题)有利于梯度下降的更快更准。

正则化

Xgb在代价函数里加入了树正则项,用于控制模型的复杂度,降低了过拟合的可能性。这个树正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。

Lgb

Lgb也是GBDT思想的一种工程实现,是微软推出调整Xgb的,总的来说因为一些并行化策略以及优化让它比Xgb更快且更省空间,泛化误差也降低了。

常见面试题

上面只是大体的介绍了一下3种模型,具体他们的改进方法放到下面问题中,因为3者的对比改进是经常遇到的面试题。

RF与GBDT之间的区别

  • 都是由多棵树组成且最终的结果都是由多棵树一起决定
  • 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成
  • 组成随机森林的树可以并行生成(bagging),而GBDT是串行生成(boosting)
  • GBDT的树深度往往大于RF树的深度

GBDT训练时长

样本数量,树数量,树的深度都不是线性相关,只能说相关。

GBDT并行部分

计算每个样本的负梯度,分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时。

Xgb与GBDT的区别

  • 损失函数的二阶泰勒展开(牛顿法),降的更快更准。
  • 树的正则化概念的引入,对叶节点数量和叶子节点输出进行了约束,方式是将二者形成的约束项加入损失函数中。在这里插入图片描述
  • 可以用LR当基学习器,可以输入缺失值(GBDT的sklearn实现不能接受缺失值)
  • 特征采样,过拟合风险降低
  • 引入了许多近似直方图之类的优化算法来进一步提高树的训练速度与抗过拟合的能力
    (对每个特征进行分块(block)并排序(pre_sort),将排序后的结构保存在内存中,这样后续分裂的时候就不需要重复对特征进行排序然后计算最佳分裂点了,并且能够进行并行化计算.这个结构加速了split finding的过程,只需要在建树前排序一次,后面节点分裂时直接根据索引得到梯度信息。
    工程上实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。)

Lgb与Xgb的区别

  • 选取特征最佳分割点时,Lgb使用的是 histogram 算法,这种只需要将数据分割成不同的段即可,不需要进行预先的排序。占用的内存更低,数据分割的复杂度更低。

  • Xgb 采用的是 Level-wise 的树生长策略,Lgb 采用的是 leaf-wise 的生长策略,以最大信息增益为导向。后者进度更高,容易过拟合,所以要控制最大深度。

  • Lgb 优化了对类别特征的支持,可以直接输入类别特征,不需要额外的 0/1 展开,并在决策树算法上增加了类别特征的决策规则。

  • Lgb做了很多的并行优化策略。
    1.特征并行,每个worker留有一份完整的数据集,但是每个worker仅在特征子集上进行最佳切分点的寻找;worker之间需要相互通信,通过比对损失来确定最佳切分点;然后将这个最佳切分点的位置进行全局广播,每个worker进行切分即可。
    2.数据并行,当数据量很大,特征相对较少时,可采用数据并行策略。对数据水平切分,每个worker上的数据先建立起局部的直方图,然后合并成全局的直方图,采用直方图相减的方式,先计算样本量少的节点的样本索引,然后直接相减得到另一子节点的样本索引,这个直方图算法使得worker间的通信成本降低一倍,因为只用通信比此样本量少的节点。
    3.投票并行当数据量和维度都很大时,选用投票并行,该方法是数据并行的一个改进。数据并行中的合并直方图的代价相对较大,尤其是当特征维度很大时。
    大致思想是:每个worker首先会找到本地的一些优秀的特征,然后进行全局投票,根据投票结果,选择top的特征进行直方图的合并,再寻求全局的最优分割点

部分问题来自知乎专栏.

你可能感兴趣的:(ML,机器学习)