XGBoost算法原理简析

“Young man, in mathematics you don’t understand things. You just get used to them.”

XGBoost(eXtreme Gradient Boosting)算法是Gradient Boosting算法的高效实现版本,因其在应用实践中表现出优良的效果和效率,因而也被工业界广为推崇。

想要了解XGBoost算法的原理,首先需要理解Boosting算法。简单来说,Boosting算法是将个体学习器集成为更复杂学习器的机器学习方法,它更强调个体学习器之间存在强依赖关系,因此也可认为是串行集成学习方法。相比下,Bagging算法则属于并行集成学习方法。

Boosting算法的基本原理是:首先用初始样本训练一个基学习器,根据学习表现对样本分布进行调整,使得表现差的样本获得更多的关注,然后不断迭代用调整分布后的样本训练下一个基学习器,直到基学习器数量达到指定数目。

Boosting算法族中最著名的即是Freund于1997年提出的AdaBoost算法,可将其理解为“加性模型”,即最终的学习器为t个基学习器的“加权和”模型,每次使用训练错误的样本训练新的基学习器,并通过权重调整降低之前表现不佳的学习器的影响,最终降低集成学习器的结果偏差。

2001年,Freund又提出了Gradient Boosting框架,将损失函数扩展到更一般的情况,即通过梯度计算回归拟合的残差(准确应称之为伪残差),基于该残差生成新的基学习器,并计算其最优的叠加权重值。如果选择基分类器为决策树(如CART树),则对应为GBDT算法。

CART树是分类树,并不满足GB回归损失函数的要求,因此需要将分类GINI系数指标替换为最小均方差,即当所有分枝的预测结果唯一或是达到叶节点数量上限时,以该树所有节点的预测均值作为该分类器的预测结果。此外,GBDT还借鉴了Bagging集成学习的一些思想,例如通过随机抽样提高模型的泛化能力,通过交叉验证选择最优参数等。

2014年,陈天奇博士提出了XGBoost算法,它可认为是在GBDT算法基础上的进一步优化。首先,XGBoost算法在基学习器损失函数中引入了正则项,控制减少训练过程当中的过拟合;其次,XGBoost算法不仅使用一阶导数计算伪残差,还计算二阶导数可近似快速剪枝的构建新的基学习器;此外,XGBoost算法还做了很多工程上的优化,例如支持并行计算、提高计算效率、处理稀疏训练数据等等。

综上分析,XGBoost算法源起于Boosting集成学习方法,在演化过程中又融入了Bagging集成学习方法的优势,通过Gradient Boosting框架自定义损失函数提高了算法解决通用问题的能力,同时引入更多可控参数即可针对问题场景进行优化,最后通过工程实现方面细节优化,在保证算法结果稳定的同时还可高效处理大规模数据,可扩展支持不同编程语言。这些因素共同使它成为了工业界的主流机器学习算法之一

对XGBoost算法意犹未尽的朋友,可在数据小虾米公众号后台回复关键字“xgboost”,下载陈天奇博士的论文PPT细细品味。


数据科学武林风起云涌,
随数据小虾米共闯江湖~

你可能感兴趣的:(实战分析)