机器学习--集成学习GBDT

1. GBDT思想

GBDT也是集成学习Boosting的其中一种,Boosting是由多个弱学习器组成,与bagging不同,Boosting学习器之间有关联的关系。AdaBoost是通过前面的学习器模型来决定当前的学习器模型的每个样本的权重,然后计算出当前学习器组合权重,最后将学习器线性组合起来。而GBDT则是通过不断的最小化样本的残差来达到集成学习的目的,每个弱学习器,都是用于拟合之前学习器中的残差值,所以GBDT是一个串行的模型,并行运算能力比较差。因为是要拟合残差,所以GBDT弱学习器模型是要满足高偏差,低方差的条件,一般都是选择CART(也就是分类回归决策树)作为弱学习器模型。

2. 算法流程

1、构建第一棵树

用样本特征去构建一个CART决策树,叶子节点的取值用贪心的思想,选择使偏差最小的常数。

F0(x)=argminci=1nL(yi,c)

其中 yi 是样本的label, L(,) 表示损失函数,如果是回归问题,可能使用MAE或者MSE,分类问题可能使用对数变换后的0/1损失函数,也就是找到一个合适的常数c,使得这个分类的损失值最小。

2、用负梯度下降的方法计算残差并构建后面的树

αim=L(yi,Fm1(xi))Fm1(xi)

(xi,αim) 组成新的数据,用新的学习器去拟合这组新的数组,再去之前的学习器组合起来,达到减少残差的目的。

Fm(x)=argmincmi=1nL(αim,cm)

3、把所有的学习器叠加起来

Fm(x)=fm1(x)+fm(x)

重复过程直到损失少于一定的值或者迭代次数到一定值。

3. GBDT解决分类问题

为了让GBDT能解决分类问题主要有两种方法:

  • 指数损失函数
  • 类似于逻辑回归的对数似然损失函数

这里讨论第二种,用对数思然函数。

二分类问题

对于二分类的问题,损失函数是:

L(y,f(x))=log(1+exp(yf(x)))

y 为1或者-1,此时,负梯度误差是:
αmi=L(yi,fm1(xi))fm1(xi)=yi1+exp(yif(xi))

各个叶子节点的最佳残差拟合值为:
cmj=argminclog(1+exp(yi(fm1(xi)+c)))

多分类问题

对于二分类的问题,损失函数是:

L(y,f(x))=k=1Kyklogpk(x)

如果类别是k,则 yk 为1,其余情况为0。第k类的概率表达式是,这是一个类似于softmax的函数:
pk(x)=exp(fk(x))Kl=1exp(fl(x))

结合上面两式,求 αmi 的负梯度值:
αmi=yilpl,m1(xi)

4. GBDT的正则化

正则化的手段有三种:控制迭代器步长、加入子采样比例、剪枝

控制迭代器步长

对于每个弱学习器,是为了拟合前面的残差,为了不然拟合程度太大,加入一个拟合步长 v 对拟合程度进行缩放,一般取[0,1]之间。即原来:

fm(x)=fm1(x)+hm(x)

变为:
fm(x)=fm1(x)+vhm(x)

加入子采样比例

第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。

剪枝

第三种是对于弱学习器即CART回归树进行正则化剪枝。

猜你喜欢

转载自blog.csdn.net/xiayto/article/details/79534240
今日推荐