先缕一缕几个关系:

  • 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. react中路由不起作用的奇怪现象

    同样的两段Router代码,为什么一段正常,一段不起作用(也没有任何错误log提示) 瞪着眼观察也看不出为什么... 通过选中高亮显示内容相同, 为何就是有一段路由不管用呢? 折腾半天发现... 大小 ...

  2. scikit-learn中文文档

    http://sklearn.apachecn.org/cn/0.19.0/tutorial/statistical_inference/supervised_learning.html

  3. ATT&CK红队评估实战靶场(一)

    靶机下载地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 攻击拓扑如下 0x01环境搭建 配置两卡,仅主机模式192.168.52.0网段模拟内 ...

  4. Rocket - interrupts - Parameters

    https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...

  5. Chisel3 - util - Lookup

    https://mp.weixin.qq.com/s/g85Si6n37D9PYfR5hEoRQQ     实现一个查找逻辑.   参考链接: https://github.com/freechips ...

  6. Java实现 LeetCode 761 特殊的二进制序列(括号问题)

    761. 特殊的二进制序列 特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等. 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量. 给定一个特殊的二进制序列 ...

  7. (Java实现) 组合的输出

    问题 B: [递归入门]组合的输出 时间限制: 1 Sec 内存限制: 128 MB 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们 ...

  8. Java实现 蓝桥杯VIP 算法训练 成绩的等级输出

    输入一个百分制的成绩t后,按下式输出它的等级.等级为:90100为A,8089为B,7079为C,6069为D,0~59为E. 样例输入 98 样例输出 A import java.util.Scan ...

  9. Java实现 蓝桥杯 算法训练 纪念品分组

    问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价 ...

  10. Java实现 LeetCode 237 删除链表中的节点

    237. 删除链表中的节点 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: ...