Press "Enter" to skip to content

GBDT如何解决二分类问题

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

丹丹:梯度提升树原理及其公式推导 中提到,解决二分类问题的提升树使用的是分类树,而GBDT内部使用的是回归树,那幺GBDT如何解决二分类问题呢?

 

面临的问题

 

GBDT使用的分类树是回归树,其加法模型无法直接输出类别或者概率分布

 

解决方案

 

参考逻辑回归做二分类的做法,输出值通过sigmoid映射到0-1之间作为概率值

 

(1)

 

因此,通过sigmoid函数,可以将加法模型f(x)映射到0~1概率空间

 

(2)

 

损失函数、负梯度的数学推导

 

模型

 

GBDT采用的是加法模型,其形式如下:

 

(3)

 

(4)

 

损失函数

 

y与 的损失函数 表示为:

 

(5)

 

其推导流程如下:

 

(6)

 

前项分布+梯度提升

 

前面梯度提升树原理介绍的时候明确整个目标是使得每一次的训练都能减少整体的损失,即:

 

(7)

 

通过一阶泰勒展开得到,当每一棵树拟合前面模型的负梯度时能满足上述条件,这样每一棵树的训练样本就是以负梯度作为目标进行拟合的,整个梯度提升的流程如下:

 

1.计算当前损失函数的负梯度表达式

 

对公式(5)进行求导

 

(8)

 

2.构造新的训练样本集

 

将当前模型 带入公式(8)的负梯度表达式求得当前样本的负梯度构造新的训练样本:

 

(9)

 

所以每个样本的 为:

 

(10)

 

最后得到第m轮的训练样本为

 

3. 让当前回归树拟合前两步得到的样本,得到

 

回归树 的构造

 

树的深度如何决定(自定义)

 

 

    1. 确定叶子结点个数或者树的深度

 

    1. 子节点包含的样本数

 

    1. 给定精度

 

    1. ……

 

 

划分节点的选取

 

选取叶子节点及其划分值

划分节点的方式是使得划分后的总体损失最小,从下面叶子结点值 的确定可以看到,我们确定叶 用的损失函数与之前单棵回归树用的不同,单棵回归树的损失函数是均方误差,而我们的损失函数是 ,但是两种损失划分节点是一致的,因此我们可以先根据均方误差划分节点确定整棵树的形状,再根据损失确定叶子结点的最终值。

 

叶子结点值 的确定

 

根据之前丹丹:分类树和回归树章节内容的回归树推导可以看到,当损失函数定义为均方误差 时,推导出叶子结点值为 ,即落在该叶子结点的样本的均值,不同的损失函数决定了最终叶子结点的值。

 

从均方误差到模型损失函数

而在GBDT解决二分类问题中,前面我们已经得到损失函数为公式(5) ,带入得到叶子结点 下的样本的损失函数为

 

(11)

 

基于此损失函数的叶子结点值 的计算公式如下

 

(12)

 

将公式11带入到公式12,并按照公式(8)的求导流程求导得到

 

(13)

 

上述公式无法直接求得 ,解决方案是通过泰勒二项展开处理公式(11)去求得近似解,接下来详细展开讲解,对 进行二阶泰勒展开 得到:

 

(14)

 

其中

 

 

 

将上式带入公式14得到

 

(15)

 

带入公式(12)得到

 

(16)

 

式中只有一个未知变量 ,且是一个一元二次方程, ,开口向上,有最小值当且仅当

 

(17)

 

流程总结

 

 

    1. 通过均方误差损失函数构造整棵树

 

    1. 用目标误差损失函数计算节点值

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注