XGB算法梳理

作者: 凌霄文强 | 来源:发表于2019-04-09 10:48 被阅读0次

    算法原理

    XGB(extreme gradient boosting)是GBDT的一种工业实现,也是通过不断增加新树,拟合伪残差去降低损失函数。其拟合过程是使用的损失函数的二阶泰勒展开,这是和GBDT的一个区别。

    损失函数

    L(\theta)=\sum_{i}\left(y_{i}-\hat{y}_{i}\right)^{2}

    分裂结点算法

    • 精确的贪心法
      枚举,时间开销大
    • 近似的贪心

    正则化

    \Omega(f)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}
    叶子节点数和叶节点权重

    对缺失值处理

    XGB中允许缺失值存在。在找分裂点时,不遍历迭代缺失样本,减少计算,分配样本时,缺失的样本同时分到左右子树,计算哪边的增益大就自动分到哪边去。但在测试时如果遇到缺失值,会分到右子树。

    优缺点

    优点(快速高效可容错)

    • 支持线性分类器(相当于引入L1 L2正则惩罚项的LR和线性回归,目标函数公式=误差平方和+正则项,似LR)
    • 代价函数用了二阶Talor展开,引入一阶导和二阶导,提高模型拟和的速度(损失函数:一个样本的误差;代价函数:整个训练集上所有样本误差的平均;目标函数:代价函数 + 正则化项)
    • 可以给缺失值自动划分方向;
    • 同RF,支持样本(行)随机抽取,也支持特征(列)随机抽取,降低运算,防过拟合;
    • 代价函数引入正则化项,控制模型(树)复杂度,
      正则化项包含全部叶子节点个数,每个叶子节点得分的L2模的平方和(代表叶子节点权重的影响)
      从贝叶斯(先验累积思想)方差角度考虑,正则降低了模型的方差,防过拟和;
    • 每次迭代后为叶子分配结合学习速率,减低每棵树权重,减少每棵树影响,灵活调整后面的学习空间;
    • 支持并行,不是树并行,是把特征值先预排序,存起来,可以重复并行使用计算分裂点;
    • 分裂依据分开后与未分前的差值增益,不用每个节点排序算增益,减少计算量,可以并行计算;
    • 可以引入阈值限制树分裂,控制树的规模。

    缺点:

    • 容易过拟合;
    • 调参困难。

    应用场景

    分类,回归

    sklearn参数

    • learning_rate:学习率
    • n_estimators:多少棵树
    • max_depth=5:树最大深度
    • min_child_weight:最小权重系数
    • gamma=0:惩罚系数(力度)
    • lambda:正则化
    • alpha:正则化
    • subsample:随机选样本的比例
    • colsample_bytree:随机选特征
    • objective = 'binary:logistic':损失函数loss function,求这个函数的一阶二阶导
    • scale_pos_weight:要不要指定一个均衡的树
    • seed=7 #随机种子,每次复现都是一样的

    相关文章

      网友评论

        本文标题:XGB算法梳理

        本文链接:https://www.haomeiwen.com/subject/agbviqtx.html