xgboost小结

来源:互联网 发布:看摄像头监控软件 编辑:程序博客网 时间:2024/05/16 07:59

XGBoost源于boosting tree,全称“Extreme Gradient Boosting”。算法原理参考推荐XGBoost的slides和论文,尤其是slides,非常形象易懂,很精彩。本文是对XGBoost核心公式推导与关键点的思考总结。

核心公式推导

  • t轮目标函数
    Obj(t)=i=1nl(yi,ŷ t1i+ft(xi))+Ω(ft)+constant
  • 泰勒展开公式
    f(x+Δx)f(x)+f(x)Δx+12f(x)Δx2
  • 目标函数的泰勒展开
    gi=ŷ (t1)l(yi,ŷ (t1))

    hi=2ŷ (t1)l(yi,ŷ (t1))

Obj(t)i=1n(l(yi,ŷ t1i)+gift(xi)+12hif2t(xi))+Ω(ft)+constant

  • 去掉常数项
    Obj(t)i=1n(gift(xi)+12hif2t(xi))+Ω(ft)
  • 定义树,w表示叶子得分,q函数把样本分配到叶子结点
    ft(x)=wq(x),wRT,q:Rd1,2,,T
  • 正则项,定义树的复杂度。这里惩罚wj的原因?个人理解:正则项的目的是为了防止过拟合,增强模型的泛化能力。boosting tree的预测结果是众多子树预测累加得到的,对wj限制是为了让每颗树都变得‘平庸’,假如某颗树某个叶子得分异常高,它会严重压缩其他树的空间,并对最终预测结果起重要影响,如果碰巧这颗树又不小心过拟合了,进而造成该类预测过拟合。
    Ω(ft)=γT+12λj=1Tw2j
  • 叶子结点的实例集合

    Ij={i|q(i)=j}

  • 化简至叶子单位

    Obj(t)i=1n(gift(xi)+12hif2t(xi))+Ω(ft)=i=1n(giwq(xi)+12hiw2q(xi))+γT+12λj=1Tw2j=j=1T(iIjgi)wj+12(iIjhi+λ)w2j+γT

Gj=iIjgi

Hj=iIjhi

Obj(t)j=1T(Gjwj+12(Hj+λ)w2j)+γT

  • 求导,获得最优解(二阶方程最优解b2ab24a

    wj=Gjλ+Hj

    Obj(t)=12j=1TG2jHj+λ

  • 贪心求解,定义增益公式,获得最佳分裂点,分裂得到左叶子和右叶子

    Gain=12(G2LHL+λ+G2RHR+λ(GL+GR)2HL+HR+λ)γ

总结

  • Shrinkage and Column Subsampling
    Shrinkage降低了单颗树的影响,为future trees留下了更多生长空间,进而提升模型(这个在gbdt里也是有的)
    Column Subsampling,就是特征采样,这个在随机森林里用到。根据用户反馈,特征采样比样本采样更能防止过拟合。
  • 处理缺失值
    个人理解,其实就是不处理,设置了一个default direction,把缺失值丢到了这个方向里,在叶子计算得分时忽略这些缺失值。
  • Column Block for Parallel Learning
    就是以特征值为key,对样本进行了一次索引,并对特征值进行排序,存入内存中,称为‘block’。在树训练过程中,最耗时的是寻找最佳分裂结点,这个过程需要对数据排序,有了‘block’,这个过程的耗时就会大大减少,这是并行化的基础,可以看出xgboost是在特征粒度上实现并行的。
  • 泰勒展开
    传统GBDT在优化时用到一阶导数信息,利用梯度下降获得该轮残差,然后用回归树拟合残差
    xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。推导出了回归树的最优解,XGBoost所使用的回归树与GBDT是不同的。
  • 正则项
    xgboost在代价函数里加入了正则项,用于控制模型的复杂度。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个重要特性
  • 减枝
    注意Gain公式,该值是可能为负的,这时需要在simplicity和predictivness之间进行tradeoff。可进行预减枝和后剪枝。预减枝:遇到负值就停止生长,但是这次分裂(split)可能会有意义将来的splits。后减枝:先生长至最大深度,然后递归地减去所有增益为负的叶子

python实现

关键点是结点分裂增益与叶子结点权重计算,保持boosting和决策树框架,实现代码地址lxmly/machine-learning

原创粉丝点击