对【XGBoost】的理解

【零、背景简介】

XGBoost 于2016年由陈天奇提出,一种用于可扩展的分布式的大规模机器学习算法,在Kaggle多项比赛中高频获奖。

核心思想是基于残差的树Boosting,它在建树计算split点、泰勒2阶展开计算损失、正则处理、特殊值处理(如空值处理)、列采样、系统并行化等方面做足了功夫,自提出后威震学术界和工业界!至今依然广泛运用。

本文记录并总结学习该文时的个人理解,  若有理解错误 ,还望大佬指正。

 

论文简述的4处特点:

1、一种高度可伸缩的基于端到端的提升树算法。

2、一种分布式加权直方图调整框架,以进行高效预计算。

3、一种自适应稀疏处理并行树学习算法。

4、提出了一个有效的缓存块结构,以支持外存计算。

 

【一、基本概念 及 目标函数】

1.1 基本概念

设 D = (Xi, yi) 为数据集,样本数为n , 特征数为m,  F表示多个分类回归树CART,T表示一棵树的叶节点个数,q表示树结构(当树建立好后,q(Xi)表示对Xi样本判定的叶节点,w表示叶节点权重,Ij = {i | q(Xi) = j} 表示第i个样本被当前树划分到第j个叶节点上。

式(1)表示对样本X的计算过程,有基于Boosting的串行集成学习思想。模型对Xi  的预测值yi_hat是经多棵树预测后对每棵树预测结果累加后得到的(分类情况则使用分类类别最多的类别,或对yi_hat进行Logistic或softmax函数计算后得到的样本类别。

 

 1.2 目标函数

 

 

目标函数组成由损失函数 + 正则, 正则项由叶节点权重w的二范数构成,

 

 

 

 

 损失函数巧用泰勒二阶展开式,将上一时间yt-1_hat作为变量x, 当前时间 ft(Xi) 作为增量 Delta_x

 

 

 

gi、hi 分别是对目标函数对yt-1_hat的一阶和二阶导数,最终目标函数如式3:

 

 

 

建模时,对X中每一个样本进行计算,并对相同叶节点下不同计算的样本进行权重w合并(如式4)

 

 

计算目标函数的最小值时对应的wj* 和  L(t)(q)  ,可直接计算 dL|dwj 导数并另其等于0, 求出wj* 并带入求出  L(t)(q) 

 

 

 

 

 

注意在Boosting计算每棵树时,可以使用收缩率Shrinkage, 

 

 

 【二、节点split策略】

2种方法:精确贪心算法 和 split近似算法。

定义增益gain :表示对已选择属性k对第j处属性进行split后增益变化值量化,该值越大表示越此处越适合split 

在筛选属性列时,可以适用所有列m, 也可以进行列采样(column subsampling) , 列采样可以全局随机选取若干列,在计算split时依次使用, 也可以在每创建一层的split时,再进行列采样, 

使用列采样可以降低过拟合(因为增加了随机因素),同时在建树时可以充分并行化

2.1精确贪心算法

当数据量不是非常大且算力够用时,该算法能保质建树时,所选属性的最优属性值的split点

 

 

 2.2 近似算法

在分布式或算力缺乏时,可以适用近似算法来寻找该属性列的最佳split点,通过对属性的分桶,计算不同桶间的gain,并得到最优解

 【三、算法其他处理】

3.1稀疏数据的处理

实际问题中,会出现稀疏数据的情况。如:1)缺失值;2)数据中本身出现很多0;3)使用one-hot编码增加稀疏性,所以对稀疏数据的处理很重要。

原文中,增加对每个节点默认的方向,当数据中存在缺失值的时候,就会统一把缺失数据样本分到左子树或统一分到右子树,

 

 

 

 【四、系统优化处理】

4.1 Column Block 

在大数据量情况下,耗时的操作是对数据排序(尤其在计算split时反复排序),同时从磁盘读取数据非常耗时,因此原文将数据已block块的方式存储在内存中。类似于列存储,且在内存中对各列列值进行一次排序,并保留排序结果,使在训练模型时可以反复利用。

4.2  Block size优化

优化Block size 为提高Cache命中率:(1.当Block size过大时,预读取到cache可能放不下,要多次读取磁盘,较费时; 2. 当Block size过小时,预读取到cache导致整体命中率偏低,没有充分发挥cache高速缓存功能,提速不明显   )

4.3  对Block并行放入多个磁盘中

对Block进行压缩并放入多个磁盘中,使得预读取数据时,在磁盘处可以并行减少读取数据时间。  (计算机中各部件速度不等式 :   CPU  > cache > 内存 > 磁盘  )

 

【五、总结】

1. xgboost 高准确性,可缩放(支持分布式) ,高度并行化, 底层优化做的很扎实,在各种比赛和实际工业界中很受用。

2.对于空值和稀疏数据的考虑,使得在实际应用中适用场景极多。

3.多种操作Shrinkage  列采样  正则 有效降低过拟合

4.在精确性和计算效率上做了多种实现,适用多种场景,使用者可以自己根据实际情况trade off.

5.在适用泰勒二阶梯度展开来计算权重

 

posted @ 2020-06-01 00:16  Joshua王子  阅读(342)  评论(0编辑  收藏  举报