GBDT算法梳理

Table of Contents

1 GBDT概述

2 前向分布算法

2.1 加法模型

2.2 前向分布算法

2.2.1 思想

2.2.2 策略

2.2.3  加法模型求解

3 损失函数

4 负梯度拟合

5 回归

6 GBDT分类

6.1 二分类

6.2 多分类

7 正则化

8 优缺点

9 sklearn参数

10 应用场景


1 GBDT概述

GBDT(Gradient Boosting Decision Tree )又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法。其中GB :Gradient Boosting,DT:(Regression) Decision Tree,GBDT的DT是回归树,不是分类树。但是它既可以用于回归也可以用于分类。

Boosting基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当(按照一定权重)的综合(例如线性组合加法模型)所得出的判断,要比其中任何一个专家单独的判断好。

GBDT是Boosting的一族的成员,也会进行迭代,使用前向分布算法。它是通过累加所有树的结论得出最终结果,GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。下面举一个例子。

有4个人,年龄分别是10,12,16,18

 

2 前向分布算法

2.1 加法模型

       加法模型(Aditive Model)是一种线性模型

fx= mMβmbx;γm

其中,b(x;γm)为基函数,γm为基函数的参数,βm为基函数的系数(权重)。

在给定训练数据及损失函数 Ly,fx 的条件下,学习加法模型 fx 成为经验风险极小化(即损失函数极小化)问题:

minβm,γmi=1NL(yi,mMβmbxi;γm)

即同时考虑N个样本在整个线性模型组中的损失函数的极小值,通常这是一个十分复杂的优化问题(求极值问题),想要一步到位求出最优解特别困难。

2.2 前向分布算法

2.2.1 思想

可以利用前向分步算法(Forward Stagewise Algorithm)求解这一优化问题,其思想是:因为学习的是加法模型(线性模型),如果能够从前向后,每一步只学习一个基函数 bx;γm 及其系数 βm ,逐步逼近优化目标函数式

minβm,γmi=1NL(yi,mMβmbxi;γm)

那么就可以极大简化优化的复杂度。

具体地,每步只需要优化如下损失函数:

minβ,γi=1NLyi,βbxi ,

即一次只要考虑一个基函数及其系数即可.

2.2.2 策略

       经验风险最小化。如果在模型中加入了penalty惩罚项,则可以演进为结构风险最小化。

2.2.3  加法模型求解

输入:训练数据集T={x1,y1,x2,y2,……,(xN,yN)};损失函数Ly,fx ; 基函数集{ bx;γ};

输出:加法模型fx

  1. 初始化f0x=0
  2. 对m=1,2,……,M
    1. 极小化损失函数

βmm=argminβ,γi=1NL(yi,fm-1xi+βb(xi;γ))

得到参数βmm

    1. 更新

fmx=fm-1x+βmb(x;γm)

  1. 得到加法模型

fx=fMx=m=1Mβmb(x;γm)

       这样,前向分布算法将同时求解从m=1到M所有参数的βmm优化问题简化为逐步求解各个βmm的优化问题。

3 损失函数

       因为GBDT既可以用于分类也可以用于回归,针对这两种不同的使用,损失函数各有不同。下面列举常用的几个常用的损失函数。

对于分类

  1. 指数损失函数
  2. 对数损失函数

对于回归

  1. 绝对损失
  2. 均方差
  3. Huber损失
  4. 分位数损失

4 负梯度拟合

参考网址:https://www.cnblogs.com/pinard/p/6140514.html

       如何拟合损失函数?Leo Breiman 提出了用损失函数的负梯度来拟合本次迭代损失的近似值,进而拟合一棵CART回归树。

rti=-[∂L(yi,f(xi)))∂fxi]fxi=ft-1(x)

  利用(xi,rti)(i=1,2,..m),我们可以拟合一颗CART回归树,得到了第 t 颗回归树,其对应的叶节点区域Rtj,j=1,2,...,J。其中J为叶子节点的个数。

  针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值ctj如下:

ctj=argmincxiRtjL(yi,ft-1xi+c)

  这样我们就得到了本轮的决策树拟合函数如下:

htx=j=1JctjI(x∈Rtj)

  从而本轮最终得到的强学习器的表达式如下:
ftx=ft-1x+j=1JctjI(x∈Rtj)

 

通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

5 回归

输入:训练数据集T={x1,y1,x2,y2,……,(xm,ym)};损失函数Ly,fx ; 最大迭代次数T;

输出:强学习器fx

  1. 初始化

f0x=argminci=1NL(yi,c)

  1. 对迭代次数t=1,2,……,T 有:
    1. 对样本i=1,2,……,m ,计算负梯度  

rtj=-[∂L(yi,f(xi)))∂fxi]fxi=ft-1(x)

    1. 利用(xi,rti)(i=1,2,..m),我们可以拟合一颗CART回归树,得到了第 t 颗回归树,其对应的叶节点区域Rtj,j=1,2,...,J。其中J为叶子节点的个数。
    2. 对叶子区域j =1,2,..J,计算最佳拟合值

ctj=argmincxiRtjL(yi,ft-1xi+c)

    1. 更新学习器
      ftx=ft-1x+j=1JctjI(x∈Rtj)
  1. 得到强学习器f(x)的表达式
    fx=fTx=f0(x)+t=1Tj=1JctjI(x∈Rtj)

6 GBDT分类

       因为分类输出的结果是不连续的值,无法拟合数据结果的误差。可以使用两种方法解决这个问题,一是用指数函数,二是用类似于逻辑回归的对数似然函数的方法。

 

6.1 二分类

损失函数

L(y,f(x))=log(1+exp(-yf(x)))

其中y∈{-1,+1},则对叶子区域j =1,2,..J,计算最佳拟合值为
ctj=argmincxiRtjlog(1+exp-yift-1xi+c))

由于上式较难优化,可以使用近似值代替

ctj=xiRtjrtj/(xiRtj|rtj|(1-|rtj|))

6.2 多分类

       损失函数L(y,f(x))=-k=1Kyklogpk(x)

       推导过程如上,可用近似值代替
ctj=K-1KxiRtjrtjxiRtj|rtj|(1-|rtj|)

7 正则化

8 优缺点

优点

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

缺点

  1. 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行

9 sklearn参数

官方文档https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html

经常会通过以下几个参数进行调优

  1. n_estimators: 也就是弱学习器的最大迭代次数
  2. learning_rate: 即每个弱学习器的权重缩减系数ν,也称作步长
  3. loss: 即我们GBDT算法中的损失函数

10 应用场景

主要应用于回归和分类。

         回归:信用评分等。

         分类:职位分类,预测疾病的风险等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值