GBDT(Gradient Boosting Decision Tree) 没有实现仅仅有原理
阿弥陀佛。好久没写文章,实在是受不了了。特来填坑,近期实习了(ting)解(shuo)到(le)非常多工业界经常使用的算法。诸如GBDT,CRF,topic model的一些算法等。也看了不少东西。有时间能够具体写一下,而至于实现那真的是没时间没心情再做了,等回学校了再说吧。今天我们要说的就是GBDT(Gradient Boosting Decision Tree)
=======================================================================
〇.前序
GBDT是看一个大牛团队做推荐算法比赛的时候拿这个模型来处理最后得到的全部的feature并输出结果的模型。想到自己曾经天真地拿着SVD单模型调參參加这类比赛的时候真是……闻者伤心,听着流泪啊,别的不谈。这次讲GBDT主要是由于了解GBDT的一些前置条件我都在博客里写过,能够直接跳到关键部分开写……进入正题吧
一.前置条件
1.决策树
參看我曾经的一篇博客:http://blog.csdn.net/dark_scope/article/details/13168827
尽管里面写的都是决策分类树。而我们这次主讲的是决策回归树,只是事实上都差点儿相同,决策回归树呢就是把分到某个分支上的全部训练例子的目标值求平均或者取中位数返回而已。
2.boosting
一般来说哦讲boosting都以adaboost这个特例開始讲,所以你能够先看一看我的这篇博客:AdaBoost--从原理到实现
然后我们来接着讲boosting……新开一章吧。这个事实上是主要内容
二.boosting 提升方法
提升方法事实上是一个比adaboost概念更大的算法,由于adaboost能够表示为boosting的前向分布算法(Forward stagewise additive modeling)的一个特例。boosting终于能够表示为:
当中的w是权重,Φ是弱分类器(回归器)的集合,事实上就是一个加法模型(即基函数的线性组合)
前向分布算法 实际上是一个贪心的算法,也就是在每一步求解弱分类器Φ(m)和其參数w(m)的时候不去改动之前已经求好的分类器和參数:
(图自《统计学习方法》)
为了表示方便。我们以后用β取代w进行描写叙述了,图中的b是之前说的Φ弱分类器
OK,这也就是提升方法(之前向分布算法)的大致结构了。能够看到当中存在变数的部分事实上就是极小化损失函数 这关键的一步了。怎样选择损失函数决定了算法的终于效果(名字)……这一步你能够看出算法的“趋势”。以后再单独把“趋势”拿出来说吧。由于我感觉理解算法的关键之中的一个就是理解算法公式的“趋势”
三.各种提升方法
不同的损失函数和极小化损失函数方法决定了boosting的终于效果。我们如今来说几个常见的boosting:
(图自 Machine Learning A Probabilistic Perspective)对于二分类问题来说:当中πi=sigm(2f(xi)) ,y~i∈{-1,+1},yi∈{0,1}
广义上来讲,所谓的Gradient Boosting 事实上就是在更新的时候选择梯度下降的方向来保证最后的结果最好。一些书上讲的“残差”
方法事实上就是L2Boosting吧,由于它所定义的残差事实上就是L2Boosting的Derivative。接下来我们着重讲一下弱回归器(不知道叫啥了,自己编的)是决策树的情况,也就是GBDT。(不知道为何上表的Absolute被命名为了Gradient boosting,关于Gradient boosting在后面会有更仔细的介绍)
四.GBDT
对于决策树,事实上能够把它表示为下式。即是把特征空间划分为多个区域,每一个区域返回某个值作为决策树的预測值
当中Rj是区域,γ是返回值,I()在当中的条件成立情况下为1。否则为0.当中的參数J能够大概看做树的深度的一个表示,这是一个待调的參数
我们知道Gradient Boosting最重要的一步就是去拟合下式:
对于不同的Loss function,其梯度有不同的表达式:
(图自The Elements of Statisic Learning)
前三种相应的loss function例如以下图:当中Huber是低于某个值表现为square error,高于某个值则表现为线性
以下是GBDT的大概框架:(Gradient
Tree Boosting应该是GBDT还有一种说法,有误请指正)
(算法自The Elements of Statistical Learning )
整个框架描写叙述得事实上已经非常清晰了,就不在这里赘述了,总之所谓Gradient就是去拟合Loss function的梯度,将其作为新的弱回归树增加到总的算法中就可以。
五.尾巴
本文大概写了一下GBDT的框架和原理。兴许事实上还有涉及到參数的选择(如树的深度)。正则化(regularization)等内容。主要是在实现的时候要注意。有时间会写一份toy代码出来。
【Reference】
【1】《The Elements of Statistical Learning 》
【2】《统计学习方法》
【3】《Machine Learning A Probabilistic Perspective》
GBDT(Gradient Boosting Decision Tree) 没有实现仅仅有原理的更多相关文章
- GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法
GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...
- CART分类与回归树与GBDT(Gradient Boost Decision Tree)
一.CART分类与回归树 资料转载: http://dataunion.org/5771.html Classification And Regression Tree(CART)是决策 ...
- Gradient Boosting Decision Tree学习
Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...
- 梯度提升树 Gradient Boosting Decision Tree
Adaboost + CART 用 CART 决策树来作为 Adaboost 的基础学习器 但是问题在于,需要把决策树改成能接收带权样本输入的版本.(need: weighted DTree(D, u ...
- 论文笔记:LightGBM: A Highly Efficient Gradient Boosting Decision Tree
引言 GBDT已经有了比较成熟的应用,例如XGBoost和pGBRT,但是在特征维度很高数据量很大的时候依然不够快.一个主要的原因是,对于每个特征,他们都需要遍历每一条数据,对每一个可能的分割点去计算 ...
- 后端程序员之路 10、gbdt(Gradient Boosting Decision Tree)
1.GbdtModelGNode,含fea_idx.val.left.right.missing(指向left或right之一,本身不分配空间)load,从model文件加载模型,xgboost输出的 ...
- Gradient Boosting Decision Tree
GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类.当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式 ...
- GBDT(Gradient Boost Decision Tree)
原文:http://blog.csdn.net/aspirinvagrant/article/details/48415435 GBDT,全称Gradient Boosting Decision Tr ...
- Gradient Boost Decision Tree(&Treelink)
http://www.cnblogs.com/joneswood/archive/2012/03/04/2379615.html 1. 什么是Treelink Treelink是阿里集团内部 ...
随机推荐
- css选择器思维导图
- Linux学习: 触摸屏驱动
一.Linux输入子系统的结构: 二.触摸屏驱动代码: s3c_ts.c #include <linux/errno.h> #include <linux/kernel.h> ...
- 一步一步开始FPGA逻辑设计 - 高速接口之PCIe(转)
reference: https://blog.csdn.net/jackxu8/article/details/53288385 这篇文章主要针对Xilinx家V6和K7两个系列的PFGA,在Lin ...
- jdbc中Class.forName(driverName)的作用
上次面试别人问我jdbc的过程: 我是这样回答的: Class.forName加载驱动 DriverManager.connect(url,username, password)获取连接对象 conn ...
- 矩震级Mw与地震矩M0的换算关系
矩震级实质上就是用地震矩来描述地震的大小.地震矩是震源的等效双力偶中的一个力偶的力偶矩,是继地震能量后的第二个关于震源定量的特征量,一个描述地震大小的绝对力学量,单位为N.m(牛.米),其表达式为: ...
- L275 Climate Change Is Having a Major Impact on Global Health
Climate Change Is Having a Major Impact on Global Health A devastating heat wave swept across Europe ...
- webrtc 音频一点相关知识
采样频率: 44.1kHz ,它的意思是每秒取样44100次 .8kHz 8000次, 16kHz 160000次 比特率: 比特率是大家常听说的一个名词,数码录音一般使用16比特 ...
- background 的一些 小的细节: 1, 背景色覆盖范围: border+ width+ padding ;背景图覆盖范围: width + padding ; 2设置多个背景图片 ; 3) background-position定位百分比的计算方式: 4)background-clip 和 background-origin 的区别
1. background (background-color, background-image) 背景色覆盖范围: border+ width+ padding ;背景图覆盖范围: width ...
- ios读取plist文件:
@property (nonatomic,strong) NSArray *imageData;//定义一个数组 //懒加载数据 -(NSArray *)imageDate { if(_imageDa ...
- Allocation-Free Collections
假设你有一个方法,通过创建临时的List来收集某些数据,并根据这些数据来统计信息,然后销毁这个临时列表.这个方法被经常调用,导致大量内存分配和释放以及增加的内存碎片.此外,所有这些内存管理都需要时间, ...