最近学习了xgboost算法,中文翻译过来应该是极限梯度提升算法。由陈天奇所设计的,致力于让提升树突破自身的设计计算极限,以实现快速运算和性能优化为目标。目前在算法比赛平台,排名靠前的解决方案已经被xgboost算法统治。另外在高科技行业和数据咨询行业也开始使用xgboost算法。那么问题来了:相对于GBDT算法,xgboost算法做了哪些改进?
首先,两者在求预测值的方式不同。对于GBDT算法,它的预测值是所有分类器的加权求和:
而对于xgboost来讲,它的预测值是所有弱分类器叶子权重直接求和得到的:
其次,在xgboost算法的损失函数中陈天奇引入了正则项。在普通的梯度提升树中,目标函数是没有使用正则项。但是xgboost借用正则项来修正树模型的天生过拟合这个缺陷。
另外在许多文章里面写到:
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
这个说法我觉得不准确。xgboost算法在运用泰勒展开主要是为了简化公式,其中在泰勒展开部分运用到了二阶求导。但是在求解最佳的树结构过程中,xgboost让目标函数最小化也是求解一阶导数。在这个地方xgboost和GBDT本质上讲是没有任何区别的。所以我觉得上述说法不太准确。