目录
GBDT介绍
梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)是Boosting家族的一员。
GBDT也是迭代,使用了前向分布算法,无论是处理回归问题还是二分类以及多分类,弱学习器只能用CART回归树模型。因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。GBDT迭代中,假设前一轮迭代的强学习器为
f
t
−
1
(
x
)
f_{t-1}(x)
ft−1(x),损失函数时
L
(
y
,
f
t
−
1
(
x
)
)
L(y,f_{t-1}(x))
L(y,ft−1(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,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。
CART回归树
对于回归模型,我们使用了常见的和方差的度量方式,CART回归树的度量目标是,对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。
回归树的样本输出是连续值。回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
GB–Gradient Boosting 梯度提升树:
(1)错误思想:求均值就是GBDT。
用三颗决策树预测一个人身高时,决策棵1预测为是1.7米,决策树2预测是1.75米,决策树3预测是1.8米。然后1.7 + 1.75 + 1.8 求均值,这样是不对的。因为只要训练集不变,独立训练三次的三棵树必定完全相同,这样做完全没有意义的。
(2)正确思想:把所有树的结论累加起来做决策
我们在用GBDT做预测的时候,每棵树的数值不是身高的实际数值,而是一个残差值,将残差值累加才是真实身高=。每一棵树学的是之前所有树的残差,这个残差累加后能得到真实值。
例如一个人的身高是1.8米,决策树1预测为1.1米,1.8 - 1.1 = 0.7,那么残差为0.7米。然后决策树2将0.7米拿去训练学习,如果决策树2能把年龄分到0.7米的叶子节点,那累加两棵树的结果:1.1 + 0.7 = 1.8米就是实际身高;如果决策树2的结果是0.5米,那么决策树2将0.5米拿去训练学习,0.7 - 0.5 = 0.2,则还存在0.2米的残差,决策树3继续学。这就是Gradient Boosting的核心思想。
DT–Regression Decistion Tree中的树一般是回归树:
我们都知道,决策树可以用于回归和分类。回归树用于预测实数值,用户的身高,体重,年龄,爱好,所在地的天气,湿度,温度,是否有风。分类树用于分类标签值,如气温高,低,适中、用户性别,学历,工作类型。数值相加减是有意义的,1米 + 1.5米 + 1.7米 = 3.2米,标签值相加减是无意义的,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果。虽然调整后也可用于分类,但不代表GBDT的树是分类树。
Shrinkage–缩减,循序渐进:
Shrinkage的思想强调的是循序渐进,就好比不能一口吃出一个胖子。每次迭代只走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。
GBDT算法原理
在损失函数loss负梯度方向,利用残差逼近的方式去拟合一颗CART,不断迭代后,最后累加所有CART。
用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为
利用(
x
i
x_i
xi,
r
t
i
r_{ti}
rti)(i=1,2,…m),此时
r
t
i
r_{ti}
rti作为目标值,我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域Rtj,j=1,2,…,J。其中J为叶子节点的个数。
针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值ctj如下:
这样我们就得到了本轮的决策树拟合函数如下:
从而本轮最终得到的强学习器的表达式如下:
GBDT实例
https://blog.csdn.net/zpalyq110/article/details/79527653
GBDT分类算法
https://www.cnblogs.com/pinard/p/6140514.html
GBDT 优缺点
GBDT主要的优点有:
1) 可以灵活处理各种类型的数据,包括连续值和离散值。
2) 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
4)可以用于分类、回归。
5)可以筛选/组合特征:计算所有非叶子节点在分裂时加权不纯度的减少,减少得越多,说明特征越重要
6)继承了决策树的优点(处理高维,缺失值不敏感)
GBDT的主要缺点有:
1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
GBDT面试问题收集
1. 什么是残差?
当前估计值与实际值之间的差值
2. GBDT为什么要拟合前面几轮的残差?
损失函数的负梯度方向在当前模型的值近似残差,每一轮迭代尽量去拟合残差,使得最终累加结果趋近真实值
3. GBDT通过什么方式减少误差 ?
不断迭代去拟合残差。
4. GBDT可以用决策分类树吗?
不可以,只能是CART回归树
5. 为什么只能用CART回归树?
源于GBDT的核心思想中需要将所有树的预测值累计,而分类树的结果显然是没办法累加的,比如男+男+女=到底是男是女,所以GBDT中的树都是回归树,不是分类树
6. GBDT为什么不能并行?
因为各分类器间相互依赖
7. GBDT如何正则化?
控制CART的复杂度(叶子节点数目,叶子节点最少样本数目),梯度提升迭代次数M,在CART回归树前面乘一个很小的衰减(Shrinkage)–v<0.1(较小的v意味着需要更多的迭代次数,减小树的影响,防止过拟合),采用随机梯度下降,CART回归树剪枝。
8. GBDT分裂规则或者CART回归树是如何选取特征的?
两次暴力遍历,遍历每个特征,对每个特征遍历其所有可能的切分点(中位数)->找到最优特征的最优切分点
PS:这里的最优衡量=平方差损失;而CART分类是GINI指数
9. 如何停止分裂?
1.叶子节点最小样本数;
2.树的深度或者最大叶子节点数;
3.最小损失函数满足某条件
10. GBDT的梯度体现在哪里?
构建CART时使用损失函数的负梯度保证沿着loss下降最快的方向拟合CART
11. GBDT为什么要用梯度下降?
负梯度是损失函数下降最快的方向,即为快速找到最小损失函数
12. GBDT如何做特征选择?
计算每棵树非叶子节点分裂后平方损失的减少,减少得越多说明特征越重要
13. 为什么GBDT的树深度较RF浅?
GBDT利用残差逼近不断拟合原数据,每一轮都需要保证一定的偏差,所以每棵决策树更浅
RF并行训练不同的分类器+输出为多数表决—> 因此需要每棵决策树尽可能去拟合样本—>基本不剪枝
14. GBDT如何加速训练?
预排序,预排序可以加速查找最佳分裂点;计算样本负梯度时并行??
15. GBDT哪些部分可以并行?
1.计算每个样本的负梯度;2.选取最佳分割点时;3.预测时将每个样本之前的值累加时。
16. GBDT参数设置?
迭代次数,树的深度/叶子节点个数,叶子节点包含的最少样本个数
17. GBDT的效果相比于传统的LR,SVM效果为什么好一些?
GBDT基于树模型,继承了树模型的优点 [对异常点鲁棒、不相关的特征(即非线性特征)干扰性低(LR需要加正则)、可以很好地处理缺失值,处理高维数据] ,同时又避免了决策树易出现过拟合的现象
18. GBDT为什么要归一化?
1.加快梯度下降收敛速度,避免震荡现象;2.提高精度
19. GBDT如何进行特征组合,从而解决LR处理非线性的问题?
对于输入X,记录其在GBDT中落入到每棵树叶子节点的编码(比如,有3个节点的树,落入到第2个节点,则编号=[0,1,0]),将其作为新的特征(新特征向量的长度等于GBDT模型里所有树包含的叶子结点数之和),加入到原始特征集,再用LR训练.
20. GBDT和Adaboost的区别?
1.GBDT每次迭代沿梯度下降最快方向学习去弥补模型的不足;Adaboost每次迭代提升错误样本权重来弥补模型的不足;
2.GBDT可选多种目标函数,当为均方误差时,正好为残差;Adaboost目标函数为指数损失函数
3.GBDT无更新样本分布,无分类器权重;Adaboost都有
4.GBDT输出为累加;Adaboost分类为多数表决,回归为取平均值
5.GBDT分类器只能是CART回归树;Adaboost可有其他类型分类器
21. GBDT和RF的区别?
1.RF基于bagging思想;GBDT基于boosting思想
2.RF的树可以是回归树或分类树;GBDT只能是回归树
3.RF树之间相互独立,可并行建树;GBDT树之间相互依赖,只能串行建树
4.RF最终结果是多数表决;GBDT是线性累加
5.RF通过减少模型方差提高性能,即树更深;GBDT通过减少模型偏差来提高性能,即树更浅
6.RF对异常值不敏感,源于多棵树表决;GBDT对异常值较敏感,当下的错误会延续到下一棵树
7.RF不需要特征归一化;GBDT需要对特征归一化
Ps:机器学习模型使用梯度下降法求最优解,那么往往需要归一化,否则很难收敛甚至不能收敛,因为特征量级不同,量级大的特征的步子大(即收敛速度快),早早到达最低点,需等待其他特征,即震荡现象。
转载自:
https://blog.csdn.net/UniqueenCT/article/details/88930042