XGB算法梳理

算法原理

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

损失函数

分裂结点算法

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

正则化


叶子节点数和叶节点权重

对缺失值处理

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算法梳理)