提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法。以决策树为基函数的提升方法称为提升树。提升树模型可以表示为决策树的加法模型:

GBDT - 图1

其中,GBDT - 图2表示决策树;GBDT - 图3为决策树的参数;GBDT - 图4为树的个数。

提升树算法采用前向分步算法。首先确定初始提升树GBDT - 图5,第GBDT - 图6步的模型是

GBDT - 图7

其中,GBDT - 图8为当前模型,通过经验风险极小化确定下一棵决策树的参数GBDT - 图9

GBDT - 图10

下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括平方误差损失函数的回归问题,用指数函数的分类问题,以及用一般损失函数的一般决策问题。

分类问题

将GBDT应用于回归问题,相对来说比较容易理解。因为回归问题的损失函数一般为平方差损失函数,这时的残差,恰好等于预测值与实际值之间的差值。每次拿一棵决策树去拟合这个差值,使得残差越来越小,这个过程还是比较intuitive的。而将GBDT用于分类问题,则显得不那么显而易见。

在说明分类之前,我们先介绍一种损失函数。与常见的直接求预测与真实值的偏差不同,这种损失函数的目的是最大化预测值为真实值的概率。这种损失函数叫做对数损失函数(Log-Likehood Loss),定义如下

GBDT - 图11

对于二项分布,GBDT - 图12,我们定义预测概率为GBDT - 图13,即二项分布的概率,可得

GBDT - 图14

即,可以合并写成

GBDT - 图15

GBDT - 图16

对于GBDT - 图17GBDT - 图18的关系,我们定义为

GBDT - 图19

二分类

类似于逻辑回归、FM模型用于分类问题,其实是在用一个线性模型或者包含交叉项的非线性模型,去拟合所谓的对数几率GBDT - 图20。而GBDT也是一样,只是用一系列的梯度提升树去拟合这个对数几率,实际上最终得到的是一系列CART回归树。其分类模型可以表达为:

GBDT - 图21

其中,GBDT - 图22就是学习到的决策树。

清楚了这一点之后,我们便可以参考逻辑回归,单样本GBDT - 图23的损失函数可以表达为交叉熵:

GBDT - 图24

假设第GBDT - 图25步迭代之后当前学习器为GBDT - 图26,将GBDT - 图27的表达式带入之后,损失函数写为:

GBDT - 图28

可以求得损失函数相对于当前学习器的负梯度为:

GBDT - 图29

可以看到,同回归问题很类似,下一棵决策树的训练样本为:GBDT - 图30,其所需要拟合的残差为真实标签与预测概率之差。于是便有下面GBDT应用于二分类的算法:

  • GBDT - 图31,其中GBDT - 图32是训练样本中GBDT - 图33的比例,利用先验信息来初始化学习器
  • GBDT - 图34
    • 计算GBDT - 图35,并使用训练集GBDT - 图36训练一棵回归树GBDT - 图37,其中GBDT - 图38
    • 通过最小化损失函数找树的最优权重:GBDT - 图39
    • 考虑shrinkage,可得这一轮迭代之后的学习器GBDT - 图40GBDT - 图41为学习率
  • 得到最终学习器:GBDT - 图42

多分类

模仿上面两类分类的损失函数,我们能够将GBDT - 图43类分类的损失函数定义为

GBDT - 图44

其中,GBDT - 图45,且将GBDT - 图46GBDT - 图47关系定义为

GBDT - 图48

或者,换一种表达方式

GBDT - 图49

即,对于多分类问题,则需要考虑以下softmax模型:

GBDT - 图50

其中GBDT - 图51GBDT - 图52个不同的tree ensemble。每一轮的训练实际上是训练了GBDT - 图53棵树去拟合softmax的每一个分支模型的负梯度。可见,这GBDT - 图54棵树同样是拟合了样本的真实标签与预测概率之差,与二分类的过程非常类似。

回归问题

已知一个训练数据集GBDT - 图55GBDT - 图56为输入空间,GBDT - 图57GBDT - 图58为输出空间。如果将输入空间GBDT - 图59划分为GBDT - 图60个互不相交的区域GBDT - 图61,并且在每个区域上确定输出的常量GBDT - 图62,那么树可表示为

GBDT - 图63

其中,参数GBDT - 图64表示树的区域划分和各区域上的常数。GBDT - 图65是回归树的复杂度即叶结点个数。

回归问题提升树使用以下前向分布算法:

  • GBDT - 图66
  • GBDT - 图67
  • GBDT - 图68

在前向分步算法的第GBDT - 图69步,给定当前模型GBDT - 图70,需求解

GBDT - 图71

得到GBDT - 图72,即第GBDT - 图73颗树的参数。当采用平方误差损失函数时,

GBDT - 图74

其损失变为

GBDT - 图75

这里,GBDT - 图76即当前模型拟合数据的残差。所以,对回归问题的提升树算法来说,只需简单地拟合当前模型的残差。

回归问题的提升树算法

输入:训练数据集GBDT - 图77

输出:提升树GBDT - 图78

(1)初始化GBDT - 图79

(2)对GBDT - 图80

  • (a)按GBDT - 图81计算残差
  • (b)拟合残差GBDT - 图82学习一个回归树,得到GBDT - 图83
  • (c)更新GBDT - 图84

(3)得到回归提升树:GBDT - 图85

举例如下

x 1 2 3 4 5 6 7 8 9 10
y 5.56 5.70 5.91 6.40 6.80 7.05 8.90 8.70 9.00 9.05

对于GBDT - 图86

GBDT - 图87即回归树GBDT - 图88,首先通过以下优化问题:

GBDT - 图89

求解训练数据的切分点GBDT - 图90

GBDT - 图91

容易求得在GBDT - 图92GBDT - 图93内部使平方损失误差达到最小值的GBDT - 图94GBDT - 图95

GBDT - 图96

这里GBDT - 图97GBDT - 图98GBDT - 图99GBDT - 图100的样本点数

求训练数据的切分点。根据所给数据,考虑如下切分点:1.5,2.5,3.5,4.5,6.5,7.5,8.5,9.5

对各切分点,求相应的GBDT - 图101GBDT - 图102

例如,当GBDT - 图103时,GBDT - 图104GBDT - 图105GBDT - 图106GBDT - 图107

GBDT - 图108

现将GBDT - 图109GBDT - 图110的计算结果列表如下

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
m(s) 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74

由上表可知,当GBDT - 图111GBDT - 图112达到最小值,此时GBDT - 图113GBDT - 图114GBDT - 图115GBDT - 图116,所以回归树GBDT - 图117

GBDT - 图118

GBDT - 图119

GBDT - 图120拟合训练数据的残差GBDT - 图121

x 1 2 3 4 5 6 7 8 9 10
r_{2i} -0.68 -0.54 -0.33 0.16 0.56 0.81 -0.01 -0.21 0.09 0.14

GBDT - 图122拟合训练数据的平均损失误差:GBDT - 图123

对于GBDT - 图124

GBDT - 图125,方法与求GBDT - 图126一样,只是拟合的数据为上一步的残差。可以得到

GBDT - 图127

GBDT - 图128

GBDT - 图129拟合训练数据的平方损失误差是:GBDT - 图130

对于GBDT - 图131

继续按上述方法计算,直至求得拟合训练数据的平方误差到可接受范围。

梯度提升

提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,梯度提升算法利用最速下降法的近似方法,其核心是利用损失函数的负梯度在当前模型的值

GBDT - 图132

作为回归问题提升树算法中的残差的近似值,拟合一个回归树。

输入:训练数据集GBDT - 图133,损失函数GBDT - 图134

输出:回归树GBDT - 图135

(1)初始化:GBDT - 图136

(2)对GBDT - 图137

  • (a)对GBDT - 图138,计算
  • GBDT - 图139
  • (b)对GBDT - 图140拟合一个回归树,得到第GBDT - 图141棵树的叶结点区域GBDT - 图142
  • (c)对GBDT - 图143,计算
  • GBDT - 图144
  • (d)更新GBDT - 图145

(3)得到回归树:GBDT - 图146

算法第(1)步初始化,估计使损失函数极小化的常数值,它是只有一个根节点的数。

第(2a)步计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值。

第(2b)步估计回归树叶结点区域,以拟合残差的近似值。

第(2c)步利用线性搜索估计叶结点区域的值,是损失函数极小化。

第(2d)步更新回归树

第(3)步得到输出的最终模型。

Source

https://zhuanlan.zhihu.com/p/46445201
https://zhuanlan.zhihu.com/p/25257856