集成学习-提升(boosting)方法

2021-06-07  本文已影响0人  DeepNLPLearner

1 提升方法

1.1 概率近似正确(PAC)学习框架

1.2 提升方法的问题

2 AdaBoost 算法(最具代表性的提升算法)

2.1 主要思想

2.2 步骤

引用:https://zhuanlan.zhihu.com/p/59121403

3 提升树

3.1 定义

3.2 提升树算法

采用前向分布算法的提升树,第m步的模型为:


其中T(x;\theta_m)为当前待学习的回归树,其解为:

当损失函数为平方误差损失时,

当前模型学习的目标就是你拟合残差r=y-f_{m-1}

3.2 梯度提升决策树(GBDT)

提升树利用加法模型与前向分步算法实现优化过程,当损失函数是平方损失时,每一步优化是简单的,但对一般损失函数而言,问题就复杂了,因此,Freidman提出了梯度提升算法(Gradient Boosting),这是最速下降的近似方法,其关键是利用损失函数的负梯度在当前模型的值作为上述残差的近似值,拟合一个回归树。


GBDT

3.3 XGboost (Extreme Gradient Boosting)

3.3.1 改进点

XGboost本质上是GBDT思想的一种实现方式,它主要在以下几个方面做了改变:

3.3.2 近似算法

不遍历训练样本所有特征值去找最佳分割点,而是人为设计一些分割点,然后将训练样本划分到不同的分割区间中,步骤如下:

image.png

对于每一个特征,进行固定的分割点选取,其中对于第k个特征,分割点的首尾分别是该特征属性值的最小最大值。这样每个特征下每个分割点都能计算出损失差,选取最小损失差对应的特征、分割点即可。这里分割点的用法也用两种,一种是global,一种是local。global意味着只进行一次初始的分割选取,后面每个节点的都是在初始分割点上选取最优点;local则是每分裂一次,重新调整分割点的选取,分割区间会越来越小,因为分裂后的每个节点的样本数在减少。用local方法,则分割点不用设计太多,分割区间也不用太细;用global方法则需要较多的分割点,同样分割区间也要更细。在数据集上的验证结果表明,用远少于训练样本数的分割点,这种近似算法的效果与前面提到的遍历所有样本的效果差不多,如下图:


eps表示分割区间,区间越小,分割点越多

3.3.3 缺失值处理

每次分裂时,对缺失值样本分别放在左右两个叶节点,计算损失下降值,哪边增益大就放哪边。


3.3.4 工程优化

4 LightGBM

LightGBM和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。

LightGBM在很多方面会比XGBoost表现的更为优秀。它有以下优势:

参考资料

XGBoost的优化方法: https://zhuanlan.zhihu.com/p/125594314
XGBoost入门系列第一讲: https://zhuanlan.zhihu.com/p/27816315
《统计学习方法》 李航

上一篇下一篇

猜你喜欢

热点阅读