DataWhale机器学习高级算法梳理Day2-GBDT

GBDT:Gradient Boosting Decision Tree(梯度增强决策树)以决策树为基学习器的梯度增强集成算法。

集成学习三种主要方法:boosting, bagging, stacking

boosting通过分步迭代来构建模型。

梯度提升方法:通过在迭代的每一步沿着梯度最陡方向降低损失,来构建一个学习器。
优点:
1) 可以设置不同的可微函数处理各类学习任务。
2) 引入bagging思想,加入正则项来抵御训练数据中的噪音,减轻异常值的影响。

bagging思想:并行式集成学习算法的代表。自主采样得到 T T T个包含 m m m个样本的采样集。基于每个采样集训练出一个基学习器,再将基学习器进行结合。

前向分布算法

  • 加法模型
    y i ^ = ∑ k = 1 k f k ( x i ) , f ( k ) ∈ F   F 为 所 有 树 组 成 的 函 数 空 间 \hat{y_i} = \sum^k_{k=1}f_k(x_i), \quad f(k) \in F \\ ~\\ F为所有树组成的函数空间 yi^=k=1kfk(xi),f(k)F F

    模型参数为 Θ = { f 1 , f 2 … f k } \Theta = \left \{ f_1, f_2 … f_k \right \} Θ={f1,f2fk},加法模型不是 d d d维向量空间的权重,而是基学习器(GBDT中是决策树)的集合。

    加法模型的目标函数为:
    o b j = ∑ i = 1 n l ( y i , y i ^ ) + ∑ k = 1 k Ω ( f k )   n 为 训 练 样 本 个 数 k 为 基 学 习 器 的 个 数 obj = \sum^n_{i=1}l(y_i, \hat{y_i}) + \sum^k_{k=1}\Omega(f_k) \\ ~\\ n为训练样本个数\\ k为基学习器的个数 obj=i=1nl(yi,yi^)+k=1kΩ(fk) nk
    l ( y i , y i ^ ) l(y_i, \hat{y_i}) l(yi,yi^)为损失函数, Ω ( f k ) \Omega(f_k) Ω(fk)衡量决策树的复杂度

  • 前向分布算法
    含义:从前往后,每次只学习一个基学习器,使它逼近目标函数(每步只优化损失函数 l ( y i , y i ^ ) l(y_i, \hat{y_i}) l(yi,yi^)。)

    步骤:

    1. 初始化基学习器 f 0 ( x ) = 0 f_0(x) = 0 f0(x)=0
    2. 对于 k = 1 , 2 , 3 … K k = 1, 2, 3…K k=1,2,3K,极小化损失函数
    3. 得到基学习器的系数和参数
    4. 更新损失函数

负梯度拟合

负梯度可表示为:
r k i = [ ∂ l ( y i , f ( x i ) ) ∂ f ( x i ) ]   k i 表 示 第 k 轮 的 第 i 个 样 本 r_{ki} = [\frac{\partial l(y_i, f(x_i))}{\partial f(x_i)}]\\ ~\\ ki表示第k轮的第i个样本 rki=[f(xi)l(yi,f(xi))] kiki

原理:
在这里插入图片描述
每次迭代,往坡度(也就是该点处斜率)的反方向向前一步,这样使得每次损失函数下降的幅度最大。

损失函数

在boosting中,损失函数必须为可微函数,这样才能得到其梯度。

在不同的任务中有不同的的损失函数:
在这里插入图片描述

回归

从上表可以看到,回归任务有三种主要的损失函数,分别是平方损失函数 1 2 [ y i − y i ^ ] 2 \dfrac{1}{2}[y_i - \hat{y_i}]^2 21[yiyi^]2,绝对值损失函数 ∣ y i − y i ^ ∣ |y_i - \hat{y_i}| yiyi^,和 H u b e r Huber Huber函数。

流程:
1. 初始化弱分类器
2. 每次迭代 t = 1 , 2 , 3 , … T t = 1,2,3,…T t=1,2,3,T,对每个样本 i = 1 , 2 , 3 … n i = 1,2,3…n i=1,2,3n,计算负梯度:
r i n = − [ ∂ l ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{in} = -[\frac{\partial l(y_i, f(x_i))}{\partial f(x_i)}]_{f(x) = f_{m-1}(x)} rin=[f(xi)l(yi,f(xi))]f(x)=fm1(x)
得到 r t i r_{ti} rti,利用 ( x i , r t i ) (x_i, r_{ti}) (xi,rti),拟合一个决策树,得到第 t t t 棵回归树,对应叶子节点区域为 R t j = 1 , 2 , … J R_{tj} = 1,2,…J Rtj=1,2,J J J J为第 t t t 轮回归树的叶子节点的个数。
3. 对叶子区域 j = 1 , 2 , 3 , … J j = 1,2,3,…J j=1,2,3,J 计算最佳拟合值
4. 更新强学习器

二分类,多分类

  • 二分类
    使用对数似然损失函数:
    l ( y i , f ( x ) ) = l o g ( 1 + e x p ( − y f ( x ) ) )   y 为 真 实 值 标 签 , 在 这 里 二 分 类 中 , y ∈ { + 1 , − 1 } l(y_i, f(x)) = log(1 + exp(-yf(x))) \\ ~\\ y为真实值标签,在这里二分类中,y \in \{+1, -1 \} l(yi,f(x))=log(1+exp(yf(x))) yy{+1,1}
    这时的负梯度误差为:
    r t i = y i 1 + e x p ( y f ( x ) ) r_{ti} = \frac{y_i}{1+exp(yf(x))} rti=1+exp(yf(x))yi
    对于生成的决策树,得到各个叶子节点的最佳残差拟合值:
    c t j = a r g   m i n ⎵ c ∑ x i ∈ R i j l o g ( 1 + e x p ( y i ( f t − 1 ( x i ) + c ) ) ) c_{tj} = \underbrace {arg\ min}_c \sum_{x_i \in R_{ij}} log(1+ exp(y_i(f_{t-1}(x_i)+c))) ctj=c arg minxiRijlog(1+exp(yi(ft1(xi)+c)))
    上式可近似为:
    c t j = ∑ x i ∈ R i j r t i / ∑ x i ∈ R i j ∣ r t i ∣ ( 2 − ∣ r t i ∣ ) c_{tj} = \sum_{x_i \in R_{ij}} r_{ti}/ \sum_{x_i \in R_{ij}} |r_{ti}|(2-|r_{ti}|) ctj=xiRijrti/xiRijrti(2rti)

  • 多元分类

    假设类别总数为 K K K,对数似然损失函数为:
    l ( y i , f ( x ) ) = − ∑ k = 1 K y k l o g   p k ( x )   p k ( x ) 为 x 分 为 第 k 类 的 概 率 , p k ( x ) 可 写 为 :   p k ( x ) = e x p ( f ( x ) )   / ∑ l = 1 K e x p ( f l ( x ) )   可 以 写 出 第 t 轮 第 i 个 样 本 对 应 类 别 l 的 负 梯 度 误 差 为 :   r t i l = − [ ∂ l ( y i , f ( x i ) ) ∂ f ( x i ) ] f k ( x ) = f l , t − 1 ( x ) = y i l − p l , t − 1 ( x i ) l(y_i, f(x)) = - \sum^K_{k=1} y_k log\ p_k(x) \\ ~\\ p_k(x)为x分为第k类的概率,p_k(x)可写为:\\ ~\\ p_k(x) = exp(f(x))\ / \sum^K_{l=1}exp(f_l(x)) \\ ~\\ 可以写出第t轮第i个样本对应类别l的负梯度误差为: \\ ~\\ r_{til} = -[\frac{\partial l(y_i, f(x_i))}{\partial f(x_i)}]_{f_k(x) = f_{l,t-1}(x)} \\ = y_{il} - p_{l, t-1}(x_i) \\ l(yi,f(x))=k=1Kyklog pk(x) pk(x)xkpk(x) pk(x)=exp(f(x)) /l=1Kexp(fl(x)) til rtil=[f(xi)l(yi,f(xi))]fk(x)=fl,t1(x)=yilpl,t1(xi)
    误差就是样本 i i i对应的类别 l l l 的真实概率和 t − 1 t-1 t1 轮预测概率的差值。

    得到各个叶子节点最佳残差拟合值:
    c t j l = K − 1 K ∑ x i ∈ R t i l r t i l ∑ x i ∈ R t i l ∣ r t i l ∣ ( 1 − ∣ r t i l ∣ ) c_{tjl} = \frac{K-1}{K} \frac{\sum_{x_i \in R_{til}}r_{til}}{\sum_{x_i \in R{til}}|r_{til}| (1-|r_{til}|)} ctjl=KK1xiRtilrtil(1rtil)xiRtilrtil

正则化

三种方式:learning_rate, subsample, min_samples_split。

  • learning_rate学习率
    f k ( x ) = f k − 1 ( x ) + v h k ( x ) f_k(x) = f_{k-1}(x)+vh_k(x) fk(x)=fk1(x)+vhk(x)
    v v v为学习率,一个小的学习率可以显著提高模型的泛化能力,较大的学习率会导致预测性出现较大波动。

  • subsample子采样比例
    借鉴自bagging思想。

    每一轮迭代中,新的决策树拟合的是原始训练集中的一个子集的残差。子集来自对原训练集无放回随机采样而来。

优缺点

  • 优点
  1. 可以灵活处理各种类型的数据,包括连续值和离散值。
  2. 使用了一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
  3. 充分考虑的每个分类器的权重。
  • 缺点
    由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

sklearn参数

  • n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般选择一个适中的数值。默认是100。在实际调参的过程中,我们常常将n_estimators和下面介绍的参数learning_rate一起考虑。
  • learning_rate: 即每个弱学习器的权重缩减系数,也称作步长,在原理篇的正则化章节我们也讲到了,加上了正则化项,我们的强学习器的迭代公式为。的取值范围为。对于同样的训练集拟合效果,较小的意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。所以这两个参数n_estimators和learning_rate要一起调参。一般来说,可以从一个小一点的开始调参,默认是1。
  • subsample: 即我们在原理篇的正则化章节讲到的子采样,取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间,默认是1.0,即不使用子采样。
  • init: 即我们的初始化的时候的弱学习器,拟合对应原理篇里面的,如果不输入,则用训练集样本来做样本集的初始化分类回归预测。否则用init参数提供的学习器做初始化分类回归预测。一般用在我们对数据有先验知识,或者之前做过一些拟合的时候,如果没有的话就不用管这个参数了。
  • loss: 损失函数。(1)对于分类模型,有对数似然损失函数"deviance"和指数损失函数"exponential"两者输入选择。默认是对数似然损失函数"deviance"。在原理篇中对这些分类损失函数有详细的介绍。一般来说,推荐使用默认的"deviance"。它对二元分离和多元分类各自都有比较好的优化。而指数损失函数等于把我们带到了Adaboost算法。(2)对于回归模型,有均方差"ls", 绝对损失"lad", Huber损失"huber"和分位数损失“quantile”。默认是均方差"ls"。一般来说,如果数据的噪音点不多,用默认的均方差"ls"比较好。如果是噪音点较多,则推荐用抗噪音的损失函数"huber"。而如果我们需要对训练集进行分段预测的时候,则采用“quantile”。
  • alpha:当使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9,如果噪音点较多,可以适当降低这个分位数的值

应用场景

回归任务
分类任务:二分类和多分类


重要参考:
GBDT算法原理深入解析
【机器学习算法总结】GBDT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值