GBDT几问

Posted Jarlene

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GBDT几问相关的知识,希望对你有一定的参考价值。

GBDT几问

本篇文章主要介绍GBDT基本原理以及一些细节性的东西,这些东西更多在面试使用,或者对于二次创新使用,主要内容有以下几个方面:

如果读者对以上各个方面都很熟悉,那么恭喜你已经成功掌握GBDT了。


Boosting算法Bagging算法介绍

在正式开讲GBDT之前,我先熟悉一下江湖中传说的集成学习的两个派系,分别是Boosting和Bagging。所谓的集成学习主要是通过学习多个弱学习器结合组合策略组成强学习以达到“多个臭皮匠顶个诸葛亮”的作用。集成学习中最典型的两个代表就是Boosting家族和Bagging家族。Boosting家族最典型的代码属于AdaBoosting以及提升树(典型的GBDT)。Bagging家族最典型的代表是Random Forest(随机森林,以下简称RF)。
以下两张图片可以清楚描述Boosting和Bagging的差异:Boosting中的弱学习器之间存在依赖关系,这也是GBDT为什么不能并行的原因。



Bagging算法

Boosting算法

GBDT基本原理

GBDT基本原理是 通过多轮迭代,每轮迭代产生一个弱分类器(利用cart回归树构建),每个分类器在上一轮分类器的残差基础上进行训练。

数学语言描述:利用前一轮迭代的学习器 ft1(x) f t − 1 ( x ) 以及损失 L(y,ft1(x)) L ( y , f t − 1 ( x ) ) 构建一棵cart回归树弱学习器模型 ht(x) h t ( x ) 使得本次迭代的损失 L(y,ft(x))=L(y,ft1(x)+ht(x)) L ( y , f t ( x ) ) = L ( y , f t − 1 ( x ) + h t ( x ) ) 最小。

GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

正如前面提到的GBDT每轮迭代都采用的是损失拟合的方法,但是如何拟合呢?针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示:

rti=[L(yi,f(xi)))f(xi)]f(x)=ft1(x) r t i = − [ ∂ L ( y i , f ( x i ) ) ) ∂ f ( x i ) ] f ( x ) = f t − 1 ( x ) 利用 (xi,rti) ( x i , r t i ) 构建一颗cart回归树(具体如何构建请参考 决策树),这样就得到了第t颗回归树以及其对应的叶节点区域 Rtj,j=1,2,...,J R t j , j = 1 , 2 , . . . , J 其中J为叶子节点的个数。然后针对每个叶子节点里面的样本,求出使损失函数最小,拟合叶子节点最好的的值 ctj c t j
ctj=argmincxiRtjL(yi,ft1(xi)+c) c t j = a r g m i n ⏟ c ∑ x i ∈ R t j L ( y i , f t − 1 ( x i ) + c ) 这样我们就得到本轮的cart回归树拟合函数: ht(x)=j=1JctjI(xRtj) h t ( x ) = ∑ j = 1 J c t j I ( x ∈ R t j ) 最终得到本轮的学习器: ft(x)=ft1(x)+ht(x) f t ( x ) = f t − 1 ( x ) + h t ( x ) 这就是通过损失函数的负梯度来拟合误差的办法。

对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。
主要优点:

  1. 可以灵活处理各种类型的数据,包括连续值和离散值。
  2. 在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。
  3. 使用一些健壮的损失函数,对异常值的

    以上是关于GBDT几问的主要内容,如果未能解决你的问题,请参考以下文章

    GBDT理解

    随机森林、GBDT、Xgboost

    梯度提升树GBDT

    梯度提升树GBDT

    Gradient Boost Decision Tree(GBDT)中损失函数为什么是对数形式

    树模型与集成学习(task6)梯度提升树GBDT+LR