一、xgboost的介绍
xgboost以及后续的lightGBM等在我的认知中算是目前数据挖掘中最常用的预测算法,在各种数据挖掘比赛中获得了Top的名次。如果想从事数据挖掘相关的岗位,该算法是一定要好好掌握的。
xgboost其实可以认为是GBDT算法的工程实现,GBDT的全名是Gradient Boosting Decision Tree,就是梯度提升树。该算法的逻辑是:首先训练一颗树,然后计算出每个样本的误差(也叫梯度),通过去拟合误差训练下一颗树,一直拟合直到训练结果符合要求。下图是GBDT算法的步骤图。
xgboost虽然大家都说是GBDT的工程实现,但是在很多地方都是做了不少优化的:
1、目标函数的二阶泰勒展开
xgboost与GBDT都是每一步都只优化当前模型,然后将所有模型加起来:
目标函数为:
其中𝐿为损失函数, 是所有树的累加结果。
是每棵树的正则项(xgb引入了正则项,因此目标函数加上了结构化风险)。
与GBDT的一阶不同,xgboost采用了二阶展开,这其实就是优化算法的改进,同时拟合一阶误差和二阶误差有利于提升精度。
二阶展开:
其中可以将 的结果视为
,
视为
,
为
的函数。我们将
展开,重新得到我们的目标函数:
在每次更新的时候,前𝑚−1个模型已经是确定了的,因此上面的式子中只有 是未知的(其实也就是我们即将生成的𝑚棵树)。我们将常数部分稍微处理以下:
其中:
也就是每个样本的前𝑚−1棵树与最终结果之间的一阶导数和二阶导数。在第𝑚−1树已经确定了的情况下,是很容易计算出来的。