目录
一、GBDT概述
Gradient boosting的思想是迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,即加法模型:
在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是, 损失函数是, 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器,让本轮的损失函数最小。也就是说,本轮迭代找到决策树,优化或者说最小化loss Function.
由此可看出,目标有两个:
- 希望损失函数能够不断的减小,
- 希望损失函数能够尽可能快的减小。
二、GBDT算法思想
1. GB(Gradient boosting)
GB算法的思想很简单,关键是怎么生成h(x)?
如果目标函数是回归问题的均方误差,很容易想到最理想的h(x)应该是能够完全拟合 ,这就是常说基于残差的学习。残差学习在回归问题中可以很好的使用,但是为了一般性(分类,排序问题),实际中往往是基于loss Function 在函数空间的的负梯度学习,对于回归问题残差和负梯度也是相同的。中的f,不要理解为传统意义上的函数,而是一个函数向量,向量中元素的个数与训练样本的个数相同,因此基于Loss Function函数空间的负梯度的学习也称为“伪残差”。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量
让损失函数沿着梯度方向的下降。这个就是gbdt 的 gb的核心了。 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度
GB算法的步骤:
1.初始化模型为常数值:
2.迭代生成M个基学习器
(1).计算伪残差
(2).基于生成基学习器
(3).计算最优的
(4).更新模型
传统回归树与GBDT的区别:
年龄预测为例,简单起见训练集只有4个人,A,B,C,D,年龄分别是14,16,24,26。其中A,B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。
如果用一棵传统的回归决策树来训练,会得到如下图1所示结果:
使用GBDT,由于数据太少,我们限定叶子节点最多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。我们会得到如下图2所示结果:
既然图1和图2 最终效果相同,为何还需要GBDT呢?答案是过拟合。我们发现图1为了达到100%精度使用了3个feature(上网时长、时段、网购金额)相对来说图2的boosting虽然用了两棵树 ,但其实只用了2个feature就搞定
2. GBDT的变形和参数建议
GBDT的一个重要的参数就是每个决策树的深度。如果每次迭代时树都完全长成,那么其实就成为了一个基本的决策树,会导致过拟合,也失去了Boost算法的意义。通常设置决策树的深度为6,。但同时也要看应用场景。
GBDT在实际运用时,常常有两种变体:
“Shrinkage”:事实上这是一种正则化(regularization)方法,为了进一步过拟合,在每次对残差估计进行迭代时,不直接加上当前步所拟合的残差,而是乘以一个系数。
其中,为当前回归树残差,λ为1时,即为不加Shrinkage的一般GBDT。有文章指出,10 < λ * 迭代次数(或者说数的数目)< 100,是一个比较合适的学习速率。但是一般这个速率常常被设成了0.1,或者0.05。
“Subsample”:第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。
3. 算法思想总结
GBDT可以看做:
线性加法模型+前向分步算法+损失函数
(1)加法模型与前向分步算法
(2)损失函数
GBDT有绝对值损失、Huber损失和平方损失的等,Huber损失如下: