转载:https://www.toutiao.com/i6608298752232915470/
GBDT使用了前向分布算法,弱学习器限定只能使用CART回归树模型。在GBDT的迭代中,假设我们前几轮迭代得到的强学习器是:
损失函数:
我们本轮迭代的目标是找到一个CART回归树模型的弱学习器 ,让本轮的损失最小:
让这个弱学习器去逼近前几轮学习器的损失与目标的差距(残差或者梯度)。本轮迭代找到的决策树,要让样本的损失函数尽量变得更小。
GBDT由两部分组成:gradient boosting和decision tree.
基础分类器选用决策树的原因:
决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分。不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法,抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。
由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。至于抑制单颗决策树的复杂度的方法有很多,比如限制树的最大深度、限制叶子节点的最少样本数量、限制节点分裂时的最少样本数量、吸收bagging的思想对训练样本采样(subsample),在学习单颗决策树时只使用一部分训练样本、借鉴随机森林的思路在学习单颗决策树时只采样一部分特征、在目标函数中添加正则项惩罚复杂的树结构等。
本文对GBDT算法原理推导及剖析,它的基础就是决策树,并且是回归决策树,所以首先要分析回归树原理;集成算法的思想就是要逐步提升,所以我们又要设计若干棵回归树来提升,就要分析提升树原理;有了这些基础,我们将之应用于二分类、多分类。
1.回归树
回归树是根据最小化平方误差的准则,递归地构建二叉决策树。假设 X与 y分别为输入输出变量,并且是连续变量,给定训练数据集:
一棵回归树将输入空间(即特征空间)划分为M个子空间 ,回归树的每个叶子节点对应一个单元,其相应的有一个固定的输出值。当输入特征为时,回归树会将其判定到一个叶子节点,将这个叶子节点对应的输出值作为回归树的输出。这样,回归树模型可以用数学函数表示为:
建立回归树的目标是针对数据集,选择合适的空间划分方式(即决策树的生成方式)和相应的输出值,来最小化平方误差:
空间划分的方式就是求解的方式。从一个根节点开始,逐一切分,在每一个决策节点处选择变量的第维特征(用表示第维的值) 和相应的阈值,作为切分特征和切分阈值,则节点将空间划分为两个区域:
划分后的空间要满足:
将样本集划分为两个子样本集。上式的具体目的是这两个子样本集的方差尽可能小。上式中 、的取值为各样本的均值,和的选择则是通过遍历来确定。注意,切分阈值s是连续变量,但其取值可以根据样本的实际分布来选择合适的具体值,而不必连续性遍历。
决定回归树的输出值。针对每个子区域(树的叶子节点),其对应的输出值可以直接选取类别均值,即:
我们知道,普通决策树是分类树,GBDT解决的也是分类问题,但为什么GBDT选择回归树,而不是分类树呢?这是因为我们要用提升的方法不断迭代,减少损失函数,而回归树是非常方便计算损失函数的,包括每一轮迭代的残差。
2.提升树算法:
仍然是叠加模型:
模型的训练目标是:
采用迭代的方式求解:
首先初始化提升树,第步确定第个决策树,即选择合适的决策树参数,使损失函数最小,即
如果采用平方损失函数,
则有
这里,
表示模型拟合数据的残差。
提升树与回归树最大的差别就是运用了迭代的思想,每一次迭代的目标是拟合之前与目标的差距,逐步使损失函数最小。
3、GBDT
GBDT很好的结合了回归树与提升树的思想,并将它们推广到更一般的情形。提升树中计算残差是在损失函数为平方损失函数来计算的,如果损失函数为对数函数,则计算残差变得不是很方便,以及在训练回归树时,计算节点输出值也变得不容易进行。
GBDT首先使用最速下降的近似方法来计算残差的近似值,即
利用
,训练出第m棵回归树,其叶节点划分的区域为
对于每个节点,求得使损失误差最小的输出值:
最终得到提升回归树:
4、GBDT二分类
GBDT二分类采用的损失函数是:
这又是一个对数损失函数,为什么要采用对数损失函数?因为我们的损失函数是将所有样本的损失函数加起来的,面对数损失函数是便于将和转变为乘的,所以采用对数损失函数。
每个样本的负梯度(对应残差的思想):
每个节点的输出:
用近似值代替为:
5、GBDT多分类
GBDT多分类仍然采用对数损失函数,但是由于是多分类,在每步的迭代中,需要建立K个提升回归树,所以综合计算这K棵树的总损失:
我们用softmax来计算属于某个类的概率:
我们可以计算出第 m 轮的第 i 个样本对应类别l的负梯度误差为:
每个节点的输出为:
用近似值代替:
以上就是GBDT算法的全部推导过程,这一过程仍然传承了AdaBoost算法中的思想和方法,并且在拟合残差的过程中进行了创新,在采用损失函数过程中也进行了创新,进而引进负梯度的思想,总之GBDT中体现的数学思想与方法非常精妙。
浙公网安备 33010602011771号