XGBoost是Boosting算法的一种,Boosting算法的核心思想就是将许多基模型加在一起,形成一个强分类器。XGBoost就是将许多的CART树结合在一起,对于那些一颗树无法很好拟合的数据用多颗CART树不断地去逼近。本文从Boosting方法-->BDT(提升树)-->GBDT(梯度提升树)-->XGBoost的脉络来描述XGBoost.
一 Boosting
Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个基函数系列,然后以一定的方式将他们组合成一个预测函数。所以Boosting是一系列算法,其中包含AdaBoost,GradientBoosting,LogitBoost等算法。Boosting算法有两个重要的要素:加法模型和前向分步算法。
1.1 加法模型
加法模型可以表达成如下的形式:
其中,表示基模型,表示样本集,表示基模型的参数,表示基模型的系数。如果要能够应用加法模型,则要求这个选取的基模型是要可加的,一般来说我们会选择树模型或者线性模型来作为基模型,不太适合选取较复杂的模型。既然有了模型的表达式,那么要构造模型,只需要给出经验风险然后极小化经验风险即可,经验风险最小化可以表达为如下形式:
从上面这个式子可以看出,要求得极小值还是比较复杂的,因为L中还有一个求和函数,所以这个时候引入前向分步算法来转换成迭代的方式来一步步的逼近最优值。前向分步算法的基本思想:从一个最基础的基模型开始,逐步优化,每次学习只学习一个基函数及其系数,逐步逼近上述目标函数,具体的,每一步只需要优化如下:
1.2 前向分步算法
前向分步算法的伪代码如下:
算法 1. 前向分步算法
输入:训练集,其中,损失函数,基函数集合
输出:加法模型
第1步:构造初始模型
第2步:对于
1.构造每一步迭代的损失函数
2.极小化损失函数
3.更新当前模型