理解GBDT算法(三)——基于梯度的版本

标签: GBDT梯度残差代价函数回归树
2015-03-31 16:13 1395人阅读 评论(3) 收藏 举报
本文章已收录于:
分类:
Machine Learning&&Data Mining(44)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

  1. 算法的基本步骤
  2. 公式推导
  3. 两个版本之间的联系

上一篇中我们讲到了GBDT算法的第一个版本,是基于残差的学习思路。今天来说第二个版本,可以说这个版本的比较复杂,涉及到一些推导和矩阵论知识。但是,我们今天可以看到,两个版本之间的联系,这个是学习算法的一个重要步骤。

这篇博文主要从下面这几个方面来说基于梯度的GBDT算法:
(1)算法的基本步骤;
(2)其中的学数学推导;
(3)基于梯度的版本和基于残差的版本之间的联系;

在讲解算法的详细步骤之前,我们可以先明确一个思路,就是梯度版本的GBDT是用多类分类Multi-class classification 的思想来实现的,或者可以说GBDT的这个版本融入到多类分类中可以更好的掌握。

1. 算法的基本步骤

首先网上很多讲解博客都会出现下面这个图:

那么也就是说梯度版的GBDT的算法主要有8个步骤。
(0)初始化所有样本在K个类别上的估计值。
F_k(x)是一个矩阵,我们可以初始化为全0,也可以随机设定。如下:

上面的矩阵中,我们假设有N=8个样本,每个样本可能会属于K=5个类别中的一个,其中估计值矩阵F初始化为0.
除此之外,这8个训练样本都是带着类别标签的,例如:

说明第i=1个样本是属于第3类的。

(1)循环下面的学习更新过程M次;

(2)对没有样本的函数估计值做logistic变换。
我们在前面介绍Logistic回归的时候提到,Logistic函数一个重要的特性就是可以转换为0~1之间的概率值,我们通过下面的变换公式就可以把样本的估计值转换为该样本属于某一类的概率是多少:

可以看到样本初始的时候每个类别的估计值都是0,属于类别的概率也是相等的,不过,随着后面的不断更新,其估计值不一样了,概率自然也就差别开来。
比如下面:

(3)遍历所有样本的每个类别的概率
这一步需要注意,遍历的是每个类别,而不是所有样本。如下:

为什么这里是按照类别逐个学习呢?因为后面需要给每个类别k学习出一个回归树。

(4)求每个样本在第k类上概率梯度
上面一步中,我们有了许多个样本属于某个类别k的概率,以及它们是否真正属于类别k的概率(这些样本都是训练样本,所以它们是否属于某个类别都是已知的,概率为0/1)。那么这个就是一个典型的回归问题。我们当然可以用回归树的算法来求解(注,这里就是多类分类问题和GBDT联系的关键)。
我们通过常见的建立代价函数,并求导的梯度下降法来学习。代价函数是对数似然函数的形式为:

对这个代价函数的求导,我们可以得到:

(详细的推导过程下一节给出)
有没有发现这里的求导得到的梯度形式居然是残差的形式:第i个样本属于第k个类别的残差 = 真实的概率 - 估计的概率。
这一步也是残差版本和梯度版本的联系。
这些的梯度也是下面我们构建回归树的学习方向。

(5)沿着梯度方法学习到J个叶子结点的回归树
学习的伪代码:

我们输入所有样本xi, i = 1~N, 以及每个样本在第k个类别上概率的残差作为更新方向,我们学习到有J个叶子的回归树。学习的基本过程和回归树类似:遍历样本的特征维数,选择一个特征作为分割点,需要满足最小均方差的原则,或者满足【左子树样本目标值(残差)和的平方均值+右子树样本目标值(残差)和的平方均值-父结点所有样本目标值(残差)和的平方均值】最大的准则,一旦学习到J个叶子结点,我们就停止学习。结果是该回归树中每个叶子上都会有许多个样本分布在上面。
记住:每个叶子上的样本,既有自己属于类别k的估计概率,也有真实概率,因为后面求增益需要用到它们。

(6)求每个叶子结点的增益
每个结点的增益计算公式为:

注意后标,每个叶子结点j都有一个增益值(不是向量,是值)。计算的时候需要用到该叶子结点上的所有样本的梯度。
换句话说,每个叶子结点都可以计算出一个增益值,记住是值啊!

(7)更新所有样本在第k类下的估计值
上一步中求得的增益是基于梯度计算得到的,而且前面说到的梯度和残差有一定的关联,我们可以利用这个增益更新样本的估计值。

第m次迭代中的第k类下,所有样本的估计值F可以通过上次迭代m-1中,这些样本的估计值+增益向量求得。注意,这个增益向量需要把所有的J个叶子结点的增益值求和,然后和向量1相乘,而得。
也就是我们上面讲的,第k类的所有样本的估计值是一列:

也就是按列更新,前面有对类别数k的循环,所以每一类(每一列)的估计值都可以更新。一定记住是按列更新,每一类(每一列)都建立一个回归树来更新下去,最后原始的K类的N个样本的估计值矩阵都更新了一遍,带着这个新的估计值矩阵,我们进入下次m+1次的迭代学习。

如此,迭代学习M次之后,我们可以得到最终的所有样本在所有类别下的估计值矩阵,基于这个估计值矩阵,我们可以实现多类分类。

这样,基于梯度版本的GBDT算法的所有详细步骤我们都说完了。

2. 公式推导

上面建立的代价函数是对数似然函数的形式:

对这个代价函数的求导,我们可以得到:

那么其中的详细推导过程是什么呢?

其中涉及到对数函数的求导,主要是最后一步,yi是样本属于第k类的真实概率,故yi就是0/1数,而且K个类别中只可能属于一个类别,也就是说只有一个yi是1,其余全是0,所以有最后一步推导结果。

3. 两个版本之间的联系

前面我们提到的一些联系,这儿再总结一下:

  • 基于残差的版本四把残差作为全局方向,偏向于回归的应用。而基于梯度的版本是把代价函数的梯度方向作为更新的方向,适用范围更广。
  • 如果使用Logistic函数作为代价函数,那么其梯度形式和残差的形式类似,这个就说明两个版本之间是紧密联系的,虽然实现的思路不同,但是总体的目的是一样的。或者说残差版本是梯度版本的一个特例,当代价函数换成其余的函数,梯度的版本仍是适用的。

参考:
http://blog.csdn.net/w28971023/article/details/43704775
http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html
http://blog.csdn.net/kunlong0909/article/details/17587101
http://blog.csdn.net/puqutogether/article/details/44752611

理解GBDT算法(三)——基于梯度的版本相关推荐

  1. 通俗易懂理解GBDT算法原理-转

    GBDT算法深入解析 https://www.zybuluo.com/yxd/note/611571 通俗易懂理解GBDT算法原理 https://blog.csdn.net/qq_36696494/ ...

  2. 我理解的算法 - 三数之和及两数、三数之和扩展题

    我理解的算法 - 三数之和及两数.三数之和扩展题 LeetCode 15.三数之和 扩展 三数之和变种题 两数之和变种题 LeetCode 15.三数之和 这道题的题目大家自行查看:链接在这 ,题目和 ...

  3. 转载:GBDT算法梳理

    学习内容: 前向分布算法 负梯度拟合 损失函数 回归 二分类,多分类 正则化 优缺点 sklearn参数 应用场景 转自:https://zhuanlan.zhihu.com/p/58105824 G ...

  4. 【决战西二旗】|理解Sort算法

    前言 前面两篇文章介绍了快速排序的基础知识和优化方向,今天来看一下STL中的sort算法的底层实现和代码技巧. 众所周知STL是借助于模板化来支撑数据结构和算法的通用化,通用化对于C++使用者来说已经 ...

  5. gbdt 算法比随机森林容易_机器学习(七)——Adaboost和梯度提升树GBDT

    1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...

  6. 深入理解GBDT多分类算法

    目录: GBDT多分类算法 1.1 Softmax回归的对数损失函数 1.2 GBDT多分类原理 GBDT多分类算法实例 手撕GBDT多分类算法 3.1 用Python3实现GBDT多分类算法 3.2 ...

  7. 深入理解GBDT二分类算法

    我的个人微信公众号: Microstrong 微信公众号ID: MicrostrongAI 微信公众号介绍: Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关 ...

  8. python 多分类算法_深入理解GBDT多分类算法

    我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容, ...

  9. 杨鹏谈世纪佳缘推荐算法:基于Spark GraphX,弃GBDT和LR用FM

     杨鹏谈世纪佳缘推荐算法:基于Spark GraphX,弃GBDT和LR用FM 发表于2015-09-30 09:53| 1447次阅读| 来源CSDN| 2 条评论| 作者杨鹏 机器学习推荐算法 ...

最新文章

  1. Netty之粘包问题解决
  2. 《jQuery权威指南》学习笔记——第二章
  3. 我们计划招收300名电力人,免费学习CAD。
  4. 任意两点最短路floyd算法matlab,多源最短路——Floyd算法
  5. 02 docker的基本用法
  6. php 实现application,PHP中实现ASP中的Application 功能
  7. 定时器name冲突会报错吗_部落冲突:冬季版本即将更新,多个超级兵种被曝光,会上线吗?...
  8. 利用 Google Chart API 生成二维码大小不一致
  9. 若依框架数据库密码加密
  10. 微图App有哪些实用的功能?
  11. 【学习笔记】用Mac自学虚幻4
  12. 微信登录提示逻辑不正确_微信逻辑错误无法登录
  13. 解决微信设置字体大小对 rem 适配方式的影响
  14. (转载)基于联盟链区块链的九个方面对比
  15. LTE入门之UE-Category
  16. 转换为ico格式图片
  17. 教程篇(7.0) 06. FortiGate基础架构 单点登录(FSSO) ❀ Fortinet 网络安全专家 NSE 4
  18. SSM项目实例——简易版图书管理系统
  19. python-循环语句while
  20. 途志:新主播让自己的直播热起来有什么技巧?

热门文章

  1. k8s网络架构图_唯品会基于Kubernetes(k8s)网络方案演进
  2. android点击视频使用固定应用打开,Android 使用intent打开手机自带应用播放视频,音频,文档,还有打开应用市场...
  3. Android 的简介和体系结构中每个层的功能。
  4. mysql percona server_MySQL Study之--Percona Server版本
  5. Linux下CMake简明教程(二)同一目录下多个源文件
  6. Leetcode 169.多数元素 (每日一题 20210715)
  7. scala外部传入时间参数-亲测有效
  8. 过拟合(原因、解决方案、原理)
  9. Python入门100题 | 第021题
  10. 深度学习100例-卷积神经网络(VGG-19)识别灵笼中的人物 | 第7天