ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GBDT(2)-梯度提升决策树(Gradient Boosting Decision Tree)

2020-03-13 15:38:48  阅读:270  来源: 互联网

标签:误差 函数 Gradient 梯度 Decision Tree 损失 GBDT 提升


前面的博文中我们一起看了提升树,这一篇中我们正式来理解GBDT。理解GBDT算法关键是GB,也就是梯度提升(Gradient Boosting),那么这个和我们之前的提升树又有什么不一样呢?

梯度提升

之前介绍的提升树是用加法模型和向前分步算法实现学习的优化过程,其中误差函数也就是损失函数一般是平方损失和指数损失函数的时候,每一步优化比较简单,但是对于一般的损失函数来说,每一步优化就并不是那么容易。针对这个问题,梯度提升算法横空出世,其关键就是利用损失函数的负梯度在当前模型中的值:

首先之前讲的提升树和这里的GBDT其实是没有很大区别,GBDT也是加法模型也是向前分步的优化过程,如何加入下一棵树,都是建立在最小化误差的基础,GBDT不过是在最小化误差的的时候换了一个损失函数,它不是计算当前模型拟合训练样本的误差,而是计算这个误差函数的负梯度。比如在回归任务中,我们一般使用平方误差作为损失函数:L(y,f(x_i)) = \frac{1}{2}(y-f(x_i))^2,这个时候我们对f(x_i)求导数,得到:\frac{\partial L(y,f(x_i))}{\partial f(x_i)}=(y-f(x_i))\cdot (-1),这个导数应该是会求的,因为要求负梯度,所以取相反数得到:(-1)\frac{\partial L(y,f(x_i))}{\partial f(x_i)}=y-f(x_i),这个式子是不是有点眼熟,最后的负梯度就是我们的残差。这是对于平方损失函数来说,对于一般的损失函数来说,这个式子就是残差的近似值。

我们看看梯度提升算法的步骤。

输入:训练数据集T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}y_i\in R,损失函数L(y,f(x))

输出:回归树\widehat{f}(x)

1. 初始化:

估计使损失函数极小化的常数值,它是只有一个根节点的树。 

2. 计算:

其中m=1,2,...,M表示总共树的棵数,i=1,2,...,N,表示样本个数。计算上面这个式子,我们可以得到每个样本的误差,得到残差表,这个可以看上一篇博文(提升树)中的示例,然后将这些残差数据作为训练集,拟合一个回归树(CART),得到第m棵回归树的叶子节点区域R_{mj},关于CART树的算法可以看看李航的《统计学习方法》,个人觉得他的这本书讲的很透彻,我在百度云中分享了这本书,有兴趣的可以看看链接: https://pan.baidu.com/s/1T4NXx2e_JtSICh9rcmEoVg 提取码: ijsm,将这本书和西瓜书结合一起看。

3. 对于j=1,2,...,J,计算:

上面是最小化每个类别样本的误差。

4. 更新:

5. 最后得到回归树:

个人觉得梯度提升树(GBDT)和前面博客中说到的一般的提升树真的没什么太大区别,就是在计算残差的时候,那个损失函数是计算其负梯度,从这些步骤来看,其他没有什么很大的不一样。 

 

标签:误差,函数,Gradient,梯度,Decision,Tree,损失,GBDT,提升
来源: https://blog.csdn.net/kidchildcsdn/article/details/104840748

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有