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是阿里集团内部 ...
随机推荐
- 4.4 C++虚析构函数
参考:http://www.weixueyuan.net/view/6373.html 总结: 构造函数是不能声明为虚函数的,析构函数可以被声明为虚函数. 将基类的析构函数声明为虚函数之后,派生类的析 ...
- MyEclipse创建Web项目入门指南
MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 本教程将指导您创建和部署简单的Hello World Web项目.在本教程中,您将学习如何: 创建一个 ...
- centos7 安装jdk8 bash脚本 并配置环境变量
#!/bin/bash #安装java脚本 if type -p java; then echo 'java已安装.' exit else echo '开始安装java...' wget --no-c ...
- <Dr.Elephant><How to tune ur application>
Why Dr.Elephant? Most of Hadoop optimization tools out there, but they are focused on simplifying th ...
- 六、在U-boot中让LCD填充纯色
1. 编译U-boot 准备好U-boot压缩包urbetter-u-boot-1.1.6-v1.0.tgz,输入命令:tar -xvf urbetter-u-boot-1.1.6-v1.0.tgz ...
- BSTR 转 char*
#include <comdef.h> #include <comutil.h> #pragma comment(lib,"comsuppw.lib") _ ...
- express框架以及配置项
以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录.以下几个重要的模块是需要与 express 框 ...
- angular 项目 error TS2451: Cannot redeclare block-scoped variable 'ngDevMode'
删除 node_modules ,用 npm install 就可以了, cnpm install (竟然不行)
- 河工大玲珑校赛重现の rqy的键盘
题目传送门:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1263 1263: rqy的键盘 时间限制: 1 秒 内存限制: 128 ...
- npm http-server ubuntu
Node.js中http-server的使用 使用阿里的npm镜像 国外的npm太慢了.查看一下自己使用的源: npm config get registry 1 应该显示https://regist ...