前言
前面我们介绍了使用 Boosting 思想的 AdaBoost ,它是通过前一轮决策的结果来给样本设置权重,决策正确的权重减小,决策错误的权重增加;然后将加权后的数据集输入下一个弱学习器训练,直到达到训练停止条件。
Boosting 思想的GBDT、XGBoost,在目前的竞赛和工业界中使用非常频繁,能够有效的应用到分类、回归,更是因为近几年被应用于构建搜索排序的机器学习模型而引起广泛关注。虽然用起来不难,但是要想完整理解它的原理及推导不是那么容易,本篇尽可能通过简单的方式来介绍。
一、提升树模型
提升树是以决策树为基分类器的提升方法,通常使用CART树。针对不同问题的提升树学习算法,主要区别在于使用的损失函数不同。
1)分类问题:指数损失函数。可以使用CART分类树作为AdaBoost的基分类器,此时为分类提升树。
2)回归问题:平方误差损失函数。
3)决策问题:一般损失函数。
1、提升树算法
提升树采用线性模型+前向分步算法+CART树(基函数)。提升树的加法模型可表示为:(此时树前面并没有权重!!下面有分析)

1)基函数是分类树(二叉分类树)
对于基函数是分类树时,我们使用指数损失函数,此时正是AdaBoost算法的特殊情况,即将AdaBoost算法中的基分类器使用分类树即可。
2)基函数是回归树
若基函数是回归树,则使用平方误差损失函数。
我们将回归树的输入空间划分为R1,R2,…,RJ个区域,每个区域的输出分别为:Cj,则回归树可以表示为:

前向分步算法第m步的得到的模型为:

平方误差损失函数为:

设:
,rm即为当前模型拟合数据的残差。对回归问题的提升树算法来说,只需简单地拟合当前模型的残差。
因为需要用到上一步的分类器,故而在每轮都需要计算残差,然后遍历可能的切分点,找出平方损失函数最小的切分点将输入划分为两个子集,然后依次类推,直到不能继续划分。
算法过程:
训练集为:T={(x1,y1),(x2,y2),…,(xn,yn)}。
1)初始化:f0(x)=0
2)下面共进行M轮的迭代,对于第m轮的迭代过程如下:(m=1,2,…,M)
A)遍历每个特征的每个可能取值,计算残差:

B)对于特征的每个可能取值,选择平方损失函数
最小的切分点,得到树
C)更新
3)最终得到回归问题提升树:
在上面的算法中,并没有在每个基分类器前面加上权值,此算法通过每次减小残差的方式来减小每轮所产生的模型的损失函数,通过这种方式,逐步减小残差值来使得损失函数减小,这样的话最初的模型的损失函数应该最大,那么在最终的线性组合中应该减小它的权重,但是上述算法并没有这样做,而是将每轮产生的模型通过均值或投票的方式来产生最终的结果??
其实,在每轮的迭代过程中生成的
并不是一个独立的分类器,它只是对残差的拟合,只有将它添加到前一轮的累加模型中才会对训练集有好的分类或回归效果。
3、损失函数最小化方法
对于最开始提到的三种损失函数,其最小化方法各有不同。当损失函数为下面几种函数时,最小化损失函数的方法如下:
1)指数函数
当损失函数为指数函数时,比如AdaBoost算法的损失函数是指数函数,这

最低0.47元/天 解锁文章
1272

被折叠的 条评论
为什么被折叠?



