进阶:2.GBDT算法梳理
GBDT算法梳理
学习内容:
1.前向分布算法
2.负梯度拟合
3.损失函数
4.回归
5.二分类,多分类
6.正则化
7.优缺点
8.sklearn参数
9.应用场景
1.前向分布算法
在学习模型时,每一步只学习一个基函数及其系数,逐步逼近优化函数式,从而简化优化的复杂度。
2.负梯度拟合
针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为
$r_{ti} = -\bigg[\frac{\partial L(y_i, f(x_i)))}{\partial f(x_i)}\bigg]_{f(x) = f_{t-1}\;\; (x)} $
利用(xi,rti)(i=1,2,..m)(xi,rti)(i=1,2,..m),我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域Rtj,j=1,2,...,JRtj,j=1,2,...,J。其中J为叶子节点的个数。
针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值ctjctj如下:


从而本轮最终得到的强学习器的表达式如下:

通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。
3.损失函数
对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:
a) 如果是指数损失函数,则损失函数表达式为
$L(y, f(x)) = exp(-yf(x))$
b) 如果是对数损失函数,分为二元分类和多元分类两种.
对于回归算法,常用损失函数有如下4种:
a)均方差,这个是最常见的回归损失函数了
$L(y, f(x)) =(y-f(x))^2$
b)绝对损失,这个损失函数也很常见

对应负梯度误差为:

c)Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:
对应的负梯度误差为:
d) 分位数损失。它对应的是分位数回归的损失函数,表达式为

其中θ为分位数,需要我们在回归前指定。对应的负梯度误差为:
对于Huber损失和分位数损失,主要用于健壮回归,也就是减少异常点对损失函数的影响。
4.回归
输入是训练集样本$T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\}$, 最大迭代次数T, 损失函数L。
输出是强学习器f(x)输出是强学习器f(x)
1) 初始化弱学习器$f_0(x) = \underbrace{arg\; min}_{c}\sum\limits_{i=1}^{m}L(y_i, c) $
2) 对迭代轮数t=1,2,...T有:
a)对样本i=1,2,...m,计算负梯度
$r_{ti} = -\bigg[\frac{\partial L(y_i, f(x_i)))}{\partialf(x_i)}\bigg]_{f(x) = f_{t-1}\;\; (x)} $
b)利用$(x_i,r_{ti})\;\; (i=1,2,..m)$, 拟合一颗CART回归树,得到第t颗回归树,其对应的叶子节点区域为$R_{tj}, j =1,2,..., J$。其中J为回归树t的叶子节点的个数。
c) 对叶子区域j =1,2,..J,计算最佳拟合值
$c_{tj} = \underbrace{arg\; min}_{c}\sum\limits_{x_i \in R_{tj}} L(y_i,f_{t-1}(x_i) +c) $
d) 更新强学习器
$f_{t}(x) = f_{t-1}(x) + \sum\limits_{j=1}^{J}c_{tj}I(x \in R_{tj}) $
3) 得到强学习器f(x)的表达式$f(x) = f_T(x) =f_0(x) + \sum\limits_{t=1}^{T}\sum\limits_{j=1}^{J}c_{tj}I(x \in R_{tj}) $
5.二分类,多分类
二分类
对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:$L(y, f(x)) = log(1+ exp(-yf(x))) $
其中$y \in\{-1, +1\}$。则此时的负梯度误差为
$r_{ti} = -\bigg[\frac{\partial L(y, f(x_i)))}{\partialf(x_i)}\bigg]_{f(x) = f_{t-1}\;\; (x)} = y_i/(1+exp(y_if(x_i))) $
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
$c_{tj} = \underbrace{arg\; min}_{c}\sum\limits_{x_i \in R_{tj}} log(1+exp(-y_i(f_{t-1}(x_i) +c))) $
由于上式比较难优化,我们一般使用近似值代替
$c_{tj} =sum\limits_{x_i \in R_{tj}}r_{ti}\bigg /\sum\limits_{x_i \in R_{tj}}|r_{ti}|(1-|r_{ti}|) $
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。
多分类
多元GBDT要比二元GBDT复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为K,则此时我们的对数似然损失函数为:
$L(y, f(x)) = - \sum\limits_{k=1}^{K}y_klog\;p_k(x) $
其中如果样本输出类别为k,则$y_k=1$。第k类的概率$p_k(x)$的表达式为:
$p_k(x) = exp(f_k(x)) \bigg / \sum\limits_{l=1}^{K}exp(f_l(x)) $
集合上两式,我们可以计算出第$t$轮的第$i$个样本对应类别$l$的负梯度误差为
$r_{til} =-\bigg[\frac{\partial L(y_i, f(x_i)))}{\partialf(x_i)}\bigg]_{f_k(x) = f_{l, t-1}\;\; (x)} = y_{il} - p_{l, t-1}(x_i) $
观察上式可以看出,其实这里的误差就是样本$i$对应类别$l$的真实概率和$t-1$轮预测概率的差值。
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
$c_{tjl} = \underbrace{arg\; min}_{c_{jl}}\sum\limits_{i=0}^{m}\sum\limits_{k=1}^{K}L(y_k, f_{t-1, l}(x) + \sum\limits_{j=0}^{J}c_{jl} I(x_i \in R_{tj})) $
由于上式比较难优化,我们一般使用近似值代替
$c_{tjl} = \frac{K-1}{K} \; \frac{\sum\limits_{x_i \in R_{tjl}}r_{til}}{\sum\limits_{x_i \in R_{til}}|r_{til}|(1-|r_{til}|)} $
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同
6.正则化
GBDT的正则化主要有三种方式:
第一种是和Adaboost类似的正则化项,即步长(learning rate)。定义为$\nu$,对于前面的弱学习器的迭代$f_{k}(x) = f_{k-1}(x) + h_k(x) $
如果我们加上了正则化项,则有$f_{k}(x) = f_{k-1}(x) + \nu h_k(x) $
$\nu$的取值范围为$0 - 1 $。对于同样的训练集学习效果,较小的$\nu$意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。
使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。
第三种是对于弱学习器即CART回归树进行正则化剪枝。
7.优缺点
GBDT主要的优点有:
1) 可以灵活处理各种类型的数据,包括连续值和离散值。
2) 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
8.sklearn参数
class sklearn.ensemble.
GradientBoostingClassifier
(
loss=’deviance’, 可选: {‘deviance’, ‘exponential’}, optional (default=’deviance’),优化的损失函数
learning_rate=0.1, float, optional (default=0.1),学习率
n_estimators=100, int (default=100),boosting的数量
subsample=1.0, float, optional (default=1.0),下采样的比率
criterion=’friedman_mse’, string, optional (default=”friedman_mse”),衡量分类质量的标准
min_samples_split=2, int, float, optional (default=2),分支的最少量
min_samples_leaf=1, int, float, optional (default=1),每个分支样本的最少量
min_weight_fraction_leaf=0.0, float, optional (default=0.),最小分支权重
max_depth=3, integer, optional (default=3),树的最大深度
min_impurity_decrease=0.0, float, optional (default=0.),如果该分裂导致杂质的减少大于或等于该值,则将分裂节点。
min_impurity_split=None, float, (default=1e-7),树停止分裂的条件
init=None, estimator, optional,初始化模型方法,fit or predict
random_state=None, int, RandomState instance or None, optional (default=None),打乱样本时选用的随机种子
max_features=None, int, float, string or None, optional (default=None),在寻找最佳分支时,考虑的
verbose=0, int, default: 0,启用详细输出
max_leaf_nodes=None, int or None, optional (default=None),最大叶子节点
warm_start=False,bool, default: False,是否使用已有的模型进行优化
presort=’auto’, bool or ‘auto’, optional (default=’auto’),是否对数据进行排序以加快数据的寻找速度
validation_fraction=0.1, float, optional, default 0.1,验证集的比率
n_iter_no_change=None, int, default None,当验证集分数不在提高时,是否提前停止
tol=0.0001,float, optional, default 1e-4,提前停止优化的标准
)
9.应用场景
进阶:2.GBDT算法梳理的更多相关文章
- 转载:GBDT算法梳理
学习内容: 前向分布算法 负梯度拟合 损失函数 回归 二分类,多分类 正则化 优缺点 sklearn参数 应用场景 转自:https://zhuanlan.zhihu.com/p/58105824 G ...
- GBDT算法梳理
1.GBDT(Gradient Boosting Decision Tree)思想 Boosting : 给定初始训练数据,由此训练出第一个基学习器: 根据基学习器的表现对样本进行调整,在之前学习器做 ...
- GBDT算法原理深入解析
GBDT算法原理深入解析 标签: 机器学习 集成学习 GBM GBDT XGBoost 梯度提升(Gradient boosting)是一种用于回归.分类和排序任务的机器学习技术,属于Boosting ...
- 机器学习系列------1. GBDT算法的原理
GBDT算法是一种监督学习算法.监督学习算法需要解决如下两个问题: 1.损失函数尽可能的小,这样使得目标函数能够尽可能的符合样本 2.正则化函数对训练结果进行惩罚,避免过拟合,这样在预测的时候才能够准 ...
- 机器学习技法-GBDT算法
课程地址:https://class.coursera.org/ntumltwo-002/lecture 之前看过别人的竞赛视频,知道GBDT这个算法应用十分广泛.林在第八讲,简单的介绍了AdaBoo ...
- 工业级GBDT算法︱微软开源 的LightGBM(R包正在开发....)
看完一篇介绍文章后,第一个直觉就是这算法已经配得上工业级属性.日前看到微软已经公开了这一算法,而且已经发开python版本,本人觉得等hadoop+Spark这些平台配齐之后,就可以大规模宣传啦~如果 ...
- GBDT 算法:原理篇
本文由云+社区发表 GBDT 是常用的机器学习算法之一,因其出色的特征自动组合能力和高效的运算大受欢迎. 这里简单介绍一下 GBDT 算法的原理,后续再写一个实战篇. 1.决策树的分类 决策树分为两大 ...
- GBDT算法
GBDT通过多轮迭代,每轮迭代产生一个弱分类器,其中弱分类器通常选择为CART树,每个分类器在上一轮分类器的残差基础上进行训练. 对于GBDT算法,其中重要的知识点为: 1.GBDT是梯度下降法从参数 ...
- 梯度提升树GBDT算法
转自https://zhuanlan.zhihu.com/p/29802325 本文对Boosting家族中一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 简 ...
随机推荐
- 【转】 Android xml中 @和?区别,style和attr小结
引用资源时,使用@还是?的区别,例如在设置style的时候既可以使用@也可以使用? style="?android:attr/progressBarStyleHorizontal" ...
- 在yii中使用memcache
yii中可以很方便的使用memcache 一.配置在main.php的components中加入cache配置 array( 'components'=>array( 'cache'=>a ...
- virtualbox+vagrant学习-2(command cli)-3-vagrant destroy命令
Destroy 格式: vagrant destroy [options] [name|id] 此命令会停止vagrant管理的正在运行的机器,并销毁在机器创建过程中创建的所有资源.在运行这个命令之后 ...
- ethers.js-4-Contracts
Contracts A Contract is an abstraction of an executable program on the Ethereum Blockchain. A Contra ...
- Android利用fidller进行网络抓包
http://www.oschina.net/question/221817_129716?fromerr=z7ZX9oZR http://www.trinea.cn/android/android- ...
- Opencv——级联分类器(AdaBoost)
API说明: cv::CascadeClassifier::detectMultiScale(InputArray image,//输入灰度图像 CV_OUT std::vector<Rect& ...
- 论文笔记 Robust face landmark estimation under occlusion
1. Abstract 现实世界中的人脸很多时候都存在遮挡以及大的形状变化,而目前的人脸关键点检测方法在这种情况下表现欠佳, 因为它们未能提供一种系统的方法来处理异常.因而authors提出一种新的方 ...
- Mysql基础知识—索引
公司最近开始尝试进行改革,如何活跃团队气氛.开发就给我们说了一些算是科普类的数据库知识,下面参杂自己的理解,方便自己后续翻看. 1.什么是索引 索引在MySQL中也叫做“键”,是存储引擎用于快速找 ...
- Ext4文件系统架构分析(一)
本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外.整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等 ...
- overflow:hidden 影响inline-block元素周围元素下移
前言: 最近在切页中,我想实现左边一个类似下拉选框,且不允许输入,右边有一段垂直居中的文字描述的效果.我对文字用的是p标签.其实可以用个i/b/em等其他行内标签,同时也具有一定语义,做为强调提示,( ...