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

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

fM(x)=m=1MT(x;Qm) f M ( x ) = ∑ m = 1 M T ( x ; Q m )

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

什么是梯度

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

什么是方向导数

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


这里写图片描述

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

fl=(fx,fy,fz)(cosa,cosβ,cosy) ⅁ f ⅁ l = ( ⅁ f ⅁ x , ⅁ f ⅁ y , ⅁ f ⅁ z ) ∗ ( c o s a , c o s β , c o s y )
|fl|=|(fx,fy,fz)||(cosa,cosβ,cosy)|cosθ | ⅁ f ⅁ l | = | ( ⅁ f ⅁ x , ⅁ f ⅁ y , ⅁ f ⅁ z ) | ∗ | ( c o s a , c o s β , c o s y ) | ∗ c o s θ
因为 |(cosa,cosβ,cosy)|=1 | ( c o s a , c o s β , c o s y ) | = 1 ,所以当 cosθ=1 c o s θ = 1 时候, |fl| | ⅁ f ⅁ l | 最大,也就是与 (fx,fy,fz) ( ⅁ f ⅁ x , ⅁ f ⅁ y , ⅁ f ⅁ z ) 梯度方向一致的时候最大,反之负梯度方向下降最大。

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

L(y,yhat=fm1(x,y,z)+learnrate(Lfm1)) L ( y , y h a t = f m − 1 ( x , y , z ) + l e a r n r a t e ∗ ( − ⅁ L f m − 1 ) )

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

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


这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值