集成学习(4)——GBDT

概述

GBDT的全称是Gradient boosting decision tree,它是通过拟合负梯度Gradient boosting和决策回归树decision tree组合而成,该算法由多颗决策树构成,多颗决策树的结果加起来作为最终结论。让损失函数沿着梯度方向的下降。这个就是GDBT 的 GB的核心。GBDT 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。(如果损失函数使用的是平方误差损失函数,则这个损失函数的负梯度就可以用残差来代替,以下所说的残差拟合,便是使用了平方误差损失函数)。

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是 f t − 1 ( x ) f_{t-1}(x) ft1(x),损失函数是 L ( y , f t − 1 ( x ) ) L(y,f_{t-1}(x)) L(y,ft1(x)),本轮迭代的目标是找到一个CART回归树模型的弱学习器 h t ( x ) h_t(x) ht(x),让本轮的损失损失 L ( y , f t ( x ) ) = L ( y , f t − 1 ( x ) + h t ( x ) ) L(y,f_t(x))=L(y,f_{t-1}(x)+h_t(x)) L(y,ft(x))=L(y,ft1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

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

从上面的例子看这个思想还是蛮简单的,但是有个问题是这个损失的拟合不好度量,损失函数各种各样,找到一种通用的拟合方法就是一个问题。

GBDT的使用回归树的原因

GDBT使用的树是CART回归树,尽管GDBT既可以用来作分类也可以作为回归,但是,该算法中使用的树都是回归树,因为GDBT每次拟合的都是梯度值,是有意义的连续值,比如一个人的岁数可以使10+5-3=12岁,但是男+女+男得到的结果是什么?根本没有意义。

回归树的每个节点都会生成一个预测值,该节点的预测值等于这个节点所有年龄的平均值,分支时一般使用最小化均方差即:

m i n ( ( 每 个 人 的 年 龄 − 预 测 值 ) 2 N ) min(\frac{(每个人的年龄-预测值)^2}{N}) min(N()2)

这里怎么理解呢?被预测的人出错的越多,就表示错的越离谱,均方差就越大,每次都通过寻找最小化均方差就能找到靠谱的分支数据,直至分支到每一个叶子节点的值都唯一(基本不可能)或达到预设的终止条件则,若达到条件还不唯一就使用所有节点的平均值作为预测值。

注:(对于分类树一般使用基尼系数或者熵来判别最佳划分点,但是在决策树中,样本的标签是连续值,这个时候用熵之类的来描述就不合理了,所转移一般用平方误差来代替,他能很好的评判拟合程度)

回归树的生成(decision tree)

其实在GDBT中每一次的拟合都是一颗决策树的生成过程,下面来看回归树生成算法:

输入:数据集D

输出:回归树f(x)

在训练数据集所在的输入空间中,递归将每个区域划分为两个子域,构建二叉决策树。

  1. 选择最优切分变量j与切分点s,求解:
    在这里插入图片描述
    遍历变量j扫描切分点s,选择使得上式最小的对(j,s)

  2. 用选定的(j,s)对划分区域并决定相应的输出值
    在这里插入图片描述

  3. 重复1和2直至满足条件停止

  4. 将空间划分为M个区域R1,R2,R3,…,Rm,生成决策树:
    在这里插入图片描述

拟合负梯度(gradient boosting)

DBT是提升树(boosting tree)的一种改进算法,如何理解提升树呢:

假如一个人的身高是180,我首先用150去拟合,这个时候就有误差30(残差),我再用20去拟合,这个时候误差为10我用8去拟合误差为2,这个时候距离真是身高就差2了如果这个时候迭代的论数还没结束就继续去迭代,每一次的迭代的误差都会减小。最后将每一次拟合的身高加起来就是最终的预测身高了。

拟合负梯度的由来:

首先看提升树的算法
在这里插入图片描述
上述公式中的残差:
在这里插入图片描述
这里损失函数使用的是平方损失,GBDT算法使用的就是损失函数的负梯度作为提升算法中的残差近视值。

首先计算梯度一般是对损失函数进行求导,所以第t论第i个样本损失函数的负梯度就是:
在这里插入图片描述
使用平方损失:
在这里插入图片描述
负梯度为:
在这里插入图片描述
此时GDBT的负梯度就变成了残差,通俗的来说就是样本的真实值与预测值之间的误差,一般下一轮使用的真实值就是上一轮的平均误差值

GDBT算法

首先GDBT是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。 GDBT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的梯度(如果损失函数是平方损失函数,则梯度就是残差值)基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度,(此处是可以证明的)。

  • 回归算法:
    在这里插入图片描述
  • 分类算法:
    由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。
    为了解决这个问题,主要有两个方法,一个是用指数损失函数,此时GBDT退化为Adaboost算法。另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。本文仅讨论用对数似然损失函数的GBDT分类。而对于对数似然损失函数,我们又有二元分类和多元分类的区别。

二元
在这里插入图片描述
多元
在这里插入图片描述
在这里插入图片描述

GBDT正则化

在这里插入图片描述

GBDT的优缺点。

  • GBDT主要的优点有:
  1. 可以灵活处理各种类型的数据,包括连续值和离散值。
  2. 在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。
  3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
  • GBDT的主要缺点有:
    由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值