boosting 3大算法总结
之前的两篇文章 adaboost 原理 和 boosting原理 写完后,感觉还是没有特别弄明白boost,所有就有了本文。
集成学习
首先我们需要知道什么是集成学习? 集成学习是通过训练弱干个弱学习器,并通过一定的结合策略,从而形成一个强学习器。
整个过程有两个难点:
- 如何得到若干个个体学习器
- 如何选择一种结合策略
先来看第一个问题如何获取个体学习器,在选择上有两个:
- 同质学习器,例如随机森林都使用cart树
- 异质学习器,例如使用不同的分类器,最终采取投票的方式
其中用的比较多的是同质学习器。同质学习器按照个体学习器之间是否存在依赖关系可以分为两类:
- 第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法;
- 第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。
本文重点讲boosting算法。
boosting基本原理
关于boosting算法,我们需要知道其中最有名的3个算法:
- Adaboost(Adaptive Boosting)
- GBM(Gradient Boosting Machine)
- XGBoost
GBM
我们先来看 GBM ,其思路是逐步提升,怎么理解呢?
我们先看来梯度提升算法:首先给定一个损失函数 L(y,F(x)),其输入是训练对:(x1,y1),(x2,y2),...,(xn,yn),目标是找到最优的F(x),使得损失函数L最小,按照传统梯度下降的方法,我们会将训练数据(xi,yi)带入,然后求L对参数的偏导,再用负梯度进行参数更新:
![\theta](https://i-blog.csdnimg.cn/blog_migrate/932a0710af9c050d1e2911329995322c.png)
![\theta](https://i-blog.csdnimg.cn/blog_migrate/932a0710af9c050d1e2911329995322c.png)
![\phi](https://i-blog.csdnimg.cn/blog_migrate/16d13de3b6ac0d62f4b4ebb227891422.png)
针对上面 和
的求取上,有两种成熟的方法:
- Gradient Descent
- Newton’s Method
也就分别对应了 GBM 和 XGBoost,先来讲 GBM。
我们对 和
极小值的求取上,在 fm上采取一阶泰勒展开,此时求倒数得到:
那根据一阶泰勒,此时求loss的极小值,相当让f沿着负梯度的方向走,则必然随着f的迭代,loss是减小的,现在我们来总结下问题:
我们将已知输入数据从 (xi,yi) 转变到了 (xi,-gm(xi)),我们现在要用函数 去拟合 (xi,-gm(xi)),并且评判标准如下:
当我们学习到了,我们再去看最佳步长应该是多少:
总结下整个过程:
有了上面这个过程后,我们还有一步需要确认的是怎么求最优的 ,现在我们假设
是树模型,此时我们需要学习 树的结构以及每个叶子节点的权重。
先来学习树结构.
我们假设树可以分为T个节点,并且每个节点权重为wj,则:
现在当我们学习到真正的树结构后,我们再去重新学习最优的树权重:
Adaboost
我们在Adaboost原理一文中给出了算法流程:
- 1)如何计算学习误差率e?
- 2 ) 如何得到弱学习器权重系数α?
- 3)如何更新样本权重D?
- 4 ) 使用何种结合策略?
第一个问题:学习误差率e的计算,第m个弱分类器的误差率为训练集上的加权错误率:
提升方法
以上内容是我们在文章 Adaboost 原理中讲的,我们本文来看看其实怎么符合上文GBM原理的.GBM的算法原理如下:
![\alpha_m , G_m](https://i-blog.csdnimg.cn/blog_migrate/6b174ce4dadedd467bb1ea42e42a9b23.png)
![\alpha_m , G_m](https://i-blog.csdnimg.cn/blog_migrate/6b174ce4dadedd467bb1ea42e42a9b23.png)
![\alpha_m](https://i-blog.csdnimg.cn/blog_migrate/e02ad5ecd305a41a31c77692d9b718d4.png)
XGBOOST
XGBOOST希望直接求解下面的式子从而得到最优的fm
总结
本文介绍了boosting算法中最著名的3个算法
- Adaboost(Adaptive Boosting)
- GBM(Gradient Boosting Machine)
- XGBoost
并且介绍了Adaboost是GMB中损失函数为指数损失的特例,后续还会有两篇文章,一篇介绍adaboost 算法的变种,另一篇结合代码来介绍3个算法。
你的鼓励是我继续写下去的动力,期待我们共同进步。
参考
Tree Boosting With XGBoost: Why Does XGBoost Win “Every” Machine Learning Competition?