先缕一缕几个关系:

  • GBDT是gradient-boost decision tree
  • GBDT的核心就是gradient boost,我们搞清楚什么是gradient boost就可以了
  • GBDT是boost中的一种方法,boost还有XGBoost,adaboost。

基本概念

【Boost】就是让多个弱分类器,通过不同的集成方式,来让多个弱分类器变成一个强分类器。

【gradient-boost】 梯度提升。简单的说,先训练一个弱分类器,然后弱分类器和目标值之间的残差,作为下一个弱分类器训练的目标值。这里有一个非常简单的例子

  • 第一个模型预测年龄,虽然真实值是30岁,第一个模型只给出了20岁的估计值;
  • 第二棵树要预测的就是这个10岁的残差,但是第二棵树只给出了6岁的估计值;
  • 第三棵树预测的是第二棵树的4岁的残差,但是………………(禁止套娃)

梯度 or 残差 ?

对于GBDT,网上的很多文章都没有讲清楚,学习梯度还是学习残差?从上面的那个例子来看,是学习残差的。

其实,从来GBDT都是学习梯度的,学习残差只是学习梯度的一个特例!

如果我们是在做一个回归任务(就像是上面例子中预测年龄),采用平方损失:\(loss = \frac{1}{2}\sum^n_i{(y_i-\hat{y_i})^2}\)

其中\(y_i\)是真实数值,\(\hat{y_i}\)是模型预测的值。

然后想求取这个关于\(\hat{y_i}\)的梯度,那就是:

\(\frac{\partial loss}{\partial \hat{y^i}}=(-1)(y_i-\hat{y_i})\)

所以残差在平方损失的情况下,就是等于负梯度,所以两者一回事。

残差过于敏感

对于数据不干净,没有清晰掉异常值的数据样本。使用平方损失对异常值过于敏感了



所以,这里在回归问题中,也可以考虑使用下面的两个损失函数:

  • Absolute loss:

    \(loss=|y-\hat{y}|\)

  • Huber loss:

    这个是设置一个阈值,当\(|y-\hat{y}|\)小于这个阈值的时候,采用平方损失,当\(|y-\hat{y}|\)大于这个阈值的时候,采用类似于绝对损失的线性损失:



    这里看一下huber loss的函数图像:



    就是一个平方损失,一个线性损失。


然后看一下平方损失,绝对损失,huber损失对于异常值的容忍程度:

CART回归树分裂思路(可不看)

其实这个问题看起来问的不明所以,其实是问你决策树如何选择特征的。从上面的例子可以看出来,GDBT应该是处理回归问题的(处理连续数据的)。当然,GDBT也有办法处理分类问题,只是这里就不说了,这里主要说GDBT怎么处理回归问题的,回归问题能处理,那么总有回归离散化的办法的

这个问题是在问:CART TREE如何选择特征的CART TREE就是回归决策树,就是之前提到的弱分类器。

一个决策树,希望读者已经有一个大概的理解了。简单说就是:样本可以根据的特征A是否超过某一个阈值划分成两部分,然后划分之后的每一个部分又可以根据某一个特征是否超过某一个阈值再分成两部分……

这样我们就要做出选择了:每一个部分是根据哪一个特征去划分?根据这个特征的哪一个数值作为阈值划分?

如果我们算力无穷,那么自然可以遍历每一个特征,然后穷举每一种可能的分割点,然后对比找到最优分割点。

那么如何判断分割的点的好坏呢?得给出一个cost函数,或者叫做loss函数这样的东西吧。

\(loss= \sum_{第一部分}{(y_i-me
an(y_{第一部分}))^2}+\sum_{第二部分}{(y_i-mean(y_{第二部分}))^2}\)

看一下这个公式,我把公式写的太丑了。其实这个公式非常的好理解:现在根据某一个特征值,根据某一个阈值把样本分成了两个部分:第一部分和第二部分。然后计算每一个部分的样本的label的均值,也就是公式中的:\(mean(y_{第一部分})\),\(mean(y_{第二部分})\),然后计算第一部分中所有样本的label与第一部分label均值之间的差的平方和,同样的过程计算第二个部分的,两个相加起来就是这个loss。选择能够让这个loss最小的分割特征和分割阈值,就是我们要找的东西。

其实我在学这一块的时候,发现这个过程像是什么?像不像聚类算法,通过上面的loss的最小化的过程,把一堆样本分成两类,让两类的类内距离最小。那个均值就像是求类中心点,计算每一个label距离类中心点的距离。(这一段看不懂也没事


喜欢的话请关注我们的微信公众号~【你好世界炼丹师】。

  • 公众号主要讲统计学,数据科学,机器学习,深度学习,以及一些参加Kaggle竞赛的经验。
  • 公众号内容建议作为课后的一些相关知识的补充,饭后甜点。
  • 此外,为了不过多打扰,公众号每周推送一次,每次4~6篇精选文章。

微信搜索公众号:你好世界炼丹师。期待您的关注。

一文读懂:GBDT梯度提升的更多相关文章

  1. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  2. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  3. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

  4. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  5. 一文读懂Java动态代理

    作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...

  6. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  7. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  8. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

  9. [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路   http://www.52im.net/thread-1709-1-2.html     本文原作者阮一峰,作者博客:r ...

  10. 一文读懂HDMI和VGA接口针脚定义

    一文读懂HDMI和VGA接口针脚定义 摘自:http://www.elecfans.com/yuanqijian/jiekou/20180423666604.html   HDMI概述 HDMI是高清 ...

随机推荐

  1. Pycharm虚拟环境的使用

    Pycharm虚拟环境的使用 pycharm创建项目的时候,一定勾选inhert global site-packages.不然系统的库就没法用了. 打开Project Interpreters页面: ...

  2. 慕零的黑夜-头条-第二期(CSDN)[导读:] CSDN的15个bug&用户意见(很大) 作者:qq3461896724

    首先介绍CSDN: 相信"金山词霸,金山打字通"许多人都用过,而金山副总监 创办了  "全球最大中文IT技术平台,成就一亿技术人"的CSDN(Chinese s ...

  3. Zabbix漏洞学习

    Zabbix介绍 zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵 ...

  4. vc程序设计--对键盘与鼠标的响应(1)

    // WindowsProject2.cpp : 定义应用程序的入口点. // /** * 当按下CTRL键时输出信息:CTRL键被压下 * 当按下K键时输出信息:K键被压下 * 当按下CTRL+K键 ...

  5. 小谢第1问:为什么要写blog

    一直犹豫了好久,终于在csdn上弄好了自己的博客账号,感谢平台,以后在工作的过程中,遇到不懂得问题,解决后,会在这里记录下自己所遇到的问题

  6. appnium(一)简介

    一.appium简介 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios,android应用(当然了,还有 ...

  7. Rocket - util - IDPool

    https://mp.weixin.qq.com/s/Pe7FGKzfRufzzYDrl0fQ7g   介绍IDPool的实现.   ​​   1. 基本介绍   实现从ID池中分配和释放ID的功能. ...

  8. 【Hadoop】hdfs文件上传流程图

  9. Java实现 LeetCode 223 矩形面积

    223. 矩形面积 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. Rectangle Area 示例: 输入: -3, 0, 3, 4 ...

  10. Java实现选择排序和冒泡排序

    1 问题描述 给定一个可排序的n元素序列(例如,数字.字符和字符串),将它们按照非降序方式重新排列. 2 解决方案 2.1 选择排序原理简介 选择排序开始的时候,我们从第一个元素开始扫描整个列表,找到 ...