上次讲到GBDT,就不得不提到现在应用最广泛,效果也是数一数二的XGBoost,我们可以用统一的视角看待它们,因为它们本质上其实是一样的,可以把XGBoost看作GBDT的工程实现。
如果非要说一些区别的话,最明显的是,GBDT使用了一阶泰勒公式展开(梯度下降/最速下降),而XGBoost使用了二阶泰勒公式展开(牛顿法),但是这些并不影响它们其实是同样的东西。如果你很熟悉下面的基础知识,那么可以直接跳到XGB部分。
从泰勒公式说起
泰勒公式是一个用函数在某点的信息描述其附近取值的公式。
基本形式:
一阶泰勒展开:
二阶泰勒展开:
假设 ,将
在
处进行泰勒展开
,针对这个公式进行不同处理,就能分别得到梯度下降和牛顿法。
梯度下降
在机器学习任务中,需要最小化损失函数L(θ),其中θ是要求解的模型参数。梯度下降是一种迭代求解方法:选取初值,不断迭代,更新θ的值,进行损失函数极小化。
迭代公式:
将在
处进行泰勒一阶展开:
要使得,可取
,平方乘以一个负数一定是负数嘛。
很巧,形式正好就是“学习率 x 负梯度”,则
。
学习率(或者步长)可以用线性搜索的方法确定,但是一般是直接赋一个比较小的值。
牛顿法
将在
处进行泰勒二阶展开:
假设参数是标量(一维):
可将一阶导数和二阶导数分别记为g和h:
,求该函数的极小值
注:(1)函数极小值的一阶必要条件:若x*是f(x)的一个极小点,则必有 f ' (x*) = 0
(2)函数极小值的二阶必要条件:若x*是f(x)的一个极小点,则必有 f ' (x*) = 0 && f '' (x*) > 0
即让极小,可令
故,所以