虽然现在深度学习的浪潮席卷了学术界和工业界,但是传统的boosting算法仍值得学习和思考。在一些业务场景下基于树模型的boosting算法仍然发挥着巨大的作用。本文针对这些算法做一个归纳总结,方便个人查阅。
一、Boosting
Boosting 是一类非常经典的集成学习方法,通过集成一系列的基础模型得到加强版的模型,从而对任务有更好的结果。在这一部分我们关注两个算法,分别是 gradient boosting 和 Newton boosting。在介绍这两个算法之前,先简单的回顾一下Gradient Descent 和 Newton‘s method。
用
梯度下降法 使损失函数下降最快的方向是负的梯度。当第
有了方向,步长
然后可以得到
牛顿法 首先
其中
继而有
上面介绍的部分是在参数空间的数值优化,而Boosting算法可以看作是在函数空间的数值优化。用
![956be2ac4ef5ea4cf1ee4c6d0b7dcbe1.png](https://i-blog.csdnimg.cn/blog_migrate/89e9905c0bd4a431cb75764f4156a842.jpeg)
![32a70852de7d093c6f64eade709b2ddb.png](https://i-blog.csdnimg.cn/blog_migrate/3c1dd480b63da45c22abacb9f64f7b76.jpeg)
两种算法都是通过最小化
二、基于树模型的boosting
基于树模型的boosting中一般都采用CART回归树作为基础模型,因为无论是梯度法还是牛顿法都需要用回归的方法拟合目标,即使任务是分类任务,但是每棵树的目标都和梯度有关。CART每次分裂都只分裂两个节点,选择CART的原因可能也是因为其简单。树模型最重要的就是树结构的生成以及叶子结点的输出。当确定好树结构之后,叶子结点的输出为
也就是对于落在第
回到boosting算法,由于树节点都是独立的,因此loss函数可以写成对树节点求和的形式。对于牛顿boosting,有
![fdcc2aed52ad0f5b577a03edac38f6a1.png](https://i-blog.csdnimg.cn/blog_migrate/267d46206ba60a0d063621d53a10c400.jpeg)
进一步的,可以求的下面的公式,其中
![2b8b9f53232e576b1f3eb9031b01fdb2.png](https://i-blog.csdnimg.cn/blog_migrate/fd7e1b4ddb9f040fb61b93777273944b.jpeg)
因此叶节点的输出为
![3616603c53f46790f19cdccd3e879428.png](https://i-blog.csdnimg.cn/blog_migrate/f957a4ebca581eee54c49cc94921a9db.jpeg)
进而分裂的准则为
![d1a0a29e95e7df19817cb68ad59d8e55.png](https://i-blog.csdnimg.cn/blog_migrate/1d499567769e209254184913c336d614.jpeg)
如果是梯度boosting,损失函数为梯度的平方和,也可以写成根据叶节点求和的形式。最终结果为叶节点为
![110268ee2a5a68f7ace816a57ead8ec4.png](https://i-blog.csdnimg.cn/blog_migrate/edcfb34d89018a1c46a201e8944ba12f.jpeg)
但是对于梯度boosting,算出的叶节点输出并不是最终的叶节点输出。而是通过进一步求解
![936bac4af1a808e1ee432426607874ef.png](https://i-blog.csdnimg.cn/blog_migrate/47cbe1e8d58dd85f35bb516475d5b026.png)
得到。但是牛顿boosting可以直接得到叶节点。
三、Gradient Boosting 和 Newton Boosting的对比
梯度boosting和牛顿boosting都是在boosting的框架下的两种算法。梯度boosting拟合的是梯度,而牛顿boosting通过泰勒展开近似来求解最小。正是因为这两个算法的优化目标不同,因此树结构的分裂以及叶子结点的输出也不同。尤其是叶子结点的输出,牛顿boosting可以看作是同时优化树结构和叶节点,而梯度boosting的叶节点通过进一步的求解得到,因此叶节点的输出更准确,但是树结构的准确性会下降。
除此之外,梯度boosting的适用范围会更广,因为只需要loss 函数一阶可微,但是牛顿boosting要二阶可微。不过在实际应用上即使不能二阶可微但可以手动设置Hession矩阵,当然这样准确性会有所下降。
参考文献
- Greedy Function Approximation : A Gradient Boosting Machine
2. Generalized Boosted Models : A guide to the gbm package
3. Tree Boosting With XGBoost. Why Does XGBoost Win "Every" Machine Learning Competition?