GBDT(Gradient Boosting Decision Tree) 梯度提升树的基本原理
1. 什么是GBDT?
GBDT是一种基于boosting集成学习(ensemble method)的算法,但和传统的Adaboost有很大不同。在Adaboost,我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同。GBDT的训练过程如下1:
1.1 Decision Tree
决策树分为两大类,分类树和回归树。前者用于分类标签值,如用户性别、垃圾邮件等;后者用于预测实数值,如年龄、房价等。而GBDT中使用的都是CART回归树,即时GBDT也可用于分类。
1.2 Gradient Boosting
GBDT是把所有树的结论累加起来做最终结论的,所以可以想到每棵树的结论并不是年龄本身,而是年龄的一个累加量。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。这就是Gradient Boosting在GBDT中的意义2。
根据上面那个简单的例子,我们知道假设损失函数为平方损失(square loss)时,我们使用残差来进行下一轮的训练,即GBDT算法的每一步在生成决策树时只需要拟合前面的模型的残差。Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树,这就是GBDT的负梯度拟合。损失函数的负梯度在当前模型的值为:
Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错样本的权重,而已经分对的样本则都趋向于0。因为对于已经分对的样本,其残差为0,在下一轮中几乎不起作用。
2. GBDT算法
知道了怎么解决损失函数拟合的问题,即GBDT的负梯度拟合之后,需要使用这些负梯度进行训练。假设
rmi
表示第
m
轮的第
利用
(xi,rmi)(i=1,2,..n)
,我们可以拟合第
m
棵CART回归树,其对应的叶节点区域
针对每个叶子节点里的样本,我们求出损失函数最小,也就是拟合叶子节点最好的的输出值
从而可以获得本轮的CART回归树的拟合函数:
最后获得强学习器的表达式:
请结合上面的例子,理解每一轮更新强学习器都需要加上前面所有轮的输出!
2.1 GBDT回归算法
Freidman提出的梯度提升(Gradient Boosting)算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,拟合一个回归树。算法如下3:
算法步骤解释:
1、初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,即 γ 是一个常数值。
2、对于每轮CART回归树:
(a)计算损失函数的负梯度在当前模型的值,将它作为残差的估计
(b)估计回归树叶节点区域,以拟合残差的近似值
(c)利用线性搜索估计叶节点区域的值,使损失函数极小化
(d)更新回归树
3、得到输出的最终模型 f(x)
2.2 GBDT分类算法
这里我们再看看GBDT分类算法,GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差4。
为了解决这个问题,主要有两个方法,一个是用指数损失函数,此时GBDT退化为AdaBoost算法。另一种方法是用类似于逻辑回归的对数似然损失函数。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。本文仅讨论用对数似然损失函数的GBDT分类。而对于对数似然损失函数,我们又有二元分类和多元分类的区别。
2.2.1 二元GBDT分类算法
对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
其中 y∈{−1,+1} 。此时的负梯度误差为:
对于生成的CART回归树,我们各个叶子节点的最佳残差拟合值为:
由于上面的式子比较难优化,一般使用近似值代替:
除了负梯度计算和叶子节点的最佳残差拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。
2.2.2 多元GBDT分类算法
多元GBDT要比二元GBDT复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为K,则此时我们的对数似然损失函数为:
其中如果样本输出类别为
k
,则
集合上两式,我们可以计算出第
t
轮的第
观察上式可以看出,其实这里的误差就是样本
i
对应类别
对于生成的决策树,我们各个叶子节点的最佳残差拟合值为:
由于上式比较难优化,我们一般使用近似值代替:
除了负梯度计算和叶子节点的最佳残差拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同。
- https://www.cnblogs.com/ModifyRong/p/7744987.html ↩
- http://blog.csdn.net/molu_chase/article/details/78111148 ↩
- 《The Elements of Statistical Learning》 ↩
- https://www.cnblogs.com/pinard/p/6140514.html ↩