梯度提升决策树(GBDT)由于准确率高、训练快速等优点,被广泛应用到分类、回归合排序问题中。该算法是一种additive树模型,每棵树学习之前additive树模型的残差。许多研究者相继提出XGBoost、LightGBM等,又进一步提升了GBDT的性能。
以决策树为基函数的提升方法称为提升树,其决策树可以是分类树或者回归树。决策树模型可以表示为决策树的加法模型。
讯享网
其中,
表示决策树,
表示树的参数,
为树的个数。
针对不同问题的提升树算法主要区别在于损失函数的不同。对于回归问题,使用的是平方损失函数;对于分类问题,使用的是指数损失函数;对二分类问题,提升树算法只需将AdaBoost的基分类器设置为二分类树即可,此时的提升树算法是AdaBoost算法的一个特例。以下主要关注回归问题的提升树算法。
对于回归问题的提升树算法,每一步拟合的是前一步的残差,具体为什么拟合的是残差看下面推导:
其中 
回归问题中的提升树算法如下:
输入:训练数据集
其中\(x_{i} in X subseteq R^{n} <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%2C%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_08'></span></p><p>输出:提升树 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20f_%7BM%7D(x)%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_09'></span></p><ol><li>初始化<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20f_%7B0%7D(x)%3D0%20' alt='梯度下降决策树 梯度提升决策树简介_GBDT_10'></span></li><li>对<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20m%3D1%2C2%20%5Ccdots%20%5Cmathrm%7BM%7D%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_11'></span></li></ol><ol data-indent="1"><li>计算每个数据的残差:</li></ol><p><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20r_%7Bm%20i%7D%3Dy_%7Bi%7D-f_%7Bm-1%7D%5Cleft(x_%7Bi%7D%5Cright)%2C%20i%3D1%2C2%2C%20%5Cldots%20.%20N%20' alt='梯度下降决策树 梯度提升决策树简介_GBDT_12'></span></p><ol data-indent="1"><li>拟合残差学习一颗回归树,得到 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20T%5Cleft(x%20%3B%20%5Ctheta_%7Bm%7D%5Cright)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_13'></span></li><li>更新 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20T%5Cleft(x%20%3B%20%5Ctheta_%7Bm%7D%5Cright)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_13'></span></li></ol><ol><li>得到回归问题提升树<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20f_%7BM%7D(x)%3D%5Csum_%7Bm%3D1%7D%5E%7BM%7D%20T%5Cleft(x%20%3B%20%5Ctheta_%7Bm%7D%5Cright)%20' alt='梯度下降决策树 梯度提升决策树简介_GBDT_15'></span></li></ol><p>得到一颗提升树后,可以对输入数据进行预测。假设得到两棵树,下图给出预测过程:</p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog//0_cd9daf18277.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='梯度下降决策树 梯度提升决策树简介_GBDT_16' style="width: 871px; visibility: visible;"></p><p>梯度提升的思想借鉴与<strong>梯度下降法</strong>,回顾梯度下降法,对于优化问题:<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%5Cmin%20f(w)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_17'></span><br> 使用梯度下降法求解的基本步骤:</p><ol><li>随机选择一个初始点 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20w_0%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_18'></span></li><li>重复以下过程: </li></ol><ol data-indent="1"><li>求负梯度:<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20g_%7Bi%7D%3D-%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20w%7D%20f%5Cleft.(w)%5Cright%7C_%7Bw_%7Bi%7D%7D%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_19'></span></li><li>选择步长 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20%5Calpha%20' alt='梯度下降决策树 梯度提升决策树简介_GBDT_20'></span></li><li>更新参数:<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20%20%20w_%7Bi%2B1%7D%3Dw_%7Bi%7D%2B%5Calpha%20*%20g_%7Bi%7D%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_21'></span></li></ol><ol start="3"><li>直到满足终止条件</li></ol><p>由以上过程可以看出,对于最终的最优解<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20w%5E%7B*%7D%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_22'></span>,是由初始值 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20w_0%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_23'></span> 经过M次迭代后得到的。设 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20w_0%20%3D%20d_0%20' alt='梯度下降决策树 梯度提升决策树简介_提升树_24'></span>,则 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20w%5E%7B*%7D%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_22'></span> 为:<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20w%5E%7B*%7D%3D%5Csum_%7Bi%3D0%7D%5E%7BM%7D%20%5Calpha_%7Bi%7D%20*%20g_%7Bi%7D%20' alt='梯度下降决策树 梯度提升决策树简介_提升树_26'></span><br> 在<strong>函数空间</strong>中,我们也可以借鉴梯度下降的思想,进行最优函数的搜索。关键是<strong>利用损失函数的负梯度在当前模型的值</strong><br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20-%5Cleft%5B%5Cfrac%7B%5Cpartial%20L(y%2C%20F(X))%7D%7B%5Cpartial%20F(X)%7D%5Cright%5D_%7BF(X)%3DF_%7Bm-1%7D(X)%7D%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_27'></span><br><strong>作为回归问题提升树算法中的残差的近似值,拟合一个回归树。</strong></p><p>对于模型的损失函数<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20L(y%2C%20F(X))%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_28'></span>,为了能够求解出最优的函数<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20F%5E%7B*%7D(X)%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_29'></span>,首先设置初始值为:<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20F_%7B0%7D(X)%3Df_%7B0%7D(x)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_30'></span><br> 以函数 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20F(X)%20' alt='梯度下降决策树 梯度提升决策树简介_GBDT_31'></span> 为一个整体,与梯度下降法的更新过程一致,假设经过M代,得到最优的函数<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20F%5E%7B*%7D(X)%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_29'></span>为:<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20F%5E%7B*%7D(X)%3D%5Csum_%7Bi%3D0%7D%5E%7BM%7D%20f_%7Bi%7D(x)%20' alt='梯度下降决策树 梯度提升决策树简介_提升树_33'></span><br> 其中<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20f_%7Bi%7D(x)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_34'></span> 为:<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20f_%7Bi%7D(x)%3D-%5Calpha_%7Bi%7D%20g_%7Bi%7D(X)%3D-%5Calpha_%7Bi%7D%20*%5Cleft%5B%5Cfrac%7B%5Cpartial%20L(y%2C%20F(X))%7D%7B%5Cpartial%20F(X)%7D%5Cright%5D_%7BF(X)%3DF_%7Bm-1%7D(X)%7D%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_35'></span><br> 可以看到这里<strong>梯度变量是一个函数</strong>,是在函数空间上求解;而以往的梯度下降是在N维的参数空间负梯度方向,变量是参数。在梯度提升中,这里变量是函数,通过当前函数的负梯度方向更新函数以修正模型,最后累加的模型近似最优函数。</p><blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;"><p>GBDT的负梯度为什么近似于提升树的残差</p></blockquote><p>对于损失函数 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20L%5Cleft(y%2C%20f_%7Bm-1%7D%2BT%5Cleft(x_%7Bi%7D%20%3B%20%5CTheta_%7Bm%7D%5Cright)%5Cright)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_36'></span> ,我们将 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20f(x)%20' alt='梯度下降决策树 梯度提升决策树简介_机器学习_37'></span> 而不是 <span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%5Ctheta%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_38'></span> 作为自变量。根据梯度下降定义,可以得到损失函数参数的更新公式:<br><span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20%20f_%7Bm%7D%3Df_%7Bm-1%7D-%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20f%7D%20' alt='梯度下降决策树 梯度提升决策树简介_GBDT_39'></span><br> 同时提升树的定义为:<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20f_%7Bm%7D%3Df_%7Bm-1%7D%2BT%5Cleft(x_%7Bi%7D%20%3B%20%5CTheta_%7Bm%7D%5Cright)%20' alt='梯度下降决策树 梯度提升决策树简介_梯度提升_40'></span>,决策树拟合的值等于负梯度,为残差。</p><p>了解了GBDT的两个部分(提升树和梯度提升)后,我们以回归树为例,基模型为CART回归树,得到GBDT的实现思路如下</p><p>输入:训练数据集<span><img src='https://math-api.51cto.com/?from=%20%20%20%20%20%20%20%20T%3D%5Cleft%5C%7B%5Cleft(x_%7B1%7D%2C%20y_%7B1%7D%5Cright)%2C%5Cleft(x_%7B2%7D%2C%20y_%7B2%7D%5Cright)%2C%20%5Cldots%20.%2C%5Cleft(x_%7BN%7D%2C%20y_%7BN%7D%5Cright)%5Cright%5C%7D%20' alt='梯度下降决策树 梯度提升决策树简介_梯度下降决策树_07'></span>,其中其中\)x_{i} in X subseteq R^{n} 
输出:提升树 
- 初始化

- 对

- 计算每个数据:

- 拟合
学习一棵回归树,得到
。更详细一点,得到第
棵树的叶节点区域
,即一颗由 
- 计算每个区域的最优输出:

- 更新

- 得到回归问题梯度提升树

算法步骤1得到使损失函数最小的常数估计值,是一个只有根节点的树。在步骤2a计算损失函数的负梯度在当前模型的值,作为残差估计。在步骤2b估计回归树的叶节点区域,来拟合残差的近似值。第2c步利用线性搜索估计叶节点区域的值,使损失函数极小化。第2d步更新回归树。第3步得到输出的最终模型。
优点
- 预测阶段的计算速度快,树与树之间可并行化计算
- 在分布稠密的数据集上,泛化能力和表达能力都很好
- 采用决策树作为弱分类器使GBDT具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的处理如归一化等
缺点
- GBDT在高维稀疏的数据集上,表现不如SVM或者神经网络
- GBDT在处理文本分类特征问题上,不如处理数值特征
- 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度
GBDT的python源码实现

- 2-10-1 梯度提升和梯度下降有什么区别和联系?
两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化的形式表示,从而模型的更新等价于参数的更新。
而在梯度提升中,模型并不需要参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。
- 2-10-2 你是如何理解Boosting和Bagging?他们有什么异同?
Bagging通过模型集成降低方差,提高弱分类器的性能。
Boosting通过模型集成降低偏差,提高弱分类器的性能。
- 2-10-3 讲解GBDT的训练过程?
用每个样本的残差训练下一棵树,直到残差收敛到某个阈值以下,或者树的总数达到某个上限为止。
- 2-10-4 你觉得GBDT训练过程中哪些环节可以并行提升训练效率?
A. 计算每个样本的负梯度
B. 分裂挑选**特征及其分割点时,对特征计算相应的误差及均值时
C. 更新每个样本的负梯度时
D. 最后预测过程中,每个样本将之前的所有树的结果累加的时候
- 2-10-5 GBDT的优点和局限性有哪些?
优点
(1)预测阶段计算速度块,树与树之间可并行化计算
(2)在分布稠密的数据集上,泛化能力和表达能力都很好

(3)采用决策树作为弱分类器使得GBDT模型具有较好的可解释性和鲁棒性,能够自动发现特征间的高阶关系,并且不需要对数据进行特殊的预处理如归一化等
缺点
(1)GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络
(2)GBDT在处理文本分类特征问题上,优势不如在处理数值特征时明显
(3)训练过程需要串行训练,只能在决策树内容采用一些局部并行手段提高训练速度
- 2-10-6 GBDT是否对异常值敏感,为什么?
基于残差的GDBT对异常值敏感。对于回归类的问题,如果采用平方损失函数。当出现异常值时,后续模型会对异常值关注过多。我们来看一个例子:

很明显后续的模型会对第4个值关注过多,这不是一种好的现象,所以一般回归类的损失函数会用绝对损失或者huber损失函数来代替平方损失函数:

- 2-10-7 如何防止GBDT过拟合?
- 2-10-8 在训练过程中哪些参数对模型效果影响比较大?这些参数造成影响是什么?
- 李航《统计学习方法》
- GBDT算法原理深入解析
- 机器学习-一文理解GBDT的原理-
- http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf
- GBDT的python源码实现
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170225.html