集成学习之boosting,Adaboost、GBDT 和 xgboost(三)

AdaBoost算法的解释——前向分步法与提升树(GBDT)

可以认为AdaBoost算法是模型为加法模型,损失函数为指数函数、学习算法为前向分步算法时的二类分类学习方法。

前向分步算法:

考虑加法模型 f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\displaystyle\sum_{m=1}^{M}β_mb(x;γ_m) f(x)=m=1Mβmb(x;γm) —— (式1)
其中 b ( x ; γ m ) 为 基 函 数 , γ m 为 基 函 数 的 参 数 , β m 为 基 函 数 的 系 数 。 b(x;γ_m)为基函数,γ_m为基函数的参数,β_m为基函数的系数。 b(x;γm)γmβm显然式1 是个加法模型。
在给定训练数据和损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))的条件下,学习加法模型 f ( x ) f(x) f(x)称为经验风险极小化即损失函数极小化问题:
在这里插入图片描述
通常这是一个复杂的优化问题。前向分步算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前往后求解,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,那么就可以简化优化的复杂度。

具体的,每一步只需优化如下损失函数:
在这里插入图片描述
给定训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) … … ( x N , y N ) T={(x_1,y_1),(x_2,y_2)……(x_N,y_N)} T=(x1,y1),(x2,y2)(xN,yN)损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))和基函数的集合{ b ( x ; γ m ) b(x;γ_m) b(x;γm)},学习加法模型 f ( x ) f(x) f(x)的前向分步算法如下:
输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) … … ( x N , y N ) T={(x_1,y_1),(x_2,y_2)……(x_N,y_N)} T=(x1,y1),(x2,y2)(xN,yN);损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))和基函数的集合{ b ( x ; γ m ) b(x;γ_m) b(x;γm)}
输出:加法模型 f ( x ) f(x) f(x)

  1. :初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
    2):对m=1,2……M:
    (a):极小化损失函数
    ( β m , γ m ) = a r g m i n ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (β_m,γ_m)=argmin\displaystyle\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+βb(x_i;γ)) (βm,γm)=argmini=1NL(yi,fm1(xi)+βb(xi;γ))
    得到参数 β m , γ m β_m,γ_m βm,γm
    (b)更新, f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+β_mb(x;γ_m) fm(x)=fm1(x)+βmb(x;γm)
    3)得到加法模型 f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\displaystyle\sum_{m=1}^{M}β_mb(x;γ_m) f(x)=fM(x)=m=1Mβmb(x;γm)

这样,前向分步算法将同时求解从m=1到M的所有参数 β m , γ m β_m,γ_m βm,γm的优化问题简化为逐次求解各个 β m , γ m β_m,γ_m βm,γm的优化问题。

提升树

提升树是以分类树与回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。
提升树模型
提升方法实际是采用加法模型(即基函数的线性组合)与前向分步算法。**以决策树为基函数的提升方法称为提升树。**对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。
提升树模型可以表示成决策树的加法模型:
f M ( x ) = ∑ m = 1 M T ( x ; ⊙ m ) f_M(x)=\displaystyle\sum_{m=1}^{M}T(x;⊙_m) fM(x)=m=1MT(x;m),其中 T ( x ; ⊙ m ) 表 示 决 策 树 ; ⊙ m 表 示 决 策 树 的 参 数 ; M 为 树 的 个 数 T(x;⊙_m)表示决策树;⊙_m表示决策树的参数;M为树的个数 T(x;m)m;M

提升树算法:

提升树采用前向分步算法,首先确定初始提升树 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0,第m步的模型是
f m ( x ) = f m − 1 + T ( x ; ⊙ m ) f_m(x)=f_{m-1}+T(x;⊙_m) fm(x)=fm1+T(x;m)
其中, f m − 1 f_{m-1} fm1是当前模型,通过经验风险最小化确定下一颗决策树的参数 ⊙ m ⊙_m m
⊙ m = a r g m i n ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x ; ⊙ m ) ) ⊙_m=argmin\displaystyle\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+T(x;⊙_m)) m=argmini=1NL(yi,fm1(xi)+T(x;m))
由于树的线性组合可以很好的拟合数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个高功能的学习算法。

下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同
包括用平方误差损失函数的回归问题,用指数损失函数的分类问题呢,以及用一般损失函数的一般决策问题。

对于二类分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类器即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。

下面介绍回归问题的提升树。

已知一个训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … … ( x N , y N ) T={(x_1,y_1),(x_2,y_2),……(x_N,y_N)} T=(x1,y1),(x2,y2),(xN,yN),前面已经讨论了回归树的问题
如果将输入空间划分为 J J J个互不相交的区域 R 1 , R 2 … … R J R_1,R_2……R_J R1,R2RJ,并且在每个区域上确定输出的场景 c j c_j cj,那么树可以表示为:
T ( x ; ⊙ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x;⊙)=\displaystyle\sum_{j=1}^{J}c_jI(x∈R_j) T(x;)=j=1JcjI(xRj)
其中 ,参数 ⊙ = ( R 1 , c 1 ) , ( R 2 , c 2 ) … ( R J , c J ) ⊙={(R_1,c_1),(R_2,c_2)…(R_J,c_J)} =(R1,c1),(R2,c2)RJ,cJ表示树的区域划分和各区域上的常数。J是回归树的复杂度即叶子结点个数。

回归问题的提升树使用以下前向分步算法:
f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
f m ( x ) = f m − 1 ( x ) + T ( x ; ⊙ m ) , m = 1 , 2 … … M f_m(x)=f_{m-1}(x)+T(x;⊙_m), m=1,2……M fm(x)=fm1(x)+T(x;m),m=1,2M
f M ( x ) = ∑ m = 1 M T ( x ; ⊙ m ) f_M(x)=\displaystyle\sum_{m=1}^{M}T(x;⊙_m) fM(x)=m=1MT(x;m)
在前向分步算法的第m步,给定当前模型 f m − 1 ( x ) f_{m-1}(x) fm1(x),需要求解
⊙ m = a r g m i n ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x ; ⊙ m ) ) ⊙_m=argmin\displaystyle\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+T(x;⊙_m)) m=argmini=1NL(yi,fm1(xi)+T(x;m))得到
⊙ m ⊙_m m,即第m颗树的参数。
当采用平方误差损失函数时, L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2其损失变为:
L ( y , f m − 1 ( x ) + T ( x ; ⊙ m ) ) L(y,f_{m-1}(x)+T(x;⊙_m)) L(y,fm1(x)+T(x;m))
= [ y − f m − 1 ( x ) − T ( x ; ⊙ m ) ] 2 =[y-f_{m-1}(x)-T(x;⊙_m)]^2 =[yfm1(x)T(x;m)]2
= [ r − T ( x ; ⊙ m ) ] 2 =[r-T(x;⊙_m)]^2 =[rT(x;m)]2
这里 r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=yfm1(x) 是当前模型拟合数据的残差。所以对回归问题的提升树算法来说,只需要简单的拟合当前模型的残差。

【回归问题的提升树算法】:
输入:训练数据集
输出:提升树 f M ( x ) f_M(x) fM(x)
1)初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
2)对m=1,2,……M
a)按照 r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=yfm1(x)计算残差: r m i = y i − f m − 1 ( x i ) r_{mi}=y_i-f_{m-1}(x_i) rmi=yifm1(xi)是个向量
b)拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; ⊙ m ) T(x;⊙_m) T(x;m)
c)更新 f m ( x ) = f m − 1 + T ( x ; ⊙ m ) f_m(x)=f_{m-1}+T(x;⊙_m) fm(x)=fm1+T(x;m)
3)得到回归问题提升树
f M ( x ) = ∑ m = 1 M T ( x ; ⊙ m ) f_M(x)=\displaystyle\sum_{m=1}^{M}T(x;⊙_m) fM(x)=m=1MT(x;m)
(每棵回归树的获得都和前面提到的回归树构建算法一样)

梯度提升:
提升树利用加法模型与前向分步算法实现学习的优化过程,当损失函数时平方损失和指数损失时,每一步优化很简单。但对一般的损失函数而言,往往每一步优化不那么容易。
针对这一问题,提出了梯度提升算法(gradient boosting).这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
− [ φ L ( y , f ( x i ) ) φ f ( x i ) ] f ( x ) = f m − 1 ( x ) -[\frac{φL(y,f(x_i))}{φf(x_i)}]_{f(x)=f_{m-1}(x)} [φf(xi)φL(y,f(xi))]f(x)=fm1(x)
作为回归问题提升树算法中残差的近似值,拟合一个回归树

(损失函数的负梯度在当前模型的值)(残差)

【梯度提升算法】:
输入:训练数据集 T T T,损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
输出:回归树 f ( x ) f(x) f(x)
(1)初始化
f 0 ( x ) = a r g m i n ∑ i = 1 N L ( y i , c ) f_0(x)=argmin\displaystyle\sum_{i=1}^{N}L(y_i,c) f0(x)=argmini=1NL(yi,c)
(2) 对于m=1,2,……M
(a)对i=1,2,……N,计算
r m i = − φ L ( y , f ( x i ) ) φ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-\frac{φL(y,f(x_i))}{φf(x_i)}]_{f(x)=f_{m-1}(x)} rmi=φf(xi)φL(y,f(xi))]f(x)=fm1(x)
(b)对 r m i r_{mi} rmi拟合一个回归树,得到第m颗树的叶子结点区域 R m j , j = 1 , 2 … … J R_{mj},j=1,2……J Rmj,j=1,2J
©对j=1,2……J,
计算 c m j = a r g m i n ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=argmin\displaystyle\sum_{x_i∈R_{mj}}L(y_i,f_{m-1}(x_i)+c) cmj=argminxiRmjL(yi,fm1(xi)+c)
(d)更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\displaystyle\sum_{j=1}^{J}c_{mj}I(x∈R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)
(3)得到回归树
f ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) f(x)=f_M(x)=\displaystyle\sum_{m=1}^{M}\displaystyle\sum_{j=1}^{J}c_{mj}I(x∈R_{mj}) f(x)=fM(x)=m=1Mj=1JcmjI(xRmj)

算法第1步初始化:估计使损失函数极小化的常数值,它是只有一个根节点的树。
第2步a)计算损失函数的负梯度在当前模型的值,将它作为残差的估计,
第2步b)估计回归树叶子结点区域,以拟合残差近似值。
第2步c)利用线性搜索估计叶子结点区域的值,使得损失函数极小化。
第2步d)更新回归树
第3步得到输出最终模型f(x)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AdaboostGBDTXGBoost和LightGBM都是机器学习常用的集成学习算法Adaboost是一种迭代算法,通过不断调整样本权重和分类器权重,逐步提高分类器的准确率。 GBDT(Gradient Boosting Decision Tree)是一种基于决策树的集成学习算法,通过不断迭代,每次训练一个新的决策树来纠正前面树的错误,最终得到一个强分类器。 XGBoost是一种基于GBDT算法,它在GBDT的基础上引入了正则化和并行化等技术,使得模型更加准确和高效。 LightGBM是一种基于GBDT算法,它采用了基于直方图的决策树算法和互斥特征捆绑技术,使得模型训练速度更快,占用内存更少,同时也具有较高的准确率。 ### 回答2: adaboost(Adaptive Boosting) 是一种基于不同权重的弱分类器的算法,它通过迭代的方式来逐步提高分类器的准确性。在每轮迭代,它会调整训练样本的权重,使得前一轮分类错误的样本在当前轮得到更多的关注。最终,通过组合这些弱分类器来构建一个强分类器。其优点在于不易过拟合,但需要耗费大量的时间来训练和预测。 gbdt(Gradient Boosting Decision Tree) 是一种基于决策树的集成学习算法,它通过迭代的方式来提升分类器的准确性。基于训练样本和实际输出的误差进行梯度下降,将它们作为下一个分类器的训练数据。每个分类器都在之前所有分类器得到的残差的基础上进行训练,并且将它们组合成一个最终的分类器。在训练过程,为了避免过拟合,可以限制决策树的深度等参数,并采用交叉验证等技术。gbdt可以处理缺失数据、不平衡分类和高维度数据等问题,但需要注意过拟合的问题。 xgboost(Extreme Gradient Boosting) 是一种基于决策树的集成学习算法,它在gbdt的基础上引入了正则化项和精细的特征选择,进一步提高了分类器的准确性和效率。通过Hessian矩阵对损失函数进行二阶泰勒展开,引入正则化约束,可以优化损失函数,并通过交叉验证等技术选择最优的超参数。xgboost还支持GPU加速,提高模型训练的速度和效率,但需要更多的计算资源。xgboost在分类、回归和排名任务表现优异,但需要注意过拟合和计算量的问题。 lightgbm是微软旗下一款高效、快速、分布式的梯度提升框架,也是一种基于决策树的集成学习算法,定位在处理高维度数据和大规模数据集上。lightgbm采用了GOSS(Gradient-based One-Side Sampling)技术和EFB(Exclusive Feature Bundling)技术对数据进行处理,大大减少数据的内存占用和训练时间。同时,还支持并行计算和GPU加速,提高了模型的速度和效率。lightgbm在排序、分类、回归等任务表现出色,只是对离群值敏感,需要对数据进行预处理。 ### 回答3: Adaboost,Gradient Boosting Decision Tree (GBDT),XGBoost和LightGBM都是常见的集成学习算法,它们用于提高模型在复杂数据集上的准确度,并处理复杂数据集上遇到的问题。 Adaboost是一种迭代算法,每次迭代它使用提高错误分类样本的加权值,并降低正确分类样本的加权值,以便让前一个弱分类器无法捕捉并由后续分类器学习。Adaboost弱分类器快速训练和预测,且不需要太多超参数调整,但是它倾向于过度拟合数据,并且实力可能不足以解决大型数据集的问题。 GBDT使用决策树作为弱分类器,将每一棵树的预测结果作为下一棵树的预测输入,最后对所有树的预测结果进行加权求和。GBDT可以很好地处理线性和非线性问题,但是它倾向于过度拟合数据,需要进行精细调整参数,并且需要较长时间的训练时间。 XGBoost结合了GBDT的优势和树的强大性质。它采用了一些优秀的技术,如Boosting树算法,Shrinkage,Column Sampling和Pruning Nodes,以提高模型的性能和降低过拟合风险。XGBoost可以处理大规模数据集和高维数据集,并且速度较快,但需要的资源较多,如内存、计算能力和高质量的数据集。 LightGBM是XGBoost的新一代版本,采用了GOI(Gradient-based One-side Sampling)算法和Histogram-based Gradient Boosting方法来加快训练速度和降低内存占用。GOI算法通过对数据进行一侧采样来提高训练速度,而直方图梯度提升方法将节点分裂建模为一个直方图分桶过程,以减少节点分裂的计算成本。LightGBM对大数据集的处理能力很强,速度相对较快,但对于处理小数据集的效果可能不明显。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值