GDBT--理解梯度提升原理篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014296502/article/details/80501225

以决策树为基函数的提升方法称为提升树,提升树的模型可以表示为决策树的加法模型,基函数一般是cart回归树,GDBT是属于boosting的一员,与之对应的还有bagging,对于bagging中代表算法有随机森林,boosting中代表的有adaboost、xgboost等,目前数据挖掘用的比较多的还是boosting。本文目的是介绍学习boosting家族中的GDBT,所有对于bagging与boosting的区别就不深入介绍。GDBT的模型如下:

fM(x)=m=1MT(x;Qm)

在介绍这个算法之前,先深入理解一下梯度的相关问题与应用

什么是梯度

二维的梯度是导数,多维的梯度是不同维度的导数的向量。简单理解:y=x2 导数 y=2x,函数x2+y2+z2=1,梯度为(2x,2y,2z)

什么是方向导数

想象一下在三维空间中有一个曲面F(x,y,z),取任意一点,从点A沿着球面出发有多少方向可以走呢?答案是无数条,它可以沿着x轴走,可以沿着y轴走,可以沿着z轴走,更可以是以(x,y,z)为基底的任意方向走。


这里写图片描述

假设终点为球面上一点B,向量为AB。函数F(A)F(B),是不是存在了变化?函数值要么变大或者变小,也就是存在变化量,假设上图的性质是连续可导的,那么一定存在导数:F=F(B)F(A)BA,如果你忘记了导数所代表的含义,没关系(因为理解导数确实很重要),带你重复复习一下。以函数y=x为例吧,它的导数为1,这个导数代表了x方向每增加一个单位,y就会增长1。导数正是反映了函数的变化。与高中物理中的加速度有点像,加速度反映了速度在单位时间内的变化量。如果还是懵懵懂懂,请记住一点,导数是反映了函数的变化程度大小。也就是说,在三维曲面中,对于不确定的点B,向量AB可以是任何方向,函数可以在向量AB的方向上,任意变化,所以就存在了不同方向的导数,也就是方向导数。
F=F(x+x,y+y,z+z)F(x,y,z)|(x,y,z)|

大白话解释这种数学定义可能有些童鞋适应不了,不说了上定义(来自百度百科):

为什么负梯度方向是函数下降最快方向

把函数假设为二维函数,更容易理解点。随手粗糙的画了一张图。


这里写图片描述

从点A引一条直线,直线长度为1,向量AB方向,B点对应的y值为1,向量AC方向,点C对应的y值明显小于1。二维场景,同样适用高维情景。上面推导出了方向导数的定义fl,方向导数正是反映函数的变化,如果求出某个方向的的方向导数模最大,不就说明变化最大吗?方向导数还有另外一种写法

fl=(fx,fy,fz)(cosa,cosβ,cosy)
|fl|=|(fx,fy,fz)||(cosa,cosβ,cosy)|cosθ
因为|(cosa,cosβ,cosy)|=1,所以当 cosθ=1时候,|fl|最大,也就是与(fx,fy,fz)梯度方向一致的时候最大,反之负梯度方向下降最大。

损失函数L(y,yhat=f(x,y,z))可以通过梯度下降的方式找到最小值,通过找到负梯度方向,根据一定的步长变化x,y,z。GDBT的思想就是直接把f(x,y,z)看做变量,根据一定的步长变化f(x,y,z)

L(y,yhat=fm1(x,y,z)+learnrate(Lfm1))

梯度下降,不停的优化损失函数L的同时,函数fm(x,y,z)也不断的更新迭代,迭代到一定的次数损失达到预期值,就得到了一个判别函数f(x,y,z)如果函数f是树的话,就称为梯度提升树。
fm(x,y,z)=fm1(x,y,z)+learnrate(Lfm1)

现在理解了为什么梯度提升树是集合树加权累加求和的结果了没? GDBT基函数都是cart树,通过一连串的cart树加权求和得到预测或者分类结果,下一篇文章将会以实例详细介绍GDBT的分类与预测的运算过程,帮你彻底搞懂这个666的算法。


这里写图片描述

展开阅读全文

没有更多推荐了,返回首页