首页 > 编程知识 正文

gbdt损失函数,gbdt算法流程

时间:2023-05-05 23:22:00 阅读:135199 作者:2751

GDT算法梯度引导诊断树

以梯度为优化目标,以boosting为手段,以基模型为决策树[这里使用回归树]算法[上述合并算法中的连接]

GBDT简单来说就是用多棵树连接起来,提高模型的效果

以下是学习深情的抽屉老师对GBDT算法的理解,文末是其他直接更详细的GBDT算法的实现

回归树的形状是CART即二叉树

可以使用回归树进行分类也可以进行回归

分类时希望尽量减小残差,减小损失函数,回归,使数据接近平均值

为了测量回归树的分类效果,使用在exp函数上变换为属于哪个类的概率得到损失函数的值

测量回归树的回归效果采用最小二乘法,实际值和平均值之差的平方和

GDT核心是GB算法,以损失函数最小为优化目标

f ) x )是我们制作的模型,l函数是损失函数,意味着什么样的模型可以使损失函数最小(数据被恰当地分配)

那么,对于GBDT算法来说,就是要找到合理的参数(模型的参数和每个模型的合理分配比例)。 因为这里使用了多棵树)。

因此,这里的反复是指在我们应该进行的梯度上接近最佳解

那么要衡量是否是合适的参数,就需要使用损失函数,损失函数有很多种

这里的y是实际值,f(x )是我们的预测值

选择损失函数时,值也不同

我们得到了目标函数:

这里的参数p是各树的分配比率,也可以认为是该树的学习率、步骤,sita是回归树的参数

拟合回归树的依据是残差。 残差使用了损失函数的一次微分,这里称为负斜率()

参数的重复和步骤的选择是对GB算法的参数选择,即希望GBDT算法效果好,两个参数都需要合理

GDT的工作过程如下(分类回归都是,但处理方式略有不同)。

以下通过回归任务和分类任务说明了各自的工作过程,在理解了例子之后,再回去看看这个数据表示的工作过程就明白了。

回归任务:

回归任务的结果,我们需要的是数值

第一个树使用实际值,即原始数据,然后生成相应的残差作为输出

之后的树将前面树的残差作为输入使用

如上所述,计算残差的方法比较简单,就是从平均值中减去。

在实际训练中,最初允许生成比较多的树,但之后如果发现残差没有太大变化,就可以中止训练(此时损失值被认为是最小的)。

(多数情况下,使用类似坡度的多棵树的小学习率来进行,不超过最佳解)

如何得到预测值,就是将实际数据作为第一个树的输入,得到对应的叶节点的平均值,再到每个特征对应的分支上得到对应的残差

预测值=平均残差

分类任务:

分类任务和逻辑回归有点相似。 得到的分类是某个类的概率值,也就是说有多少概率是这个类?

以三个分类问题为例

关于三分类问题,通过造三棵树,每棵树都表示是否属于那一类,

例如,第一棵树——是否属于第一种

第一棵树是第100棵树,第二棵树是第010棵树,第三棵树是第001棵树(类似OneHot Encoding ) )。

将某个条件作为分类(分割节点),看是否有可能属于第二类,按以上第一条的公式计算。 如果数据真的类似于第二类,那么f11接近0,f22接近1,f33接近0,就是说接近第二类,f22很大,很可能是第二类。

第一步是使用实际值计算残差。 后面树的输入都是前面树计算的残差

作为整体,通过某个分类作为节点得到残差越小越好,也就是说损失值越小

训练时,找到以残差变小的分类条件为节点构成的树

预测的时候是“在树上跑”。 看看他像哪棵树

以此为例,假设第一棵树使用花萼的长度作为基准。 以具有该特征的特征值例如5.1为分支条件,假设5.1的为1,=5.1的不是1,则6个样本中只有2个被分类为1,在用剩下的不是1的分支计算残差时,关注差分类的数据,首先属于该分类因此,前者为1(2号标签为1 )-1=0,其中数据确实全部为1,而后者为1 )总和为1,只有1个标签1-0=1,有4个0-0 )/5=0.2,即5个

因此,计算残差。 (残差的计算方法各不相同。 )

相对于1号((1-0.2 )2) 1残差较大,说明这样划分是不合理的) ) )。

剩下的(除了2号,他分为正确的(1-1)2=0) :(0-0.2 )2) (其他不是1,因为残差比较小,说明确实不像1 ) )

前面的1和0是他们的标签是否是第一类

之后,将残差相加就是现在按该标准分类的模型的残差

那么优化残差也就是优化了模型,把应该分在一起的放在一起,不是的就下一棵树

(说明:大家会发现计算残差的方式不同,其实选用不同的损失函数计算残差的方式也不一样,这里选的是简单方便理解的一种形式)

流程总结:
1.初始化残差,构成弱学习器1。(预测特征所对应得特征值求平均值)
2.计算残差(实际值 - 弱学习器1)。
3.寻找回归树的最佳划分点(阈值)。遍历每个特征的每个特征值作为阈值,通过阈值将数据二分,分别计算方差,找到使方差最小的特征值为最佳二分阈值
4.将二分后的残差值更新为实际值,计算实际值平均值 作为残差。构成弱学习器2。
5.合并强学习器。(弱学习器1 + 弱学习器2)
6.满足条件迭代停止
 

下面附上可视化网址:

http://arogozhnikov.github.io/2016/06/24/gradient_boosting_explained.html

http://arogozhnikov.github.io/2016/07/05/gradient_boosting_playground.html

 

参考学习文章:

更详细的用GBDT回归任务的解释:

https://blog.csdn.net/qq_22238533/article/details/79185969

更详细的用GBDT分类任务的解释:

https://blog.csdn.net/qq_22238533/article/details/79192579

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。