5. 集成学习(Ensemble Learning)GBDT
1. 集成学习(Ensemble Learning)原理
2. 集成学习(Ensemble Learning)Bagging
3. 集成学习(Ensemble Learning)随机森林(Random Forest)
4. 集成学习(Ensemble Learning)Adaboost
5. 集成学习(Ensemble Learning)GBDT
6. 集成学习(Ensemble Learning)算法比较
7. 集成学习(Ensemble Learning)Stacking
1. 前言
如果读了我之前的几篇集成学习的博文,相信读者们已经都对集成学习大部分知识很有了详细的学习。今天我们再来一个提升,就是我们的集大成者GBDT。GBDT在我们的Kaggle的比赛中基本获得了霸主地位,大部分的问题GBDT都能获得异常好的成绩。
2. GBDT原理
GBDT的中文名叫梯度提升树,GBDT也是集成学习Boosting家族的成员,但是却和传统的Adaboost有很大的不同。回顾下Adaboost,我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同。
在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是\(f_{t-1}(x)\), 损失函数是\(L(y,f_{t-1}(x))\),我们本轮迭代的目标是找到一个CART回归树模型的弱学习器\(h_t(x)\),让本轮的损失函数\(L(y,f_t(x)=L(y,f_{t-1}(x)+h_t(x))\)最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。即梯度提升树是用CART树去拟合前一个弱模型的损失函数的残差,使得本轮的损失更小。
3. 提升树
回归问题提升树的前向分步算法:
假设第\(m\)个模型是\(f_m(x)\),则有以下公式
\[
f_0(x)=0
\]
\[
f_m(x)=f_{m-1}(x)+T(x,\theta_m)
\]
\[
f_M(x)=\sum_{m=1}^MT(x,\theta_m)
\]
有了模型函数后,我们就得到了损失函数:
\[
L(y,f_m(x))=L(y,f_{m-1}(x)+T(x,\theta_m))=L(r_{m-1},T(x,\theta_m))
\]
其中的\(T(x,\theta)\)需要用CART树去拟合,而\(r_{m-1}\)是上一个学习器的损失的残差。
\[
r_{m-1}=L(y,f_{m-1}(x))
\]
我们举个例子,假设损失函数是平方损失函数:
\[
L(y,f(x))=(y-f(x))^2
\]
则第\(m\)个模型的损失函数
\[
L(y,f_m(x))=L(y,f_{m-1}(x)+T(x,\theta_m))=L(r_{m-1},T(x,\theta_m))=(r_{m-1}-T(x,\theta_m))^2
\]
4. 梯度提升树
前面的提升树利用加法模型和前向算法进行,当损失函数是平方损失或者指数损失的时候,很好推算,但是对于一般的损失函数,就比较难处理。这时候我们可以利用最速下降法来近似,关键是利用了损失函数的负梯度在当前模型的值:
\[
r_{ti} \approx -\bigg[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\bigg]_{f(x) = f_{t-1}\;(x)}
\]
输入:是训练集样本\(T={(x_1,y_1),(x_2,y_2),...(x_N,y_N)}\), 最大迭代次数\(M\), 损失函数\(L\)。
输出:强学习器\(f_M(x)\)
- 初始化弱学习器
\[
f_0(x) = arg min_{c}\sum\limits_{i=1}^{N}L(y_i, c)
\]
- 对迭代轮数\(m=1,2,...M\)有:
- 对样本\(i=1,2,...,N\),计算负梯度\(r_{mi} \approx -\bigg[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\bigg]_{f(x) = f_{t-1}\;(x)}\)
- 利用\((x_i,r_{mi})(i=1,2,..N)\), 拟合一颗CART回归树,得到第t颗回归树,其对应的叶子节点区域为\(Rmj,(j=1,2,...,J)\)。其中\(J\)为回归树t的叶子节点的个数。
- 对叶子区域\(j=1,2,...,J\)计算最佳拟合值\(c_{mj} = arg min_{c}\sum\limits_{x_i \in R_{mj}} L(y_i,f_{m-1}(x_i) +c)\)
- 更新强学习器\(f_{m}(x) = f_{m-1}(x) + \sum\limits_{j=1}^{J}c_{mj}I(x \in R_{mj})\)
- 得到强学习器f(x)的表达式\(f(x) = f_M(x) =f_0(x) + \sum\limits_{m=1}^{M}\sum\limits_{j=1}^{J}c_{mj}I(x \in R_{tj})\)
5. GBDT的正则化
- 和Adaboost类似的正则化项,即步长(learning rate)。
- 正则化的方式是通过子采样比例(subsample)。
- 对于弱学习器即CART回归树进行正则化剪枝。
6. 总结
GBDT也是需要正则化的过程,
最后总结下GBDT的优缺点。
GBDT主要的优点有:
- 可以灵活处理各种类型的数据,包括连续值和离散值。
- 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
- 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
5. 集成学习(Ensemble Learning)GBDT的更多相关文章
- 【Supervised Learning】 集成学习Ensemble Learning & Boosting 算法(python实现)
零. Introduction 1.learn over a subset of data choose the subset uniformally randomly (均匀随机地选择子集) app ...
- 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting
本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...
- 机器学习:集成学习:随机森林.GBDT
集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...
- 集成学习(Ensembling Learning)
集成学习(Ensembling Learning) 标签(空格分隔): 机器学习 Adabost 对于一些弱分类器来说,如何通过组合方法构成一个强分类器.一般的思路是:改变训练数据的概率分布(权值分布 ...
- 集成学习ensemble
集成学习里面在不知道g的情况下边学习边融合有两大派:Bagging和Boosting,每一派都有其代表性算法,这里给出一个大纲. 先来说下Bagging和Boosting之间的相同点:都是不知道g,和 ...
- 集成学习(ensemble method)--基于树模型
bagging方法(自举汇聚法 bootstrap aggregating) boosting分类:最流行的是AdaBoost(adaptive boosting) 随机森林(random fores ...
- 集成算法——Ensemble learning
目的:让机器学习效果更好,单个不行,群殴啊! Bagging:训练多个分类器取平均 Boosting:从弱学习器开始加强,通过加权来进行训练 (加入一棵树,比原来要强) Stacking:聚合多个分类 ...
- 浅谈树模型与集成学习-从决策树到GBDT
引言 神经网络模型,特别是深度神经网络模型,自AlexNet在Imagenet Challenge 2012上的一鸣惊人,无疑是Machine Learning Research上最靓的仔,各种进 ...
- 集成学习的不二法门bagging、boosting和三大法宝<结合策略>平均法,投票法和学习法(stacking)
单个学习器要么容易欠拟合要么容易过拟合,为了获得泛化性能优良的学习器,可以训练多个个体学习器,通过一定的结合策略,最终形成一个强学习器.这种集成多个个体学习器的方法称为集成学习(ensemble le ...
- [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林
[白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...
随机推荐
- MongoDB学习笔记(10)-- 排序
MongoDB sort() 方法 在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序 ...
- MongoDB学习笔记(5)--document
MongoDB 插入文档 本章节中我们将向大家介绍如何将数据插入到MongoDB的集合中. 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种 ...
- Linux引导启动程序 - boot
主要描述 boot/目录中的三个汇编代码文件,见列表 3-1 所示.正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式.bootsect.s 和 setup.s 采用近似于 I ...
- Mac OS X 下使用清理软件,这是我他妈干过最傻的事情,之一
Mac OS X 系统设计良好,数据都是有序地存储在不同的文件夹下,配置和安装软件几乎都是极其简单的事情,不过几个月前刚入手mac,我还是好奇地使用了一个mac 下的清理软件,也不记得叫什么名字了,自 ...
- js中为什么你不敢用 “==”
文章引用:http://0313.name/archives/480 前言 类型转换在各个语言中都存在,而在 JavaScript 中由于缺乏对其的了解而不慎在使用中经常造成bug被人诟病.为了避免某 ...
- 微信小程序图片宽100%显示并且不变形
<view class="meiti" style="background-color:red;"> <image src="htt ...
- nginx 有关防盗链的设置
http://blog.csdn.net/longjef/article/details/53284108 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链 ...
- MySql(五):MySQL数据库安全管理
一.前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本. 失去了数据,可能就失去了一切 本章将针对mysql的安全相关内容进 ...
- 《深入理解jvm》笔记---第六章
类文件结构 1. Java一次编写,到处执行的基石: Java编译产生的是字节码(bytecode).sun公司和其它虚拟机提供商公布各个平台上的虚拟机.这些虚拟机能够加载和执行这些与平台无关的 ...
- 支付宝接口错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8
调试支付宝条码支付的时候碰到个错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8, 原因是我代码里的那私钥是直接复制pem文件里的代码的,可支付宝底层的sdk中默认是以文 ...