1 什么是提升树(Boosting Decision Tree-BDT)?
提升树模型是以分类树或回归树为基本分类器的提升方法,采用加法模型(即基函数的线性组合)和前向分步算法,对于分类问题的决策树是二叉分类树,对于回归问题的决策树是二叉回归树。
2 什么是加法模型?
提升树可以表示为决策树的加法模型:
image.png
其中,T表示决策树,M为树的个数。
3 什么是前向分步算法?
提升树算法采用前向分步算法。首先确定初始提升树f_0(x)=0,第m步的模型是:
image.png
其中,f_m-1(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数:
image.png
针对不同问题的提升树学习算法,主要区别在于使用的损失函数不同:
- 回归问题:使用平方误差损失函数
- 分类问题:指数损失函数
- 一般决策问题:一般损失函数
4 梯度提升(Gradient Boosting Decision Tree-GBDT)
利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值:
image.png
作为回归问题提升树算法中的残差的近似值,拟合一个回归树。同时,使用梯度法可以使模型尽快收敛。
5 GBDT的算法过程中,为什么要把对残差的拟合,改进成对负梯度的拟合?
提升树(BDT)利用加法模型与前向分步算法实现学习的优化过程,当损失函数是平方损失和指数损失时,每一步的优化都很简单。但对一般损失函数而言,往往每一步优化都不那么容易。针对该问题,提出了梯度提升算法(GBDT),利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值,作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
image.png
从上表中可以看出平方差损失函数虽然容易计算,但是对异常值太敏感,模型过度拟合异常值,降低了模型整体的泛化能力。
采用Square loss为损失函数时,负梯度和残差相等。不过,当我们采用Absolute loss/Huber loss等其它损失函数时,负梯度只是残差的近似。
为什么不直接使用“残差”,而使用“负梯度”呢(注:也有一些实现直接使用“残差”)?因为使用“负梯度”有时能够减小异常点的影响。
5.1 GBDT的求解过程就是梯度下降在函数空间中的优化过程
1.我们能通过一阶泰勒展开证明负梯度方向是下降最快的方向。对于函数f:
则优化函数f时:
image.png
2 在GB中,对损失函数展开
image.png
即
image.png
则在优化L的时候:
image.png
即就是:
image.png
所以需要当前的弱学习器来学习负梯度,这里和GBDT中差了一个μ
3 在1和2中都是随机梯度下降,但不同的是:
1在参数空间中优化,每次迭代得到参数的增量,这个增量就是负梯度乘上学习率
2 在函数空间中优化,每次得到增量函数,这个函数会去拟合负梯度,在GBDT中就是一个个决策树。要得到最终的结果,只需要把初始值或者初始的函数加上每次的增量,所以1的优化过程就是(假设迭代了M次)
4 无论损失函数是什么形式,每个决策树拟合都是负梯度。准确地说,不是用负梯度代替残差,而是当损失函数是平方差损失时,负梯度刚好是残差,残差只是特例。
网友评论