GBDT学习笔记
GBDT(Gradient Boosting Decision Tree,Friedman,1999)算法自提出以来,在各个领域广泛使用。从名字里可以看到,该算法主要涉及了三类知识,Gradient梯度、Boosting集成算法和 Decision Tree决策树。
该算法是GREEDY FUNCTION APPROXIMATION A GRADIENT BOOSTING MACHINE一文提出来的,它是一种基于 Gradient 的 Boosting Ensemble 模型。该算法底层基于 CART(GBDT 主要基于回归树) 和函数空间的梯度降算法,除了具有树模型的可解释性强、有效处理混合类型的特征、伸缩不变性(不需要对数据标准化)、对缺失值鲁棒等优点,还具有预测能力强、稳定性好等优势。相比于它的后继算法 XGboost/LightGBM , GBDT 只要求模型损失函数一阶可导,凸或非凸都适用;而 XGboost/LightGBM 对损失函数的要求更为苛刻,必须一阶二阶都可导,而且要求损失函数为严格的凸函数。
GBDT 顾名思义,其基本原理包括两个核心算法思想,一个是加性增强;另一个是梯度增强。
加法模型:
最终的分类器函数形式如下:
其中,第t颗回归树,其对应的叶节点区域。其中J为叶子节点的个数。
针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值如下:
梯度增强:
大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为
利用可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域
。其中J为叶子节点的个数。
GBDT算法:
1、回归算法
A. GBDT 回归算法在了解其基本原理之后,我们看看 GBDT 用于回归和分类的具体算法。在回归算法中,典型的损失函数为 MSE 损失
那么可得,在实际训练迭代过程中,在训练第 t 棵树的时候,我们需要将拟合的目标变量变为,可以看到新的目标变量即是样本的原始目标变量和截止到上一时刻模型预测输出的差值,也就是残差。
2、分类算法
GBDT 用于分类场景的时候,其核心是如何将分类问题转化为回归问题。我们以多分类的基础,阐述 GBDT 在分类中的算法过程。
假设类别数量为 K ,经过 T 轮迭代,得到 T*K 棵回归树。即在每一轮迭代的过程中,是针对样本 X 每个可能的类都训练一个分类回归树,需要建立 K 棵 1 vs. All 的回归树。
多分类中,使用的损失函数为交叉熵
也就是说,在每一轮迭代的过程中,需要建立 K 棵 1 vs. All 的回归树,且需要将叶子节点的输出(截止到 t 时刻的第 k 棵树的累积值)转化为概率,使用 Softmax 来计算
上式等价于
相比于 GBDT 回归,在分类的时候,树的输出再经过一次变换后,才进行损失函数的计算
即每个样本在第 t 轮中的第 k 树的新的目标变量, 和特征向量一起构成样本。这样每一轮的迭代中,就可以拟合 k 棵回归树。新形成的k棵树,求解损失函数最小的式子如下,其中,则:
上式子难以求解,叶子节点对应的预测值(或者叫权重)可以通过一次 Newton-Raphson 操作来计算:
算法如下:
https://www.sohu.com/a/227107019_505779
https://www.cnblogs.com/pinard/p/6140514.html
这篇有个例子,https://www.cnblogs.com/ModifyRong/p/7744987.html
这篇是原文翻译,https://www.cnblogs.com/bentuwuying/p/6667267.html
GBDT学习笔记的更多相关文章
- 学习笔记之机器学习(Machine Learning)
机器学习 - 维基百科,自由的百科全书 https://zh.wikipedia.org/wiki/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0 机器学习是人工智能的一个分 ...
- 概率图模型学习笔记:HMM、MEMM、CRF
作者:Scofield链接:https://www.zhihu.com/question/35866596/answer/236886066来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- CTR学习笔记&代码实现1-深度学习的前奏LR->FFM
CTR学习笔记系列的第一篇,总结在深度模型称王之前经典LR,FM, FFM模型,这些经典模型后续也作为组件用于各个深度模型.模型分别用自定义Keras Layer和estimator来实现,哈哈一个是 ...
- CTR预估模型演变及学习笔记
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
随机推荐
- 导入Excel——解析Excel——优化
package com.it.excel.excelLearn; import java.io.FileInputStream; import java.io.IOException; import ...
- Reducetask机制
Reduce大致分为copy.sort.reduce三个阶段,重点在前两个阶段.copy阶段包含一个eventFetcher来获 取已完成的map列表,由Fetcher线程去copy数据,在此 ...
- 阿里云部署,ubuntu, 连接服务器 |更新源| 安装node |安装mysql
1.连接服务器 xshell 新建连接 ssh root@1.1.1.1 2.更新源 apt-get update 3.安装node apt-get install -y curl curl -sL ...
- 地址栏参数获取函数 GetQueryStr(name)
//name:参数名称,return:有则返回该参数对应值,没有则返回null function GetQueryStr(name) { var reg = new RegExp(& ...
- Keil5创建基于RTX的STM32工程(转载+自己的体会)
转载自:https://blog.csdn.net/u011976086/article/details/54342447#commentBox 之前使用过ucos,freertos,但是这个keil ...
- RookeyFrame 代码层面 常用方法
测试代码均写在这个类里面的,因为是测试嘛,所以表名那些就将就看了.最后写完了再贴上全部代码 类的路径:Rookey.Frame.Operate.Base -> Test -> Class1 ...
- [Android] Android studio gradle 插件的版本号和 gradle 的版本号 的对应关系
[Android] Android studio gradle 插件的版本号和 gradle 的版本号 的对应关系 本博客地址: wukong1688 本文原文地址:https://www.cnblo ...
- 退役IV次后做题记录
退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...
- 【JZOJ6230】【20190625】梦批糼
题目 一个$n\times m \times l $的立方体,有一些位置有障碍 一次操作会随机选择一个立方体,共有\(w\)次操作 询问所有操作都不选到障碍点,被选到至少一次的点的期望 $n ,m,l ...
- Quartus RTL Simulation
今天在做某个module的RTL Simulation时,发现之前的do文件有问题,导致信号没有导入.将sim中的XXX_tb设置成了XXX所致.改正后无误. 可参考: https://www.cnb ...