GBDT家族总结(1)

  1. GBDT (Gradient Boosting Decision Tree)

    GBDT 一个直观的idea就是使用树的形式来实现一个梯度逼近的过程,使得我们的函数损失最小。它是一个集成的模型,是n个CART线性相加的结果

    梯度提升算法:

# GBDT家族总结 (1)

步骤二中,计算残差,简化形式就是
rim=yifm1(xi)m=1,2...M(M) r_{im}=y_i-f_{m-1}(x_i) \quad m=1,2...M \quad(M颗树)
举个形象的例子,GBDT的学习过程就是:

A 的年龄为18岁,I树预测结果是12岁,则残差是6,在II树中A的年龄设成5去学习,若II树种6成了一个叶子节点吗,则A的真实年龄就是两个数结果累加,若II树结论是5岁,则在III树中将A 设成1岁,继续学习。

详细推导可以看: https://zhuanlan.zhihu.com/p/29765582

  1. XGBOOST

    XGBOOST更加有效的应用的数值优化,损失函数引入了一阶导数和二阶导数,跳过推导,推导可见:https://zhuanlan.zhihu.com/p/92837676

    XGBOOST调参:

    参数类别有:

    • 通用参数:默认值就好
    • 学习目标参数: 与任务有关,定下后通常无需再调
    • boost参数:弱学习器相关参数,需要仔细调整

    常用的几个参数:

    通用参数

    booster:弱学习器类型,可选tree或者gblinear,默认数模型

    slient:是否静默,1:不输出任何信息,0:输出中间信息

    n_thread:线程数,-1 使用系统所有CPU核

    学习目标参数

    objective:损失函数 ,分类/回归/排序

    eval_metric:评估函数

    seed:随机数种子

    booster参数

    colsample_bytree ,colsample_bylevel:两种下采样的方式,默认是1,采用所有样本,随机下采样比全部会还一点,建议0.3-0.8

    max_depth: 树的最大深度。

    • max_depth越大,模型越复杂,会学到更局部的样本
    • 需使用交叉验证进行调优,默认是6,建议3-10

    min_child_weight: 孩子节点样本权重和的最小值,如果一个叶子节点的样本权重和小于min_child_weight则分裂过程结束

    tricks:

    1. n_estimaterslearning_rate: 固定n_estimaters为100,然后调整learning_rate

    2. 树的max_depth:从6开始,逐步增大

    3. min_child_weight:
      1rare_events \frac{1}{\sqrt{rare\_events}}

    4. 列采样: 在0.3到0.5之间进行网格搜索

    5. 行采样:1

    6. gamma固定为0

(未完待续…)

相关文章:

  • 2021-07-29
  • 2022-12-23
  • 2021-09-22
  • 2021-08-17
  • 2021-04-05
  • 2021-10-11
  • 2021-08-15
猜你喜欢
  • 2021-12-30
  • 2022-12-23
  • 2022-01-02
  • 2021-09-26
  • 2021-11-12
  • 2021-11-18
  • 2021-07-28
相关资源
相似解决方案