从头到尾理解树模型(二):GBDT

image.png

看上图,首先对集成学习有一个宏观的认识。
三种基本的集成方法:Bagging、Boosting和Stacking。分别产生了Random Forest(随机森林),AdaBoost和GBDT。

1. 集成学习(Ensemble Learning)

集成学习是指将多个基学习器(弱学习器)结合来完成学习任务。通过模型集成,一般会获得比单个基学习器更好的效果。集成学习的原则是 “好而不同”。根据个体学习器的生成方式,可以分为两类。

  1. 个体学习器间存在强依赖关系,串行生成的序列化方法,Boosting
  2. 个体学习器间不存在强依赖关系,并行生成的方式,Bagging

1.1 Boosting

工作机制:

  1. 数据集D,首先训练一个弱分类器(学习算法),然后对着同一个数据集进行迭代;
  2. 队训练样本进行调整,第一次预测错误的样本,我们增加它的权重,然后降低预测正确样本的权重;
  3. 对这个调整过后的数据集,重新训练分类器;
  4. 将每个基学习器加权求和

Boosting算法是一种加法模型。

AdaBoost

AdaBoost是Adaptive Boosting的缩写,针对同一个训练集训练不同的学习模型,然后将不同的这n个模型,带权相加。AdaBoost是Boosting的经典算法, 主要给出了每一个权重更新的迭代公示。

AdaBoost Vs GBDT:

相同: 都是Boosting算法,均是迭代求解,都是前向分步算法;
不同: GBDT限定CART树,AdaBoost可使用决策树,NN等基分类器,迭代思路不同

  • GBDT:已知前一轮的弱学习器ft1(x)f_{t-1}(x),损失函数L(y,f(x))L(y, f(x))。找到一个弱学习器ht(x)h_t(x)使得损失函数最小。L(y,ft(x))=L(y,ft1(x)+ht(X)L(y, f_t(x)) = L(y, f_{t-1}(x) + h_t(X)
  • AdaBoost:训练前一轮的学习器后,根据错误率,修改数据分布权值,扩大分错数据的权重,重新训练学习器。

1.2 Bagging

Bagging与Boosting有着明显的不同,主要体现在样本的选取,和基学习器的训练与相加上。

考虑数据集DDDD具有mm个样本,我们对数据进行有放回的随机采样(自助采样法),得到具有m个样本的数据集,重复同样的工作T次,便可以得到T个m样本数的数据集。然后对每个训练样本集训练,得到不同的基学习器,对基学习器平均,即得到总的模型。

算法流程图如下:

Bootsing VS Bagging:

算法 Boosting Bagging
采样方法 对同一个数据集迭代,不断增加训练错误样本的权重 m次有放回采样得到具有m个样本采样集
代表算法 AdaBoost、GBDT Random Forest
样本权重 不同 相同
基学习器权重 不同 相同
作用 降低偏差 降低方差
并行 不支持 支持
过拟合 容易过拟合 不容易过拟合

2. GBDT(Gradient Boosting Decision Tree)

这里介绍的GBDT特指,“Greedy Function Approximation:A Gradient Boosting Machine”中提出的算法,使用了一阶展开,也就是梯度下降进行优化。通产情况下,GBDT(Gradient Boosting Decision Tree)泛指所有的梯度提升树算法,也就包括XGBoost和LightGBM。

2.1 提升树(Boosting Tree)

讲解GBDT之前首先明白什么是提升树。
什么是提升树:
提升树是一个以决策树为基模型的Boosting方法,是一个加法模型。

加法模型:
fM(x)=m=1MT(x,θm)f_M(x) = \sum_{m=1}^MT(x, \theta_m)
T(x,θm):T(x, \theta_m):第m颗决策树;θm:\theta_m:决策树参数;M:M:树的个数。

回归问题的提升树算法:

输入:训练集,T=(x1,y1),(x2,y2)...(xn,yn)T={(x_1, y_1), (x_2, y_2)...(x_n, y_n)}
输出:提升树,fM(x)f_M(x)

  1. 初始化 f0(x)=0f_0(x) = 0;
  2. m=1,2,3...Mm = 1,2,3...M
    (1) 计算残差:rmi=yifm1(xi)r_{mi} = y_i -f_{m-1}(x_i);
    (2) 拟合残差rmir_{mi}学习一个回归树,得到T(x;θm)T(x; \theta_m);
    (3) 更新fm(x)=fm1(x)+T(x;θm)f_m(x) = f_{m-1}(x) + T(x; \theta_m)
  3. 回归问题提升树:fM(x)=m=1MT(x,θm)f_M(x) = \sum_{m=1}^MT(x, \theta_m)

为什么要拟合残差:
首先提升树是一个加法模型,fm(x)=fm1(x)+T(x;θm)f_m(x) = f_{m-1}(x) + T(x; \theta_m)
前向分步算法中第m步,给定fm1(x)f_{m-1}(x),求解参数即求Loss最小化:
θ=argmin(L(yi,fm(x)))=argmin(L(yi,fm1(x)+T(x;θm)))\theta = argmin(\sum L(y_i, f_m(x))) = argmin(\sum L(y_i, f_{m-1}(x) + T(x; \theta_m)))

平方误差损失函数:L(y,f(x))=(yf(x))2L(y, f(x)) = (y-f(x))^2
代入上式:L(yi,fm1(x)+T(x;θm))=(yfm1(x)T(x;θm))2L(y_i, f_{m-1}(x) + T(x; \theta_m)) = (y - f_{m-1}(x) - T(x;\theta_m))^2
rmi=yifm1(xi)r_{mi} = y_i -f_{m-1}(x_i)即为我们要拟合的。

回归问题下,损失函数是MSE,优化简单,但是对于复杂的损失函数,优化并不是那么容易。因此Freidman提出梯度提升的算法,使用负梯度来作为残差的近似值,拟合回归树,进而引出我们的GBDT。

2.GBDT算法原理:

2.1 GBDT回归算法:

输入:训练集样本T=(x1,y1),(x2,y2)...(xn,yn)T={(x_1, y_1), (x_2, y_2)...(x_n, y_n)},最大迭代次数T, 损失函数L
输出:提升树,fM(x)f_M(x)

  1. 初始化:f0(x)=argmin(L(yi,c))f_0(x) = argmin(\sum L(y_i, c))
  2. t=1,2,3...mt = 1,2,3...m
    (1) 计算负梯度:
    rti=[L(yi,f(xi))f(xi)]f(x)=fm1(x)r_{ti} = -[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}
    (2) 利用(xi,rti),(t=1,2,3..m)(x_i, r_{ti}), (t=1,2,3..m) , 拟合一颗CART回归树,得到第t颗回归树,其对应的叶子节点区域为Rtj,j=1,2...JR_{tj}, j=1,2...J。其中J为回归树t的叶子节点的个数
    (3) 对每一个叶子区域计算最佳拟合值:ctj=argmincxiRtjL(yi,ft1(xi)+c)c_{t j}=\underbrace{\arg \min }_{c} \sum_{x_{i} \in R_{t j}} L\left(y_{i}, f_{t-1}\left(x_{i}\right)+c\right)
    (4) 更新强学习器:ft(x)=ft1(x)+j=1JctjI(xRtj)f_{t}(x)=f_{t-1}(x)+\sum_{j=1}^{J} c_{t j} I\left(x \in R_{t j}\right)
  3. 得到强学习器f(x):f(x):
    f(x)=fT(x)=f0(x)+t=1Tj=1JctjI(xRtj) f(x)=f_{T}(x)=f_{0}(x)+\sum_{t=1}^{T} \sum_{j=1}^{J} c_{t j} I\left(x \in R_{t j}\right)

2.2 GBDT二分类问题:

二分类问题和回归问题大部分是相同的,只是损失函数不同。使用Logloss作为损失函数:
损失函数:
L(yi,Fm(xi))=yilogpi+(1yi)log(1pi)L(y_i,F_m(x_i))=−{y_ilogp_i+(1−y_i)log(1−p_i)}
概率:
pi=11+e(Fm(xi))p_i=\frac{1}{1+e(−F_m(x_i))}
代入化简:
L(yi,Fm(xi))=yilogpi+(1yi)log(1pi)=yiFm(xi)log(1+eFm(xi))L(y_i,F_m(x_i))=−{y_ilogp_i+(1−y_i)log(1−p_i)}=−{y_iF_m(x_i)−log(1+e^{F_m(x_i)})}

参考资料:

[1] GBDT算法原理以及实例理解
[2] GBDT(MART) 迭代决策树入门教程 | 简介
[3] Boosting Decision Tree入门教程
[4] 决策树系列(五)——CART
[5] 梯度提升树GBDT原理
[6] 数据挖掘十大算法之CART详解
[7] 梯度提升树(GBDT)原理小结
[8] 集成学习之Adaboost算法原理小结
[9] GBDT原理与Sklearn源码分析-分类篇
[10] GBDT原理与Sklearn源码分析-回归篇
[11] GBDT原理与实践-多分类篇

发布了75 篇原创文章 · 获赞 173 · 访问量 31万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览