机器学习 之梯度提升树GBDT

1、基本知识点简介
- 在集成学习的Boosting提升算法中,有两大家族:第一是AdaBoost提升学习方法,另一种是GBDT梯度提升树。
- 传统的AdaBoost算法:利用前一轮迭代弱学习器的误差来更新训练集的权重,一轮轮迭代下去。
梯度提升树GBDT:也是通过迭代的算法,使用前向分布算法,但是其弱分类器限定了只能使用CART回归树模型。
GBDT算法原理:指通过在残差减小的梯度方向建立boosting tree(提升树),即gradient boosting tree(梯度提升树)。每次建立新模型都是为了使之前模型的残差往梯度方向下降。
2、梯度提升树GBDT算法
2.1 思路和原理
- 基本思路:假设前一轮迭代得到的强学习器是\(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)\)最小。即本轮迭代找到的损失函数要使样本的损失比上一轮更小。
- 大牛Freidman提出用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树,第 t 轮的第 i 个样本的损失函数的负梯度表示为:
\[r_{ti} = - [\frac{\partial L(y_{i}, f(x_{i})) }{\partial f(x_{i}) }]_{f(x)=f_{t-1}(x)}\]
2.2 梯度代替残差建立CART回归树
利用\((x_{i}, r_{ti}), (i=1,2,...,m)\)(此处损失函数的负梯度代替了一般提升树的残差),我们可以拟合一棵CART回归树,得到第 t 棵回归树,其对应的叶结点区域\(R_{tj}, j=1,2,...,J\)。其中J为叶子结点的个数。
对于每一个叶子结点的样本,通过使平方误差损失函数最小,输出拟合叶子结点最好的输出值\(C_{tj}\)(CART回归树中采取的公式是每一个样本的划分单元上的所有实例\(x_{i}\)的所有输入实例对应的输出平均值,即\(\hat{c}_{m} = ave(y_{i} | x_{i} \in R_{m})\)),此处输出值为:
\[c_{tj} = arg \min\limits_{c} \sum\limits_{x_{i} \in R_{tj}} L(y_{i}, f_{t-1}(x_{i}) + c)\]
因此本轮决策树的拟合函数为:
\[h_{t}(x) = \sum\limits_{j=1}^{J} c_{tj} I(x \in R_{tj})\]
从而得到本轮的强学习器表达式为:
\[f_{t}(x) = f_{t-1}(x) + \sum\limits_{j=1}^{J} c_{tj} I(x \in R_{tj})\]- 如果是GBDT分类算法,则需要改变损失函数为指数损失函数(类似为AdaBoost算法),或者对数似然损失函数(逻辑回归)。——暂时不作分析。
- 指数损失函数:\(L(y, f(x)) = exp(-Y(f(x)))\)
对数损失函数:\(L(Y,P(Y|X)) = -log P(Y|X)\)
参考:
1、GBDT:https://www.cnblogs.com/pinard/p/6140514.html
机器学习 之梯度提升树GBDT的更多相关文章
- 梯度提升树(GBDT)原理小结(转载)
在集成学习值Adaboost算法原理和代码小结(转载)中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boos ...
- 机器学习之梯度提升决策树GBDT
集成学习总结 简单易学的机器学习算法——梯度提升决策树GBDT GBDT(Gradient Boosting Decision Tree) Boosted Tree:一篇很有见识的文章 https:/ ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
- scikit-learn 梯度提升树(GBDT)调参笔记
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
- 梯度提升树(GBDT)原理小结
在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...
- 笔记︱决策树族——梯度提升树(GBDT)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本笔记来源于CDA DSC,L2-R语言课程所 ...
- 梯度提升树GBDT算法
转自https://zhuanlan.zhihu.com/p/29802325 本文对Boosting家族中一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 简 ...
- 梯度提升树GBDT总结
提升树的学习优化过程中,损失函数平方损失和指数损失时候,每一步优化相对简单,但对于一般损失函数优化的问题,Freidman提出了Gradient Boosting算法,其利用了损失函数的负梯度在当前模 ...
- 机器学习(七)—Adaboost 和 梯度提升树GBDT
1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...
随机推荐
- 【Python全栈-JavaScript】JavaScript的window.onload()与jQuery 的ready()的区别
JavaScript的window.onload()与jQuery 的ready()的区别 做web开发时常用Jquery中$(document).ready()和JavaScript中的window ...
- ivew定制主题 less ^3.0 时报错 .bezierEasingMixin(); Inline JavaScript is not enabled. Is it set in your options?
按照 ivew 提供的方法定制主题,创建一个 less 文件,在其中覆盖变量,再在 main.js 中引入.戳这里 出现报错: 问题貌似是在于 less 版本...两种解决方法: 1.打开项目pack ...
- java之jedis使用
下载 依赖jar包下载 使用 # Redis settings redis.host=192.168.208.153 redis.port=6379 redis.pass=1234 redis.tim ...
- ORA-01555错误
有这样一种情况 0:00 我们开始查询,查询的数据是100万条 0:01 一个session update了第100万条数据 0:01 update提交了,完成 1:00 我们的查询还在继续,只读到了 ...
- JDK 1.8源码阅读 HashMap
一,前言 HashMap实现了Map的接口,而Map的类型是成对出现的.每个元素由键与值两部分组成,通过键可以找对所对应的值.Map中的集合不能包含重复的键,值可以重复:每个键只能对应一个值. 存储数 ...
- DOM_xss预备知识
http://xuelinf.github.io/2016/05/18/%E7%BC%96%E7%A0%81%E4%B8%8E%E8%A7%A3%E7%A0%81-%E6%B5%8F%E8%A7%88 ...
- Software Testing, Lab 1
1.Install Junit(4.12), Hamcrest(1.3) with Eclipse 2.Install Eclemma with Eclipse 3.Write a java prog ...
- 使用intellJ导入非maven,gradle等非构建工程的依赖,发布工程时候的打包详解
一.导入 1.java项目在没有导入该jar包之前,如图: 2.点击 File -> Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Proje ...
- iterator与const_iterator
iterator与const_iterator 所有的标准库容器都定义了相应的迭代器类型.迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素. 1.iterato ...
- 关于EasyUI查询功能的二级联动
EasyUI 二级联动 data-options="multiple:true" 属性可实现对于车牌号的多选.