机器学习(八)——GBDT 与 XGBOOST

RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。

根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:即个体学习器之间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表就是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)。

1、GBDT和XGBoost区别

XGBOOST相比于GBDT有何不同?XGBOOST为什么快?XGBOOST如何支持并行?

①传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);

②传统的GBDT在残差梯度方向拟合只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导;

③XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和

④shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,防止过拟合;

⑤列抽样。XGBoost借鉴了随机森林的做法,支持列抽样(特征抽样),不仅防止过 拟合,还能减少计算;

⑥对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向;

⑦ XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行 的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

2、xgboost怎么给特征打分?如何解决缺失值问题?

(1)在训练的过程中,通过gini指数选择分离点的特征,一个特征被选中的次数越多,评分越高。

(2)xgboost对缺失值有默认的处理方法,对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向,可以大大的提升算法的效率。

3、XGBoost的性能在GBDT上的进一步提升

XGBoost的性能在GBDT上又有一步提升,而其性能也能通过各种比赛管窥一二。坊间对XGBoost最大的认知在于其能够自动地运用CPU的多线程进行并行计算,同时在算法精度上也进行了精度的提高。

由于GBDT在合理的参数设置下,往往要生成一定数量的树才能达到令人满意的准确率,在数据集较复杂时,模型可能需要几千次迭代运算。但是XGBoost利用并行的CPU更好的解决了这个问题。

其实XGBoost和GBDT的差别也较大,这一点也同样体现在其性能表现上,详见XGBoost与GBDT的区别。

通过树结构q和树叶权重w来描述一棵回归树。将树叶权重带入目标函数后,发现一旦树结构q确定了,目标函数能够唯一确定。所以模型构建问题最后转化为:找到一个合理的回归树结构q,使得它具有最小的目标函数。对于这个问题,XGBoost提供了贪心算法来枚举所有可能的树结构并找到最优的那个。

4、xgboost使用经验总结- 1

  •   多类别分类时,类别需要从0开始编码

  •   Watchlist不会影响模型训练。

  •   类别特征必须编码,因为xgboost把特征默认都当成数值型的

  •   调参:Notes on Parameter Tuning 以及 Complete Guide to Parameter Tuning in XGBoost (with codes in Python)

  •   训练的时候,为了结果可复现,记得设置随机数种子。

  •   XGBoost的特征重要性是如何得到的?某个特征的重要性(feature score),等于它被选中为树节点分裂特征的次数的和,比如特征A在第一次迭代中(即第一棵树)被选中了1次去分裂树节点,在第二次迭代被选中2次…..那么最终特征A的feature score就是 1+2+….

本文转自:博客园 - 深度机器学习,转载此文目的在于传递更多信息,版权归原作者所有。