梯度提升树|GBDT
🔖

梯度提升树|GBDT

GBDT模型
GBDT模型
 

提升树|BDT

提升树是以分类树或回归树为基本分类器的提升方法。
提升树模型可以表示为决策树的加法模型:
fM(x)=m=1MT(x;Θm)f_M(x)=\sum_{m=1}^MT(x;\Theta_m)
对分类问题是二叉分类树,对回归问题是二叉回归树。
 

提升树算法:前向分布算法

首先确定初始提升树f0(x)=0f_0(x)=0,第m步的模型是
fm(x)=fm1(x)+T(x;Θm)f_m(x)=f_{m-1}(x)+T(x;\Theta_m)
通过经验风险极小化确定下一颗决策树的参数
Θ^m=argminΘmi=1NL(yi,fm1(xi)+T(xi;Θm))\hat{\Theta}_m=\arg\min_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个高功能的学习算法。
不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。
  • 回归问题:平方误差损失函数
  • 分类问题:指数损失函数
指数损失下的分类提升树
只需将AdaBoost算法中的基本分类器限制为二叉分类树即可。此时的提升树算法是AdaBoost算法的特殊情况。
平方损失下的回归提升树
已知训练数据集T={(x1,y1),(x2,y2),,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N)\},其中实例xiXRnx_i\in \mathcal{X}\subseteq\mathbf{R}^n,标记yiY={1,+1}y_i\in\mathcal{Y}=\{-1,+1\}。如果将输入空间X\mathcal{X}划分为J个互不相交的区域R1,R2,,RJR_1,R_2,\cdots,R_J,并且在每个区域上确定输出的常量cjc_j,那么树可以表示为
T(x;Θ)=j=1JcjI(xRj)T(x;\Theta)=\sum_{j=1}^Jc_jI(x\in R_j)
使用前向分步算法:
f0(x)=0fm(x)=fm1(x)+T(x;Θm),m=1,2,Mf(x)=m=1MT(x;Θm)\begin{aligned}&f_0(x)=0\\&f_m(x)=f_{m-1}(x)+T(x;\Theta_m),\quad m=1,2\cdots,M\\&f(x)=\sum_{m=1}^M T(x;\Theta_m)\end{aligned}
当采用平方损失函数L(y,f(x))=(yf(x))2L(y,f(x))=(y-f(x))^2
L(y,fm1(x)+T(x;Θm))=[yfm1(x)T(x;Θm)]2=[rT(x;Θm)]2\begin{aligned}L(y,f_{m-1}(x)+T(x;\Theta_m))&=[y-f_{m-1}(x)-T(x;\Theta_m)]^2\\&=[r-T(x;\Theta_m)]^2\end{aligned}Θ^m=argminΘmi=1N[riT(xi;Θm)]2\hat{\Theta}_m=\arg\min_{\Theta_m}\sum_{i=1}^N[r_i-T(x_i;\Theta_m)]^2
这里r=yfm1(x)r=y-f_{m-1}(x)即当前模型拟合数据的残差。
因此对于回归问题的提升树算法来说,只需简单地拟和当前模型的残差。
一般损失函数的一般决策问题
当损失函数是指数函数和平方损失函数时,每一步的优化是非常简单的。但对一般损失函数而言,往往优化并不那么容易,则需要通过梯度提升算法优化。
 

梯度提升树|GBDT

GBDT=梯度提升算法+CART回归树GBDT=梯度提升算法+CART回归树
  • GBDT是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或回归的算法。
  • GBDT的核心:利用损失函数的负梯度在当前模型的值[L(yi,f(xi)f(xi)]f(x)=fm1(x)-[\frac{\partial L(y_i,f(x_i)}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}作为回归提升树算法中的残差的近似值,拟合一个回归树。这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解后者全局最优解。
  • GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的负梯度(如果损失函数是平方损失函数,则负梯度就是残差值)的基础上进行训练。
  • 对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。弱分类器一般会选择为CART TREE(也就是分类回归树),由于低方差和高偏差(即模型简单)的要求每个分类回归树的深度不会很深。
 

GBDT回归算法

输入:训练数据集T={(x1,y1),(x2,y2),,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N)\}xiXRnx_i\in \mathcal{X}\subseteq\mathbf{R}^nyiYRy_i\in\mathcal{Y}\subseteq\mathbf{R};损失函数L(y,f(x))L(y,f(x))
输出:回归树f^(x)\hat{f}(x)
  1. 初始化
    1. f0(x)=argminci=1NL(yi,c)f_0(x)=\arg\min_c\sum_{i=1}^N L(y_i,c)
  1. m=1,2,Mm=1,2\cdots,M
    1. i=1,2,Ni=1,2\cdots,N,计算负梯度
      1. rmi=[L(yi,f(xi))f(xi)]f(x)=fm1(x)r_{mi}=-[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}
    2. {(xi,rmi)}N\{(x_i,r_{mi})\}_N拟合一个回归树,得到第m棵树的叶节点区域Rmj,j=1,2,JR_{mj},j=1,2\cdots,J
    3. j=1,2,Jj=1,2\cdots,J计算
      1. cmj=argmincxiRmjL(yi,fm1(xi)+c)c_{mj}=\arg\min_c\sum_{x_i\in R_{mj}}L(y_i,f_{m-1}(x_i)+c)
         
    4. 更新fm(x)=fm1(x)+j=1JmcmjI(xRmj)f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J_m}c_{mj}I(x\in R_{mj})
  1. 得到回归树
    1. f(x)=fM(x)=f0(x)+m=1Mj=1JmcmjI(xRmj)f(x)=f_M(x)=f_0(x)+\sum_{m=1}^M\sum_{j=1}^{J_m}c_{mj}I(x\in R_{mj})
 
GBDT回归树的例子
年龄预测:简单起见训练集只有4个人,A、B、C、D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C、D分别是应届毕业生和工作两年的员工。
如果用一颗传统的回归决策树来训练,会得到如图1所示的结果。
notion image
现在使用GBDT,由于数据太少,我们限定叶子节点最多有两个,即每棵树都只有一个分支,并且限定只学两棵树。我们得到如图2所示的结果。
notion image
既然图1和图2最终效果相同,为何还需要GBDT呢?
答案是为了防止过拟合。
图1为了达到100%精度使用了3个feature(上网时长、时段、网购金额),其中分支"上网时长>1.1h"很显然已经过拟合了,这个数据集上A、B也许恰好A每天上网1.09h,B上网1.15小时,但用上网时长是不是>1.1小时来判断所有人的年龄很显然是很有悖常识的;
图2的boosting虽然用了两棵树,但其实只用了2个feature就搞定了。Boosting的最大好处在于,每一步的残差计算其实变相的增大了分错样本的权重,而已经分对的样本则都趋于0。这样后面的树就能越来越专注那些前面被分错的样本。
 

GBDT分类算法

GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差,因此GBDT分类也是使用的CART回归树。
与回归算法区别在于损失函数的选择:
  • 指数损失函数:此时GBDT退化为Adaboost算法
  • LR对数似然损失函数:也就是用类别的预测概率值和真实概率值的差来拟合损失
需要说明的是,LR的预测值是分类为1的概率pip_i,而GBDT的输出为分类为1的对数几率f(xi)f(x_i)
f(xi)=log(odds)=logpi1pif(x_i)=\log(odds)=\log\frac{p_i}{1-p_i}
 
GBDT二分类
二元GBDT的损失函数和负梯度
第一种形式:
Loss=i=1N(yilog(pi)+(1yi)log(1pi)),yi{0,1}pi=11+exp(f(xi))rmi=[L(yi,f(xi)))f(xi)]f(x)=fm1(x)=yi11+efm1(xi)=yipi,m1\begin{aligned}Loss&=-\sum_{i=1}^N\left(y_i \log \left(p_i\right)+\left(1-y_i\right) \log \left(1-p_i\right)\right),\quad y_i\in\{0,1\}\\p_i&=\frac{1}{1+\exp(-f(x_i))}\\r_{m i}&=-\left[\frac{\left.\partial L\left(y_i, f\left(x_i\right)\right)\right)}{\partial f\left(x_i\right)}\right]_{f(x)=f_{m-1}(x)}=y_i-\frac{1}{1+e^{-f_{m-1}\left(x_i\right)}}=y_i-p_{i,m-1}\end{aligned}
观察该损失函数,有
L(yi,f(xi))={log(1+exp(f(xi)),yi=1log(1+exp(f(xi)),yi=0L(y_i,f(x_i))=\begin{cases}\log(1+\exp(-f(x_i)),\quad &y_i=1\\\log(1+\exp(f(x_i)),\quad &y_i=0\end{cases}
故二元GBDT的损失函数也可以使用以下形式:
Loss=i=1N(log(1+exp(yif(xi)))),yi{1,1}rmi=yi(1+exp(yifm1(xi)))={1pi,m1,yi=1pi,m1,yi=1\begin{aligned}Loss&=\sum_{i=1}^N\left(\log(1+\exp(-y_if(x_i)))\right),\quad y_i\in\{-1,1\}\\r_{m i}&=\frac{y_i} {\left(1+\exp \left(y_i f_{m-1}\left(x_i\right)\right)\right)}=\begin{cases}1-p_{i,m-1}&,&y_i=1\\-p_{i,m-1}&,&y_i=-1\end{cases}\end{aligned}
注意,两者损失函数是等价的,形式不同的原因在于负例是用0表示还是用-1表示。
对于生成的决策树,计算各个叶子结点的最佳残差拟合值:
cmj=argmincxiRmjL(yi,fm1(xi)+c)c_{m j}=\underset{c}{\arg \min } \sum_{x_i \in R_{m j}} L\left(y_i, f_{m-1}\left(x_i\right)+c\right)
由于上式没有封闭解,故一般用近似值替代。
二元GBDT叶子结点的近似残差拟合值
yi{0,1}y_i\in\{0,1\}下的残差拟合值公式为
cmj=xiRmjrmixiRmj(yirmi)(1yi+rmi)c_{mj}=\frac{\sum_{x_i \in R_{m j}} r_{mi}}{\sum_{x_i \in R_{m j}}\left(y_i-r_{m i}\right)\left(1-y_i+r_{m i}\right)}
等价为
cmj=xiRmjrmixiRmjrmi(1rmi)c_{m j}=\frac{\sum_{x_i \in R_{m j}} r_{m i}}{ \sum_{x_i \in R_{m j}}\left|r_{m i}\right|\left(1-\left|r_{m i}\right|\right)}
该公式在yi{0,1}y_i\in\{0,1\}yi{1,1}y_i\in\{-1,1\}时都适用。
两者形式等价
(yirmi)(1yi+rmi)={(rmi)(1+rmi), yi=0,rmi=0pi,m1<0(1rmi)rmi, yi=1,rmi=1pi,m1>0=rmi(1rmi)\left(y_i-r_{m i}\right)\left(1-y_i+r_{m i}\right)=\begin{cases}(-r_{mi})(1+r_{mi})&,\ y_i=0,r_{mi}=0-p_{i,m-1}<0\\(1-r_{mi})r_{mi}&,\ yi=1,r_{mi}=1-p_{i,m-1}>0\end{cases}\\=|r_{m i}|(1-\left|r_{m i}\right|)
近似值推导
假设仅有一个样本(xi,yi)(x_i,y_i),求argmincL(yi,f(xi)+c)\underset{c}{\arg\min} L(y_i,f(x_i)+c)
L(yi,f(xi))=[yilogpi+(1yi)log(1pi)]pi=11+exp(f(xi))L(y_i,f(x_i))=-\left[y_i\log p_i+(1-y_i)\log(1-p_i)\right]\\p_i=\frac{1}{1+\exp(-f(x_i))}
求得pif(xi)=pi(1pi)\frac{\partial p_i}{\partial f(x_i)}=p_i\left(1-p_i\right)
  • L(yi,f(xi))L(y_i,f(x_i))关于f(xi)f(x_i)的一阶导
    • L(yi,f(xi))f(xi)=L(yi,f(xi))pipif(xi)=(yipi1yi1pi)(pi(1pi))=piyi\begin{aligned}\frac{\partial L\left(y_i, f(x_i)\right)}{\partial f(x_i)} & =\frac{\partial L\left(y_i, f(x_i)\right)}{\partial p_i} \cdot \frac{\partial p_i}{\partial f(x_i)} \\& =-\left(\frac{y_i}{p_i}-\frac{1-y_i}{1-p_i}\right) \cdot\left(p_i \cdot\left(1-p_i\right)\right) \\& =p_i-y_i\end{aligned}
  • L(yi,f(xi))L(y_i,f(x_i))关于f(xi)f(x_i)的二阶导
    • 2L(yi,f(xi))f(xi)2=piyipipif(xi)=pi(1pi)\begin{aligned}\frac{\partial^2 L\left(y_i, f(x_i)\right)}{\partial f(x_i)^2} & =\frac{p_i-y_i}{\partial p_i} \cdot \frac{\partial p_i}{\partial f(x_i)} =p_i(1-p_i)\end{aligned}
  • L(yi,fm1(xi)+c)L(y_i,f_{m-1}(x_i)+c)进行二阶泰勒展开
    • L(yi,fm1(xi)+c)L(yi,fm1(xi))+L(yi,fm1(xi))fm1(xi)c+122L(yi,fm1(xi))fm1(xi)2c2L\left(y_i, f_{m-1}(x_i)+c\right)\approx L\left(y_i, f_{m-1}(x_i)\right)+\frac{\partial L\left(y_i, f_{m-1}(x_i)\right)}{\partial f_{m-1}(x_i)} \cdot c+\frac{1}{2} \frac{\partial^2 L\left(y_i, f_{m-1}(x_i)\right)}{\partial f_{m-1}(x_i)^2} c^2
      L(yi,fm1(xi)+c)L(y_i,f_{m-1}(x_i)+c)取极值时,
      cmi=L(yi,fm1(xi))fm1(xi)2(122L(yi,fm1(xi))fm1(xi)2)=yipi,m1pi,m1(1pi,m1)c_{mi}=-\frac{\frac{\partial L\left(y_i, f_{m-1}(x_i)\right)}{\partial f_{m-1}(x_i)}}{2\left(\frac{1}{2} \frac{\partial^2 L\left(y_i, f_{m-1}(x_i)\right)}{\partial f_{m-1}(x_i)^2}\right)}=\frac{y_i-p_{i,m-1}}{p_{i,m-1}\left(1-p_{i,m-1}\right)}
由于残差rmi=yipi,m1r_{mi}=y_i-p_{i,m-1},则
cmi=rmi(yirmi)(1yi+rmi)c_{mi}=\frac{r_{mi}}{(y_i-r_{mi})(1-y_i+r_{mi})}
对于含多个样本的叶子结点j,按照如上过程容易得出
xiRmjL(yi,f(xi)+c)xiRmjL(yi,f(xi))+xiRmj(pi,m1yi)c+12xiRmjpi,m1(1pi,m1)c2\sum_{x_i\in R_{mj}}L(y_i,f(x_i)+c)\approx \sum_{x_i\in R_{mj}}L(y_i,f(x_i))+\sum_{x_i\in R_{mj}}(p_{i,m-1}-y_i)\cdot c+\\\frac{1}{2}\sum_{x_i\in R_{mj}}p_{i,m-1}(1-p_{i,m-1})c^2
则最佳拟合值为
cmi=xiRmj(yipi,m1)xiRmj pi,m1(1pi,m1)=xiRmjrmixiRmj(yirmi)(1yi+rmi)\begin{aligned}c_{mi}&=\frac{\sum_{x_i\in R_{mj}}(y_i-p_{i,m-1})}{\sum_{x_i\in R_{mj}}\ p_{i,m-1}\left(1-p_{i,m-1}\right)}\\&=\frac{\sum_{x_i \in R_{mj}} r_{mi}}{\sum_{x_i \in R_{mj}}(y_i-r_{mi})(1-y_i+r_{mi})}\end{aligned}
GBDT二分类算法
GBDT二分类算法
  1. 初始化第一个弱学习器
    1. f0(x)=logP(y=1x)1P(y=1x)f_0(x)=\log \frac{P(y=1 \mid x)}{1-P(y=1 \mid x)}
      其中P(y=1x)P(y=1 \mid x)是样本中 y=1 的比例,利用先验信息来初始化弱学习器。
  1. m=1,2,,Mm=1,2,\cdots,M
    1. 对每个样本计算伪残差
      1. rmi=yi11+efm1(xi),i=1,2,Nr_{mi}=y_i-\frac{1}{1+e^{-f_{m-1}\left(x_i\right)}},\quad i=1,2\cdots,N
    2. 利用CART回归树拟合数据{(xi,rmi)}N\{(x_i,r_{mi})\}_N,得到第m棵回归树,其对应的叶子结点区域为Rmj,j=1,2,,JmR_{mj},j=1,2,\cdots,J_mJmJ_m为第m颗回归树叶子结点的个数。
    3. 计算每个叶子结点的输出
      1. cmj=xiRmjrmixiRmjrmi(1rmi)c_{m j}=\frac{\sum_{x_i \in R_{m j}} r_{m i}}{ \sum_{x_i \in R_{m j}}\left|r_{m i}\right|\left(1-\left|r_{m i}\right|\right)}
    4. 更新强学习器
      1. fm(x)=fm1(x)+j=1JmcmjI(xRmj)f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J_m} c_{mj} I\left(x \in R_{m j}\right)
  1. 最终强学习器
    1. fM(x)=f0(x)+m=1Mj=1JmcmjI(xRmj)f_M(x)=f_0(x)+\sum_{m=1}^M \sum_{j=1}^{J_m} c_{m j} I\left(x \in R_{mj}\right)
  1. 最终分类模型为
    1. P(y=1x)=11+efM(x)P(y=1|x)=\frac{1}{1+e^{-f_M(x)}}
 
GBDT多分类
多元GBDT的损失函数和负梯度
Loss=i=1Nk=1Kyiklogpikpik=exp(fk(xi))k=1Kexp(fk(xi))rmik=[L(yi,f(xi)))f(xi)]fk(x)=fk,m1(x)=yikpk,m1(xi)\begin{aligned}Loss&=-\sum_{i=1}^N\sum_{k=1}^Ky_{ik} \log p_{ik}\\p_{ik}&=\frac{\exp(f_k(x_i))}{\sum_{k=1}^K\exp(f_k(x_i))}\\r_{m i k}&=-\left[\frac{\left.\partial L\left(y_i, f\left(x_i\right)\right)\right)}{\partial f\left(x_i\right)}\right]_{f_k(x)=f_{k,m-1}(x)}=y_{i k}-p_{k, m-1}\left(x_i\right)\end{aligned}
其中如果样本ii的类别为k,则yik=1,yij=0,jky_{ik}=1,y_{ij}=0,j\neq k
多元GBDT叶子结点的近似残差拟合值
cmjk=K1KxiRmjrmikxiRmjrmik(1rmik)c_{m j k}=\frac{K-1}{K} \frac{\sum_{x_i \in R_{m j}} r_{m i k}}{\sum_{x_i \in R_{mj}}\left|r_{m i k}\right|\left(1-\left|r_{m i k}\right|\right)}
 

GBDT损失函数总结

对于分类算法,常用损失函数函数为以下两种:
  1. 指数损失函数:L(y,f(x))=exp(yf(x))L(y, f(x))=\exp (-y f(x))
  1. 对数损失函数
    1. 二分类:
      L(yi,f(xi))=log(1+exp(yif(xi))),yi{1,1}L(y_i,f(x_i))=\log(1+\exp(-y_if(x_i))),y_i\in\{-1,1\}
      或者
      L(yi,f(xi))=(yilogpi+(1yi)log(1pi)),y{0,1}pi=11+ef(xi)L(y_i,f(x_i))=-\left(y_i\log p_i+(1-y_i)\log(1-p_i)\right),y\in\{0,1\}\\p_i=\frac{1}{1+e^{-f(x_i)}}
      多分类:
      L(yi,f1K(xi))=k=1Kyiklogpikpik=exp(fk(xi))k=1Kexp(fk(xi))L(y_i,f_{1\ldots K}(x_i))=\sum_{k=1}^Ky_{ik} \log p_{ik}\\p_{ik}=\frac{\exp(f_k(x_i))}{\sum_{k=1}^K\exp(f_k(x_i))}
对于回归算法,常用损失函数有以下四种:
  1. 均方差损失函数
    1. L(yi,f(xi))=(yif(xi))2 L(y_i, f(x_i))=(y_i-f(x_i))^2
  1. 绝对损失函数
    1. L(yi,f(xi))=yif(xi)L(y_i, f(x_i))=|y_i-f(x_i)|
  1. Huber损失函数
    1. 它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。
      L(yi,f(xi))={12(yif(xi))2yif(xi)δδ(yif(xi)δ2)yif(xi)>δL(y_i, f(x_i))= \begin{cases}\frac{1}{2}(y_i-f(x_i))^2 & |y_i-f(x_i)| \leq \delta \\ \delta\left(|y_i-f(x_i)|-\frac{\delta}{2}\right) & |y_i-f(x_i)|>\delta\end{cases}
      对应的负梯度残差为
      r(yi,f(xi))={yif(xi)yif(xi)δδsign(yif(xi))yif(xi)>δr\left(y_i, f\left(x_i\right)\right)= \begin{cases}y_i-f\left(x_i\right) & \left|y_i-f\left(x_i\right)\right| \leq \delta \\ \delta \operatorname{sign}\left(y_i-f\left(x_i\right)\right) & \left|y_i-f\left(x_i\right)\right|>\delta\end{cases}
  1. 分位数损失函数
    1. 它对应的是分位数回归的损失函数
      L(yi,f(xi))=yif(xi)θyif(xi)+y<f(xi)(1θ)yif(xi)L(y_i, f(x_i))=\sum_{y_i \geq f(x_i)} \theta|y_i-f(x_i)|+\sum_{y<f(x_i)}(1-\theta)|y_i-f(x_i)|
      其中θ为分位数,需要在回归前指定。
      对应的负梯度残差为
      r(yi,f(xi))={θyif(xi)θ1yi<f(xi)r\left(y_i, f\left(x_i\right)\right)= \begin{cases}\theta & y_i \geq f\left(x_i\right) \\ \theta-1 & y_i<f\left(x_i\right)\end{cases}
其中Huber损失和分位数损失主要用于健壮回归,也就是减少异常点对损失函数的影响。
 
 

GBDT正则化

GBDT的正则化主要有三种方式:
  1. 同AdaBoost正则化一样设置步长ν\nu
    1. 没有正则化的弱学习器的迭代
      fm(x)=fm1(x)+Tm(x)f_m(x)=f_{m-1}(x)+T_m(x)
      加入正则化(学习率)的弱学习器的迭代
      fm(x)=fm1(x)+νTm(x)f_m(x)=f_{m-1}(x)+\nu T_m(x)
      学习率的取值范围为0<ν10<\nu \leq 1,较小的ν\nu意味着需要更多的弱学习器的迭代次数。
      常用步长和迭代最大次数一起来决定算法的拟合效果。
  1. 自采样SGBT,比例取值为(0,1]。
    1. 注意这里的自采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差。因此取值不能太低,推荐在[0.5, 0.8]之间。
  1. CART回归树正则化剪枝
 
 

AdaBoost和GBDT的区别

  1. 学习器的选择
    1. AdaBoost可以选择任何学习器;
      GBDT无论是分类、回归、排序都用的回归树;
  1. 分类任务的输出
    1. AdaBoost弱分类器的输出和集成方法的输出是一致的;
      GBDT用于分类时,叶子结点的输出是对数几率,要输出对应类别的概率,需要通过sigmoid或softmax函数求得。
  1. 损失函数
    1. AdaBoost损失函数用的是指数损失函数;
      GBDT的损失函数可以是任意可微函数;
  1. 原理
    1. AdaBoost通过改变样本数据的权重来影响后续分类器的建立;
      GBDT通过将损失函数的负梯度(即伪残差)作为后续弱分类器的拟合目标。
 

GBDT的优缺点

GBDT主要的优点有:
  1. 高准确性:GBDT具有很高的预测准确性,在各种机器学习竞赛和实际应用中都表现出色。
  1. 鲁棒性:GBDT对于缺失值和异常值具有一定的鲁棒性,不容易被极端值影响,能够处理高维稀疏数据。
  1. 特征选择:GBDT可以通过特征重要性评估,选择对预测结果影响较大的特征,提高模型的解释能力和泛化能力。
  1. 模型可解释性:GBDT中的每个决策树都是基于可解释的特征进行构建的,因此GBDT具有很好的可解释性,能够帮助我们理解数据和预测结果之间的关系。
GBDT的主要缺点有:
  1. 训练时间较长:由于GBDT是一种基于序列的集成算法,难以并行化计算。每次迭代都需要建立一个新的决策树模型,并且每个决策树都需要通过梯度下降算法进行优化,因此训练时间较长。
  1. 容易过拟合:GBDT具有较强的拟合能力,在训练数据上的表现很好,但容易过拟合。为了避免过拟合,需要设置较小的学习率和较少的树的数量。
  1. 需要调整参数:GBDT需要调整多个参数,包括树的数量、树的深度、学习率等,这需要一定的经验和调参技巧。
  1. 对异常值敏感:由于GBDT是基于序列的算法,每次迭代都是在上一次的预测结果基础上进行调整,因此对于异常值比较敏感。
 
 
 
 
 
 
参考链接: