[关闭]
@Macux 2018-03-14T12:06:52.000000Z 字数 28127 阅读 2144

Gradient Boosting Decison Tree Tuning

Algorithm



0、GBDT 的个人理解

0.1 GBDT 宏观把握

  • GBDT 延续着提升树的套路:加法模型 & 前向分步算法求解
  • GBDT 为了提升一般性(在不同的cost function)情形下均可求解,做了如下调整:
    1. 第(t+1)棵树拟合的是第t棵树的“残差”
    2. 为了方便计算在不同 cost function 下的残差,Freidman 大大提出用 cost function 的负梯度作为残差的近似值。
  • 通过以上调整,GBDT 就能在任何 cost function 的情况下,基于加法模型和前向分步算法进行求解。
  • 在不同 cost function 下,残差的计算有多么难,贴个图体会下
    此处输入图片的描述
  • 整体的算法流程
    此处输入图片的描述

0.2 GBDT 一些重要的点


1、Classification And Regression Trees, CART

1.1 Learning From Tianqi Chen's PPT

  • Regression Tree is not just for regression!
  • Regression tree ensemble defines how you make the prediction score, it can be used for Classification, Regression, Ranking....
  • It all depends on how you define the objective function!
  • So far we have learned:
    (1)Using Square loss Will results in common gradient boosted machine. -- For Regression Issue
    (2)Using Logistic loss Will results in LogitBoost. -- For Classification Issue.

1.2 Regression Decision Tree 整体把握

在用 GBDT 做特征工程时,为什么要使用 Regression Decision Tree
(1)、 大牛解释:树的每条路径,是通过最小化 MSE 等方法分割出来的、有区分性的路径。
(2)、个人理解:树的路径代表了 MSE 最小的路径( 对 Label 贡献最强 & 最直接的路径。

1.3 Regression Decision Tree 数学原理

  • 一棵回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。于是回归树的模型,可表示为:

  • 使用平方误差 作为 Loss Function,用 平方误差最小 准则求解每个单元上的最优输出值。

  • 易知,单元 上的 的最优值 , 是 上的所有输入实例 对应的输出 的均值,即


    PS:这只是当 是平方误差时的形式。一般情况是以枚举的方式来确定最佳的分裂点。

  • 采用启发式方法划分输入空间。选择第 个变量 和它的取值 ,作为切分变量(splitting variable)和切分点(splitting point),并定义两个区域:

  • 为寻找最优的切分变量 和最优切分点 ,求解:

  • 为什么上式是减去固定的

    输入空间被划分为 个单元(),每个单元 上只有一个固定的输出值

1.4 Regression Decision Tree 过程总结

  • 采用贪心策略来生成决策树的每个节点:
    (1)、从深度为 0 的树开始,对每个叶节点枚举所有的可用特征。
    (2)、针对每个特征,把属于该节点的训练样本根据该特征值升序排列,通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的最大收益(采用最佳分裂点时的收益)。
    (3)、选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该节点生长出左右两个新的叶节点,并为每个新节点关联对应的样本集。
    (4)、回到第(1)步,递归执行到满足特定条件为止。
  • 在上述算法的第(2)步,样本排序的时间复杂度为
  • 假设公用 个特征,那么生成一颗深度为 的树的时间复杂度为
  • 具体实现可以进一步优化计算复杂度,比如可以缓存每个特征的排序结果等。

2、Machine Learning 关键元素

2.1 模型 & 参数

  • 模型,是由一个参数向量决定的函数
  • 参数,从数据中学习得到的知识
  • 在监督学习过程中,模型就是所要学习的条件概率分布或者决策函数,它决定了在给定特征向量 时,如何预测出目标 。比如:
    (1)线性回归模型:定义 为训练集中的第 个训练样本。

         表示模型的预测值。

    (2)逻辑回归模型:定义 为训练集中的第 个训练样本。

         表示模型预测为正例的概率;

2.2 目标函数

  • 目标函数的形式,通常如下:

                      
    为  Loss Function ,用来衡量模型拟合训练数据的好坏程度;
    为    Regularizer  ,用来衡量学习到的模型的复杂度。

  • 常用的损失函数有:

    (1)平方损失      :
    (2)Logistic Loss:

  • 常用的正则项:

    (1) 范数: 
    (2) 范数: 

  • Logistic Regression 是指使用 Logistic Loss 和 L2 范数或 L1 范数正则项的线性模型。

  • Minimize your error(Loss Function) while Regularizing your parameters(Regularizer).

    (1)、损失函数最小化表明模型能够较好的拟合训练数据,一般也预示着模型能够较好地拟合真实数据(Ground Truth)。尽量使模型走出欠拟合的状态。
    (2)、最小化正则项,意味着鼓励算法学习到较简单的模型,简单模型一般在测试样本上的预测结果比较稳定、方差较小(奥坎姆剃刀原则)。尽量使模型避免过拟合。


3、加法模型

  • 考虑加法模型:


    表示决策树, 表示决策树参数, 表示决策树的个数。

  • 上述加法模型的目标函数定义为:


    其中 表示决策树的复杂度,那么该如何定义树的复杂度呢?比如,可以考虑树的节点数量、树的深度或者叶子节点所对应的分数的 L2 范数等等。

  • 如何来学习加法模型呢? -- 前向分步算法(forward stagewise algorithm)。

    (0)、前向分步算法的整体把握:利用迭代的思想(联想一下 EM algorithm),每次学习一棵树,第(t+1)棵树学习的是第t棵树的残差。学习的过程就是拟合度不断提高的过程,就是 cost function 不断减少的过程,否则还迭代学习个毛线球啊。通过这种方式,达到优化的效果:每一次迭代都能使 cost function 减小。
    (1)、因为学习的是加法模型,如果能够从前往后每一步只学习一个基函数及其系数逐步逼近优化目标函数,这一学习过程称之为 Boosting
    (2)、具体地,我们从一个常量预测开始,每次学习一个基函数及其参数值,过程如下:
       
    (3)、第 步,模型对 的预测为: 为第 轮需要学习的决策树。
    (4)、这个时候目标函数可以写为:
     

  • 联想问题


4、GBDT 算法解析

4.1 算法逻辑 解析

  • 迭代的目标的是上一个模型拟合数据的残差(redisual)
    (1)、每一次迭代都是使用的同样的方法(Loss Function 等其它超参设置),生成新的 CART 决策树(更多的是回归树!)
    (2)、每一次拟合的目标数据集总是在变化:总是拟合上一轮迭代的残差。即只有 是根据 来拟合树, ~ 是拟合前一颗决策树的 残差表

4.2 梯度提升 解析


  • 对一般损失函数而言,每一步优化可能不太容易,利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型中的值:

  • 作为回归问题提升树算法中的残差的近似值,拟合一个回归树。

    • 梯度提升,可以理解为:每一轮新迭代产生的 拟合中产生的残差,给予更多的关注。
    • 通过 Loss Function 的负梯度来拟合,就找到一种通用的拟合损失误差的方法。
    • 近似值,可以理解为:负梯度是残差常规表达式的特例
  • 为什么拟合前一棵树的残差,有助于提高整个模型的拟合度?

    • 先看一张图
      此处输入图片的描述
    • GBDT 使用的是 加法模型 预测值等于所有树值得累加。
      比如上图中,A 的预测值 = (树 1 左节点 值 15) + (树 2 左节点 -1) = 14。
    • 拟合前一棵树的残差,其实是对上一轮迭代预测结果的修正。
      这种“修正”体现在:将上一轮迭代的预测值 Loss Function 的梯度在当前模型的值。易见,这种修正是行之有效的。
    • PS:
      喂给树模型的数据集,要么特征是 numerical 要么是经过 one-hot 处理的字符串特征。

      否则就会报错:
      1. ValueError: could not convert string to float
  • GBDT分为两种
    • 残差版本  
      1. 在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树。
      2. 依次类推,直到残差小于某个接近0的阀值或回归树数目达到某一阀值。其核心思想是每轮通过拟合残差来降低损失函数
      3. 总的来说,第一棵树是正常的,之后所有的树的决策全是由残差来决定,之后的每一棵回归树都在学习前N-1棵树的残差
    • Gradient版本
      1. Gradient版本把GBDT说成一个梯度迭代树,使用梯度下降法求解。
      2. Gradient版本认为每一棵回归树在学习前N-1棵树的梯度下降值。
    • 相同之处
      1. 都是迭代回归树,都是累加每颗树结果作为最终结果;
      2. 每棵树都在学习前N-1棵树尚存的不足,从总体流程和输入输出上两者是没有区别的。
    • 不同之处(敲黑板)
      1. 在于每步迭代时,是否使用Gradient作为求解方法。
      2. 前者不用Gradient而是用残差—-残差是全局最优值,Gradient是局部最优方向 * 步长。
      3. 即前者每一步都在试图让结果变成最好,后者则每步试图让结果更好一点。
      4. 看起来残差版本的GBDT更科学一点(有绝对最优方向),为什么舍近求远去估计一个局部最优方向呢?原因在于灵活性
        • 残差版本的GBDT最大问题是,由于它依赖残差,cost function一般固定为反映残差的均方差,因此很难处理纯回归问题之外的问题。
        • Gradient版本求解方法是梯度下降,只要可求导的cost function都可以使用。

4.3 关于 GBDT 的一些很棒的提问(出处

  • 怎样设置单棵树的停止生长条件?

    答:
    (1). 节点分裂时的最小样本数;
    (2). 最大深度;
    (3). 最多叶子节点数;
    (4). loss 满足约束条件;
    从算法原理上来看,第 (4) 条的约束最重。
    从调参方便度来看,第 (2) 是最方便调参的。
    从参数的重要度看,第 (1) & (3) 的权重 第 (2) 的权重。

  • 如何评估特征的权重大小?

    答:
    (1). 通过计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比例为权重值。
    (2). 借鉴投票机制。用相同的 GBDT 参数对 每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值。

  • 如何人工去干预某列特征的权重?

    答:
    根据业务逻辑进行人工干预。
    很懵逼! GBDT 并没有列抽样的功能设定,XGBoost就有!
    问题来了,XGBoost 如何控制列抽样时,不同特征的权重??

  • 当增加样本数量时,训练时长是线性增加吗?

    答:
    不是。因为生成单棵决策树时, 极小值 与样本数量 不是线性相关。

  • 当增加树的棵树时,训练时长是线性增加吗?

    答:
    不是。因为每棵树的生成的时间复杂度不一样。
    因为每棵树用到的特征数、样本数和深度不一样,所以生成树的时间复杂度会不一样。

  • 当增加一个棵树叶子节点数目时,训练时长是线性增加吗?

    答:
    不是。叶子节点数和每棵树的生成的时间复杂度不成正比。

  • 每个节点上都保存什么信息?

    答:
    此处输入图片的描述

    • 中间节点,保存的是当前分裂后收益(),即上图的
    • 叶子节点,保存的是不分裂的的收益(),即上图的
  • 如何防止过拟合?

    答:

    • 增加样本(data bias or small data的缘故),移除噪声。
    • 减少特征,保留重要的特征(可以用PCA等对特征进行降维)。
    • 对样本进行采样。建树的时候,不是把所有的样本都作为输入,而是选择一个子集。
    • 对特征进行采样。类似样本采样一样, 每次建树的时候,只对部分的特征进行切分。
      但采样有个很严重的问题,就是不可复现,也就是每次的训练结果不一样,不知道是调了参数导致效果好,还是采样导致效果好,还是其他的?(如何实现???
    • 在迭代中,动态调整学习率。(如何实现???
    • 训练模型的同时学习学习率/步长。如何实现???
    • 对回归树进行剪枝
    • 减少回归树的个数, 尤其那些作用不大的回归树(在验证集上进行测试)。
  • GBDT 在训练和预测的时候都用到了步长,这两个步长一样么?都有什么用,如果不一样,为什么?怎么设步长的大小?(太小?太大?)在预测时,设太大对排序结果有什么影响?跟 shrinking里面的步长一样么?

    • 这两个步长一样么?
      答:
      训练跟预测时,两个步长是一样的,也就是预测时的步长为训练时的步长,从训练的过程可以得知(更新当前迭代模型的时候)。
    • 都有什么用,如果不一样,为什么?
      答:
      它的作用就是使得每次更新模型的时候,使得 loss 能够平稳地沿着负梯度的方向下降,不至于发生震荡。类似下图:
      此处输入图片的描述
    • 怎么设步长的大小?
      答:
      有两种方法,一种就是按策略来决定步长,另一种就是在训练模型的同时,学习步长。
      A. 策略:
      a 每个树步长恒定且相等,一般设较小的值;
      b 开始的时候给步长设一个较小值,随着迭代次数动态改变,或者说衰减。
      B. 学习:
      因为在训练第 k 棵树的时候,前 k-1 棵树时已知的,而且求梯度的时候是利用前k-1棵树来获得。所以这个时候,就可以把步长当作一个变量来学习。(如何实现???
    • (太小?太大?)在预测时,对排序结果有什么影响?
      答:
      如果步长过大,在训练的时候容易发生震荡,使得模型学不好,或者完全没有学好,从而导致模型精度不好。
      而步长过小,导致训练时间过长,即迭代次数较大,从而生成较多的树,使得模型变得复杂,容易造成过拟合以及增加计算量。
      不过步长较小的话,使训练比较稳定,总能找到一个稳定的局部最优解。
      个人觉得过大过小的话,模型的预测值都会偏离真实情况(可能比较严重),从而导致模型精度不好。
    • 跟 shrinking 里面的步长一样么?
      答:
      这里的步长跟 shrinking 里面的步长是一致的。

4.4 GBDT 和 Random Forest 的区别

  • 回顾一下 Random Forest 的算法原理

    (1)Random Forest 是 Bagging 的一个扩展变体。
    (2)Random Forest 在以 CART 决策树为基学习器构建 Bagging 集成的基础上,在决策树的训练过程中引入了随机属性选择:“随机地选择训练样本” & “随机地选择特征集合”。
    (3)随机地选择训练样本:从原始训练集 中,以有放回抽样的方式,取样 次,形成一个训练集 ,作为当前 CART 决策树的训练集。
    (4)随机地选择特征集合:对于每一个节点,从特征集合中(假设有 个特征)随机选择 个特征,运用这 个变量来决定最佳的分裂点(最优的切分变量 & 最优切分点)。在当前决策树的生成过程中, 的值是保持不变的。
    (5)这里的参数 控制了随机性的引入程度。当 时,则基决策树的构建与传统决策树相同,若 ,则是随机选择一个属性用于划分。一般情况下,推荐值
    (6)整体理解:Random Forest 是从 中选择 个让每一棵决策树进行学习,就像是把每一棵决策树分别培养成了精通于某一个窄领域的专家。因此在随机森林中有很多个不同领域的专家,对一个新的问题(新的输入数据)可以从不同的角度去看待,最终由各位专家投票得到结果。

  • GBDT 和 Random Forest 的区别

    • 对于决策树的集成学习,有两个重要的策略:Bagging & Boosting
      (1)Bagging 的玩法是:每个分类器都随机从原样本中做有放回的抽样,然后分别在这些抽样后的样本上训练基分类器,最后把这些分类器组合起来,对新问题的输出以投票决定。其代表算法是 Random Forest。
      (2)Boosting 的玩法是:通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost,GBDT。
    • GBDT 和 Random Forest 在本质上是属于不同集成策略的集成学习(ensemble learning)算法
  • 为什么 XGBoost/GBDT 在调参时为什么树的深度很少就能达到很高的精度?

    (1)Boosting 主要关注降低偏差,因此 Boosting 能基于泛化性能相当弱的学习器构建出很强的集成;而 Bagging 主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
    (2)对于 Boosting 来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择 variance 更小的分类器,即更简单的分类器,所以 XGBoost/GBDT 选择了深度很浅的决策树。
    (3)GBDT 生成的 N 棵树是有联系的,后面的树学习的是前面树的残差(前面学习的不好的地方),因此即使树的深度比较少,也可以有很好的效果。而 Random Forest 的每棵树是独立的。

4.5 GBDT 和 XGBoost 的区别

  • 回顾一下 XGBoost 的算法原理

    • 整体目标:

      其中 为目标函数, ,通常是凸函数,用于 刻画预测值 和真实值 的差异,第二项 为模型的正则化项, 用于降低模型的复杂度,避免模型过拟合。
    • 为函数空间上的表达,现将其转换为下面这张 的方式,记 为第 个样本第 轮迭代:

      对该函数在 位置进行二阶泰勒展开,可以加速优化过程。具体过程如下:
      (1)、 处进行二阶展开得到:

      (2)、令
      (3)、记一阶导为 ,二阶导为
      (4)、从而, 的二阶泰勒展开:
                    
      (5)、带入目标函数可得:
                    
    • 由于函数中的常量在函数最小化的过程中不起作用,删除常数项(第一项)可得:
    • 假设决策树模型的复杂度由生成的树的叶子节点数量和叶子节点对应的值向量的 范数决定,即
    • 那么 展开原目标函数改写为:
    • 假设一颗决策树的叶子节点个数为 该决策树是由所有叶子节点对应的值组成的向量 ,以及一个把特征向量映射到叶子节点索引(Index)的函数 组成。因此,决策树可以定义为:
    • 定义集合 为所有被划分到叶子节点的训练样本的集合。
    • 对于固定的树结构 ,对 导得解析解
    • 代入到 (1) 式中,可得:
    • 公式(3)可以作为分裂节点的打分,形式上很像 CART 树纯度打分的计算,区别在于它是从目标函数中推导而得。图中显示目标函数值的计算:
      此处输入图片的描述
    • 通常情况下,我们采用贪心策略来生成决策树的每个节点。
      (1)从深度为 0 的树开始,对每个叶节点枚举所有的可用特征;
      (2)针对每个特征,把属于该节点的训练样本根据该特征值升序排列(样本排序的时间复杂度为:),通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的最大收益(采用最佳分裂点时的收益),具体过程如下:
      I).  枚举每个叶结点上的特征潜在的分裂点。
      II). 对每个潜在的分裂点,计算如果以这个分裂点对叶结点进行分割以后,分割前和分割后的 的变化情况。GBDT遇到负损失,马上停止分裂。xgboost会一直分裂到最大深度,再回过头来剪枝。
      (3)选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该节点生长出左右两个新的叶节点,并为每个新节点关联对应的样本集;
      (4)回到第 1 步,递归执行到满足特定条件为止。
    • 数据集有 个特征,那么生成一颗深度为 的树的时间复杂度为:
    • 如何计算每次分裂的收益?
      假设当前节点记为 ,分裂之后左孩子节点记为 ,右孩子节点记为
      则该分裂获得的收益为:当前节点的目标函数值 左右两个孩子节点的目标函数值之和
      。具体地,根据等式(3)可得:

      其中, 项表示因为增加了树的复杂性(该分裂增加了一个叶子节点)带来的惩罚。等式(4)还可以用来计算输入特征的相对重要程度。
  • GBDT 和 XGBoost 的区别

    • 传统GBDT的每颗树学习的是 在上一轮预测值的梯度,而 XGBoost 是直接学习残差。
    • 传统 GBDT 以 CART 作为基分类器,XGBoost 还支持线性分类器。
    • 传统 GBDT 在优化时只用到一阶导数信息,XGBoost 则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数,优化速度更快。PS:XGBoost 支持自定义 ,只要函数可一阶和二阶求导。
    • XGBoost 在 里加入了正则项,用于控制模型的复杂度,防止过拟合,这也是 XGBoost 优于传统 GBDT 的一个特性。
    • Shrinkage(缩减),相当于学习速率(XGBoost 中的 eta)。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,目的是削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把 eta 设置得小一点,然后迭代次数设置得大一点。(补充:传统 GBDT 的实现也有学习速率)(个人认为,GBDT 的 learning_rate 和 XGBoost 的 eta 并没有什么区别。)
    • 列抽样(column subsampling)。XGBoost 借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是 XGBoost 异于传统 GBDT 的一个特性。(由参数 colsample_bytree 控制)
    • 对缺失值的处理。对于特征的值有缺失的样本,XGBoost 可以自动学习出它的分裂方向。(待补充,弄懂是什么意思???)
    • XGBoost 工具支持并行。XGBoost 的并行不是 tree 粒度的并行 XGBoost 也是一次迭代完才能进行下一次迭代的 第 t 次迭代的代价函数里包含了前面 t-1 次迭代的预测值。XGBoost 的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost 在训练之前,预先对数据进行了排序,然后保存为 block 结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个 block 结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
    • 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以 XGBoost 还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。(待补充,弄懂是什么意思???)
  • The XGBoost Advantage compared to GBDT

    1. Regularization

      (1)、Standard GBM implementation has no regularization like XGBoost, therefore it also helps to reduce overfitting.
      (2)、In fact, XGBoost is also known as ' ' technique.
      (3)、XGBoost 自带正则项来约束模型的复杂度。

    2. Parallel Processing

      (1)、XGBoost implements parallel processing and is blazingly faster as compared to GBM.
      (2)、XGBoost also supports implementation on Hadoop or Spark.
      (3)、XGBoost 支持特征粒度上的并行计算,前有详述。

    3. High Flexibility

      (1)、XGBoost allow users to define XGBoost allow users to define custom optimization objectives and evaluation criteria.(XGBoost 允许玩家自定义优化目标函数和评价标准(指标/函数))
      (2)、This adds a whole new dimension to the model and there is no limit to what we can do.

    4. Handling Missing Values

      (1)、XGBoost has an in-built routine to handle missing values.
      (2)、User is required to supply a different value than other observations and pass that as a parameter. XGBoost tries different things as it encounters a missing value on each node and learns which path to take for missing values in future.
      (3)、对于特征的值有缺失的样本,XGBoost 可以自动学习出它的分裂方向。
      (4)、玩家必须提供一个与现有取值都不相同的特殊值来代替缺失值,默认是 -999。 如果每个节点都有缺失值,XGBoost 会采取特殊的处理,尝试学习哪个路径是更好的选择

    5. Tree Pruning

      (1)、A GBM would stop splitting a node when it encounters a negative loss in the split. Thus it is more of a greedy algorithm.(GBM模型的停止条件是当节点继续分列时不能减少损失,这是一种贪心的策略。)
      (2)、XGBoost on the other hand make splits upto the max_depth specified and then start pruning the tree backwards and remove splits beyond which there is no positive gain.(XGBoost 通过指定参数 max_depth 限制深度,停止分裂的条件是分裂不能带来正增益。)
      (3)、Another advantage is that sometimes a split of negative loss say -2 may be followed by a split of positive loss +10. GBM would stop as it encounters -2. But XGBoost will go deeper and it will see a combined effect of +8 of the split and keep both.
      (4)、GBDT 只要遇到负的分裂收益,则停止分裂,不管是否达到预设的最大深度。而 XGBoost 会先按照预设的 max_depth 进行分裂,and then start pruning the tree backwards and remove splits beyond which there is no positive gain.
      (5)、如果某一个分裂的收益是 ,紧接着的分裂收益是 。GBDT 在遇到 '-2' 的收益时会马上停止分裂。而 XGBoost 会进行权衡:这两个分裂加起来的总收益是

    6. Built-in Cross-Validation

      (1)、XGBoost allows user to run a cross-validation at each iteration of the boosting process and thus it is easy to get the exact optimum number of boosting iterations in a single run.(XGBoost 允许使用者在每次迭代都进行一次交叉验证。因此,很容易在一次实验中直接得到最佳的迭代次数)
      (2)、This is unlike GBM where we have to run a grid-search and only a limited values can be tested.(而 GBM 只能进行参数网格搜索来测试有限的取值,进而确定最佳迭代次数)

    7. Continue on Existing Model

      (1)、User can start training an XGBoost model from its last iteration of previous run. This can be of significant advantage in certain specific applications.
      (2)、GBM implementation of sklearn also has this feature by using 'warm_start '.


5、Parameter Tuning Of GBDT & XGBoost

5.1 GBDT's Parameters Tuning

5.2 XGBoost's Parameters Tuning


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注