XGBoost全名叫(eXtreme Gradient Boosting)极端梯度提升,或者叫极值梯度提升算法,经常被用在一些比赛中,其效果显著。它是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包。XGBoost 所应用的算法就是 GBDT(gradient boosting decision tree)的改进,既可以用于分类也可以用于回归问题中。GBDT和xgboost在竞赛和工业界使用都非常频繁,GBDT是以决策树(CART)为基学习器的GB算法,xgboost扩展和改进了GDBT,xgboost算法更快,准确率也相对高一些。现在Kaggle 大赛的情况基本是这样的,凡是非结构化数据相关,比如语音、图像,基本都是深度学习获胜,凡是结构化数据上的竞赛,基本都是 XGBoost 获胜。Xgboost可以说集成思想达到顶峰的一个模型,至少目前是这样,所以学习机器学习算法,掌握这个是很有必要的。
学习Xgboost之前,需要了解决策树,集成学习,GBDT等算法的概念,会帮助更好的去理解Xgboost。
Gradient boosting回顾
机器学习中学习算法的目标是为了优化或者说最小化loss Function, Gradient boosting的思想是迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,后面的模型Fm+1(x)Fm+1(x)基于前面学习模型F_{m}(x)的的效果生成的,关系如下:
Fm+1(x)=Fm(x)+h(x),1
GB算法的思想很简单,关键是怎么生成h(x)h(x)。如果目标函数是回归问题的均方误差,很容易想到最理想的h(x)h(x)应该是能够完全拟合y−Fm(x)y−Fm(x),这就是常说基于残差的学习。残差学习在回归问题中可以很好的使用,但是为了一般性(分类,排序问题),实际中往往是基于loss Function 在函数空间的的负梯度学习,对于回归问题残差和负梯度也是相同的。因此基于Loss Function函数空间的负梯度的学习也称为“伪残差”。
回顾GBDT的回归算法迭代的流程:
输入是训练集样本:T={(x,y1),(x2,y2),...,(xm,ym)}T={(x,y1),(x2,y2),...,(xm,ym)}, 最大迭代次数TT, 损失函数LL。
输出是强学习器:f(x)f(x)是一颗回归树。
1) 初始化弱学习器(估计使损失函数极小化的常数值,它是只有一个根节点的树,一般平方损失函数为节点的均值,而绝对损失函数为节点样本的中位数):
f0(x)=argminc∑i=1mL(yi,c)f0(x)=argminc∑i=1mL(yi,c)
2) 对迭代轮数t=1,2,...,T有(即生成的弱学习器个数):
(2.1)对样本i=1,2,...,m,计算负梯度(损失函数的负梯度在当前模型的值将它作为残差的估计,对于平方损失函数为,它就是通常所说的残差;而对于一般损失函数,它就是残差的近似值(伪残差)):
rti=−[∂L(yi,f(xi)))∂f(xi)]f(x)=ft−1(x)rti=−[∂L(yi,f(xi)))∂f(xi)]f(x)=ft−1(x)
(2.2)利用