一、模型介绍
提升树模型是以分类树或回归树为基本分类器的提升方法,其采用加法模型和前向分布算法。基于处理过程中所使用的损失函数的不同,我们有用平方误差损失函数的回归问题,使用指数损失函数的分类问题,以及一般损失函数的一般决策问题。
GDBT(Gradient Descent Boosting Tree),梯度提升树,是以回归树为基本分类器的提升方法。是一种基于残差的处理方法,常用来处理回归类问题。
提升树模型可以表示为决策树的加法模型:
fM(x)=M∑m=1T(x;Θm)其中,T(x;Θm) 表示第m颗决策树,Θm 表示决策树的参数,M 表示树的个数。
在GDBT中采用的损失函数为平方差损失函数:
L(y,f(x))=(y−f(x))21、算法思想
GBDT的前向分布算法为:
f0(x)=0fm(x)=fm−1(x)+T(x;Θm),m=1,2,...,MfM(x)=M∑m=1T(x;Θm)在前向分布算法的第m步,给定当前模型fm−1(X) ,我们要求解:
Θm=argminΘN∑i=1L(yi,fm−1(xi)+T(xi;Θm))当我们采用平方误差损失函数是,我们要求求解的目标为:
L(yi,fm−1(xi)+T(xi;Θm))=[y−fm−1(x)−T(x;Θm)]2=[r−T(x;Θm)]2这里,我们记r=y−fm−1(x) ,就是当前模型拟合数据的残差,所以,对于回归问题的提升树算法来说,我们只需要简单的拟合当前模型的残差就行。那么回归问题的提升树算法叙述如下:
首先初始化f0(x)=0 ,初始化第一个残差数据集ri=yi−f0(xi) (原数据集),根据原数据建立一颗回归树T(x;Θ0) ,根据回归树得到的结果,再次计算残差,将这次得到的残差作为下一颗回归树的数据集,得到回归树T(x;Θm) ,并且更新fm(x)=fm−1(x)+T(x;Θm) ,不断地迭代,我们就能够得到最终的集成模型:
2、GDBT对提升树的优化
上面我们所提到的其实只是提升树在回归问题的求解过程而已,并不是真正的GDBT,对于提升树而言,当损失函数是平方损失或指数损失函数时,每一步的优化是很简单的,但是对于一般的损失函数而言,他的优化过程就比较难,我们很难找到最优的Θm ,此时,我们就是用梯度下降的近似方法来近似其最优解。修改后的算法过程如下:
首先初始化f0(x)=c ,即初始化它为能够使损失函数最小的一个常数值。第二步,将损失函数的负梯度作为当前模型的值,将它作为残差的估计,拟合一个树。得到这棵树的叶节点区域Rmj ,之后利用线性搜索来估计叶节点区域的值cmj,使损失函数最小化(这一步的意思就是,给叶子节点分配合适的值,使得损失函数最小化)。然后更新回归树fm(x) ,不断地迭代,直到输出最终模型。
3、示例
我们所做的工作是年龄预测,所用到的用户特征包括购物金额、上网时长、上网时间、百度提问等等。 为了简单起见,我们的训练集只有四个人,A,B,C,D。他们的年龄分别是14,16,24,26。以这个为例,我们来看一下GDBT是如何运作的。
第一步:我们使用原始数据建立一个回归树
我们可以根据回归的结果,计算这A、B、C、D的残差,分别是14-15=-1、16-15=1、24-25=-1、26-25=1,将残差作为训练集训练下一颗回归树
根据回归的结果,计算这A、B、C、D的残差,发现都是0,我们可以退出迭代了。
在这一个提升书的构建过程中,我们只迭代了两次,使用了两个树,得到了我们的集成模型,下面我们看看,我们如何根绝模型得到结果。
将A作为输入,模型的第一棵树输出15,然后模型的第二棵树输出-1。最后对A的预测结果为15+(-1)=14。因此我们的模型对A的预测结果为14。
至此,GBDT终
4、注意
当我们直接使用残差来拟合回归树时,很容易造成过拟合。为了减少过拟合的危险,我们会给残差加一个学习率α ,即在构建一个新的决策树时,我们使用的训练集为α·r ,通过这样多次迭代的方式,来最终生成我们的集成模型
参考链接
- 李航老师的《统计机器学习》
- GBDT详解
来做第一个留言的人吧!