轮回Pan Refinitiv创新实验室ARGO
“本文作者为Argo特约AI专家, 含有大量有些难度数学公式,预计阅读时间15分钟”
XGBoost自2014年由陈天奇博士提出以来,2015年便开始在kaggle的竞赛中频频发力,绝大多数冠军团队都使用了这一算法。它可靠、灵活,而且准确。在大多数的回归和分类问题上,XGBoost的实际表现都十分耀眼,因此在工作中大家可能频繁接触到这一算法。之前作者看了陈天奇博士的XGBoost论文和相应的Slides,翻译和总结了一些内容,所以才有了这篇文章。
因为XGBoost的提出基于前辈们对于机器学习算法的不断开拓创新,是分阶段进化的产物,所以本文将从这几个阶段逐层展开:
- 集成算法与Boosting
- 决策树与CART树
- Gradient Boosting算法与GBDT
- XGBOOST
一 集成算法与Boosting
之前ARGO讲随机森林算法时,我们曾提到过随机森林算法是Bagging算法,是集成算法的一种表现形式。而Boosting算法,则是集成算法的另外一种典型的形式。
集成算法的历史可以追溯到Valiant和 Kearns提出了 PAC学习模型,在这个模型中,两人提出了 弱学习器是否可以和强学习器等价的问题。因为一旦等价,就意味着从此以后,人们不必在花费大量的代价去追寻强学习器,而可以依靠某种固定的方式把弱学习器提升为强学习器。1990年, Schap ire构造出一种多项式级的算法 ,对该问题做了肯定的证明,这也是最初的Boosting算法的原型。自此,机器学习领域的提升算法开始繁荣发展。
集成算法有两个基本的要求:一 弱学习器不能太弱(低于50%的正确率),二 各个弱学习器不同。Bagging和Boosting两种集成算法在训练得到不同的弱学习器上,采用了不同的方法。Bagging对每个弱学习器训练时,使用训练样本的随机放回采样,各个弱学习器使用的训练样本分布类似,但是样本不全相同,最后在使用弱学习器投票产生结果时权重一样,注重的是减少拟合的方差。Boosting算法的弱学习器训练不抽样,而且只能顺序进行,其训练依赖上次的弱学习器的结果。比如基于改变样本权重的AdaBoost,每次弱学习器的训练结果里,错分的样本将增加权重,分对的样本减少权重。这样,其投票权重也是按照其正确率各有不同,拟合上注重的是减少其偏差。在Boosting算法中,还有典型的在下文介绍的Gradient Boosting,其基于梯度下降方法计算得到不同的弱学习器。
Boosting算法是一种广义加法模型,在Boosting算法里,选择不同的损失函数会有不同的具体的算法:
比如大家熟知的AdaBoost是指数损失函数,而今天所说的XGBoost,则以Gradient Boosting为基础。Boosting算法的弱学习器原则上没有要求,任何的弱学习器都可以跟Boosting算法集成。但是在工程实践中,一般会选用简单的树。XGBoost对于传统GBDT做了优化优化,继承了其选用CART树作为其弱分类器的算法模型。
二 决策树与CART树
决策树之前已经着重讲过ID3, 对于其他类型的树也有了一