集成学习之Boosting

集成学习ensemble learning 又叫集成模型、模型融合、多分类器系统、基于委员会的学习,是KDD CUP、Kaggle等竞赛的神器。简单说,通过构建并结合多个学习器来完成学习任务。

本篇短文只介绍集成学习的Boosting方法。其中,GBM(Gradient Boosting Machine),或称为Boosted Tree、GBDT、GBRT或LambdaMART等,指利用梯度提升方法的树结构算法。XGBoost全称是 eXtreme Gradient Boosting(极限梯度提升)。它是 GBM的一个c++ 实现,作者为正在华盛顿大学研究机器学习的大牛陈天奇,毕业于上海交通大学ACM班,从事大规模机器学习研究。XGBoost的改进是一点一滴来的,是一篇篇论文的积累,很多方法并非XGBoost第一次提出,可以说XGBoost把算法和系统实现都做得淋漓尽致。

参考资料/推荐读物

【目录】

集成学习之Boosting参考资料/推荐读物泰勒公式梯度下降法(Gradient Descend Method)牛顿法(Newton's Method)从参数空间到函数空间从梯度下降到梯度提升(GBM)从牛顿方法到牛顿提升(XGBoost)Boosting算法CART分类回归树GBDT算法原理XGBoost算法原理

泰勒公式

泰勒公式,通俗来讲是"用多项式函数去逼近光滑函数"。在实际应用中,当我们对精度的要求并不太高的时候可以截断多项式函数,从而获得某点附近取值的估计。常用来求近似值、误差估计、建立数值计算格式等等。在本篇中,梯度下降法和牛顿法都利用了泰勒展开。

梯度下降法(Gradient Descend Method)

在机器学习任务中,需要最小化损失函数,其中是要求解的模型参数。梯度下降法常用来求解这种无约束最优化问题,它是一种迭代方法:选取初值,不断迭代,更新的值,进行损失函数的极小化。

牛顿法(Newton's Method)

牛顿法同梯度下降类似,也是一种最优化方法,并且,与梯度下降法相比,牛顿法利用了泰勒二阶展开。

从参数空间到函数空间

从梯度下降到梯度提升(GBM)

在函数空间,某些函数是做不到梯度下降的,例如,树结构的算法在函数空间上实质是分段函数。因此,需要借用梯度下降的思想,产生了梯度提升算法。

从牛顿方法到牛顿提升(XGBoost)

借鉴梯度提升算法,XGBoost的核心是利用牛顿方法在参数空间转换到函数空间。

Boosting算法

综上所述,Boosting 算法是一种加法模型(additive training),模型公式:,其基分类器常采用回归树[Friedman 1999]和逻辑回归[Friedman 2000]。

接下来,我们从CART最基本的回归树开始介绍,从而到GBDT和XGBoost

CART分类回归树

CART回归树,也叫分类回归树(Classification and regression tree),与决策树不同的是,在每个叶子节点包含一个分数。

GBDT算法原理

Friedman J H. Greedy Function Approximation: A Gradient Boosting Machine[J]. Annals of Statistics, 2001, 29(5):1189-1232.

Friedman于论文” Greedy Function Approximation…”中最早提出GBDT,其模型F定义为加法模型:

其中,x是输入样本,h是分类回归树(CART),w是分类回归树参数,是每棵树的权重。

通过最小化损失函数求解最优模型:

XGBoost算法原理

Tianqi Chen and Carlos Guestrin. XGBoost: A Scalable Tree Boosting System. In 22nd SIGKDD Conference on Knowledge Discovery and Data Mining, 2016

XGBoost先是在Github上公开使用,后来由陈天奇写论文公开。

image.png

image.png

image.png

所以我们的算法也很简单,我们不断地枚举不同树的结构,利用这个打分函数来寻找出一个最优结构的树,加入到我们的模型中,再重复这样的操作。不过枚举所有树结构这个操作不太可行,所以常用的方法是贪心法,每一次尝试去对已有的叶子加入一个分割。对于一个具体的分割方案,我们可以获得的增益可以由如下公式计算

image.png

对于每次扩展,我们还是要枚举所有可能的分割方案,如何高效地枚举所有的分割呢?我假设我们要枚举所有 x<a 这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。

image.png

我们可以发现对于所有的a,我们只要做一遍从左到右的扫描就可以枚举出所有分割的梯度和GL和GR。然后用上面的公式计算每个分割方案的分数就可以了。