• 对【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.在适用泰勒二阶梯度展开来计算权重

  • 相关阅读:
    P2464 [SDOI2008]郁闷的小J
    P2157 [SDOI2009]学校食堂
    P3201 [HNOI2009]梦幻布丁
    P2051 [AHOI2009]中国象棋
    UVA11987 Almost Union-Find
    P2577 [ZJOI2005]午餐
    洛谷 3768简单的数学题(莫比乌斯反演+杜教筛)
    LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)
    BZOJ 4555:[TJOI2016&HEOI2016]求和(第二类斯特林数+NTT)
    BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/andre-ma/p/12987654.html
Copyright © 2020-2023  润新知