GBM & GBDT详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GBM & GBDT详解相关的知识,希望对你有一定的参考价值。
参考技术A在理解GBDT之前,我们需要知道什么是GBM,GBM的全称是Gradient Boosting Machines,它是1999年被Jerome Friedman在他的论文中提出来的,从名字中我们可以知道这个算法的关键词:G(Gradient)、B(Boosting)。
为了理解GBM,首先我们需要知道什么是B(Boosting):
Boosting是集成方法中的一种, 集成方法的主要思想是利用一定的手段学习出多个基学习器,而且这多个基学习器要求是弱学习器,然后将多个基学习器进行组合。boosting方法通过分步迭代(stage-wise)的方式来构建模型,每一步迭代构建的弱学习器都是为了弥补已有模型的不足。
G(Gradient)是指用来最小化损失函数的方法,传统的Boosting模型,如Adaboost,最小化损失函数的方式是,每次迭代后,通过更新样本权重分布(分对的样本权重变小,分错的样本权重变大),让后一个基学习器更加关注分错的样本,这样一轮轮的迭代下去,从而达到使损失函数最小化的目标。Adaboost的损失函数是指数损失函数,所以比较好用数学推导的方式去计算每一次迭代时让损失函数达到最小值的最优解,但是其它的损失函数可能不那么容易优化,为了找到一种通用的最优化损失函数的方法,Gradient Boosting被提出来了,Gradient Boosting是指每一步迭代,都是用损失函数的负梯度来拟合弱学习器,以达到使损失函数最小化的目的,GBM 在损失函数的选择上有更大的灵活性。这和梯度下降法的思想是一样的,通过找到使损失函数下降最快的方向,一步一步逼近最小值点,大家可以参考我的另外一篇文章:‘梯度下降和牛顿法’。
我们用 来表示我们的总模型,其中第m步后的模型,可以用上一轮迭代之后的模型 加上本轮学习的基学习器 然后再乘以一个 表示, 和梯度下降中的步长意义是一样的,表示这一步应该走多远:
让我们来看看GBM的训练步骤(以下图片来自维基百科)
GBM中最常用的基学习器是CART回归树,该类GBM算法也叫GBDT。
为什么要选择决策树做基学习器呢,因为决策树有很多优点:
因为基学习器是决策树,所有GBDT在GBM算法的基础上做了一点修改,以更好的发挥决策树的优点。
因为是树模型,所以 可以用 表示,其中 是第m个基决策树的叶子节点数, 是每个叶子节点的值,那么原先的 就可以写成
,
把 放到求和里面去,就变成了
我们来看看GBDT的训练步骤:
大家可能会有一个疑问,按照上面的步骤,好像(2.1)和(2.2)没什么作用,其实(2.1)和(2.2)是用来确定树结构的,训练后树的每个叶子节点的值通过(2.3)的方式确定,有几个叶子节点,就有几个 值,这样每一步迭代就有多个参数可以调节来进一步改善拟合的质量,使损失函数最小化。
不管是分类问题,还是回归问题,GBDT使用的决策树都是CART回归树,为什么回归树可以解决分类问题呢,因为GBDT基学习器拟合的是负梯度值,负梯度是一个实数,所以基学习器解决的其实是一个回归问题。
回归问题最常见的损失函数有误差平方和、绝对误差等损失函数。
如果损失函数是误差平方和:
此时我们把它叫做 LS_TreeBoost ,具体实现如下:
如果损失函数是绝对误差:
此时我们把它叫做 LAD_TreeBoost ,具体实现如下:
分类问题最常见的损失函数有对数损失函数和指数损失函数。
如果损失函数为对数损失: ,
其中,
此时我们把它叫做 _TreeBoost ,具体实现如下:
最后应用的时候,还需要通过sigmoid函数,将输出结果转换成概率p,转换公式如下:
上式是作者论文中关于 _TreeBoost 的算法流程图,在2.1中,其实我们无法一眼看出这个负梯度值究竟是什么。
现在我们将 改为 ,损失函数为 ,其中
算法流程如下:
现在我们以分类问题,损失函数为对数损失函数,来推导初始化值、负梯度、叶子节点的值的由来。
已知:
,
损失函数为 ,其中
1、负梯度值推导
将 值带入 中,得
对上式求导,并取负,则得到我们的负梯度值:
2、初始化值推导
我们知道,初始化值的目标是:
对损失函数求导,并令导数=0,则可求出最优的
导数的运算法则有:
由上可知,每个样本的导数(梯度)为:
加总所有样本的导数,得到总体样本的导数为:
令导数=0,得
又因为对所有的样本,初始化的 都是一样的,所有上式可以写成
从而可得到:
3、叶子节点值
我们知道,每个叶子节点对应的最优的
上式没有闭式解,我们用近似值去替代它,这里用到二阶泰勒展开式去近似:
由于 已知,上面的一阶导、二阶导和 是一个常数
其中:
上式其实就是一个一元二次方程 ,我们知道,一元二次方程取极值的地方就是 ;
当 >0时, 为最小值, 当 <0时, 为最大值;
上式 是一个大于0的值,所以当 时取到最小值
带入上式得:
最终:
在实际应用中,为了防止GBDT过拟合,我们一般有如下处理操作:
4和5都是对每颗树的复杂度进行处理,其他任何控制决策树生长的方法都可以使用。
CatBoost算法 & XGBoost算法 & Light GBM算法
参考技术A CatBoost是俄罗斯的搜索巨头Y andex在2017年开源的机器学习库,也是Boosting族算法的一种,同前面介绍过的XGBoost和LightGBM类似,依然是在GBDT算法框架下的一种改进实现,是一种基于对称决策树(oblivious trees)算法的参数少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是 高效合理地处理类别型特征(Categorical features) ,这个从它的名字就可以看得出来,CatBoost是由 catgorical 和 boost 组成,另外是 处理梯度偏差(Gradient bias) 以及 预测偏移(Prediction shift)问题 ,提高算法的准确性和泛化能力。
类别型变量(Categorical features)是指其值是 离散的集合且相互比较并无意义的变量 ,比如用户的ID、产品ID、颜色等。因此,这些变量无法在二叉决策树当中直接使用。常规的做法是将这些类别变量通过预处理的方式转化成 数值型变量 再用模型进行训练,比如用一个或者若干个数值来代表一个类别型特征。
在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:
因此,采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。TS也被广泛采用,在点击预测任务当中,这个场景当中的类别特征有用户、地区、广告、广告发布者等。
它的具体实现方法如下:
所有的这些模型都需要调节大量参数,但我们只谈论其中重要的。以下是将不同算法中的重要参数按照功能进行整理的表格。
The rmse of prediction is: 0.0
0.0
在默认参数下,均方误差为 0
以上是关于GBM & GBDT详解的主要内容,如果未能解决你的问题,请参考以下文章
Python中Gradient Boosting Machine(GBM)调参方法详解
机器学习系列(11)_Python中Gradient Boosting Machine(GBM)调参方法详解