XGBoost Algorithm: Long May She Reign!

在这里插入图片描述

XGBoost Algorithm: Long May She Reign!

统治世界的机器学习算法的新王子…

我还记得十五年前我第一份工作的第一天。 我刚完成研究生课程,并以分析师的身份加入了一家全球投资银行。 在我的第一天,我一直拉直领带,并试着记住我学过的一切。 与此同时,在内心深处,我想知道我是否对企业界足够好。 感觉到我的焦虑,我的老板微笑着说:

“别担心! 你唯一需要知道的就是回归模型!“

我记得自己在想,“我得到了这个!”。 我知道回归模型; 线性和逻辑回归。 我的老板是对的。 在我任职期间,我专门建立了基于回归的统计模型。 我并不孤单。 事实上,在那个时候,回归模型是无可争议的预测分析女王。 快进十五年,回归建模的时代已经结束。 老女王已经过去了。 新女王的名字很长,名字很久; XGBoost或Extreme Gradient Boosting!

What is XGBoost?

XGBoost是一种基于决策树的集成机器学习算法,它使用梯度增强框架。 在涉及非结构化数据(图像,文本等)的预测问题中,人工神经网络倾向于优于所有其他算法或框架。 但是,当涉及到中小型结构/表格数据时,基于决策树的算法现在被认为是同类最佳的。 多年来,请参阅下面的图表,了解基于树的算法的演变。
在这里插入图片描述

  • Evolution of XGBoost Algorithm from Decision Trees

XGBoost算法是作为华盛顿大学的研究项目开发的。陈天琪和Carlos Guestrin在2016年的SIGKDD会议上发表了他们的论文,并在火灾中抓住了机器学习世界。自推出以来,该算法不仅赢得了众多Kaggle比赛的胜利,而且还成为几个尖端行业应用的引擎驱动力。因此,有一个强大的数据科学家社区为XGBoost开源项目做出贡献,在GitHub上有大约350个贡献者和大约3,600个提交。该算法通过以下方式区分自己:

  • 广泛的应用:可用于解决回归,分类,排名和用户定义的预测问题。
  • 可移植性:在Windows,Linux和OS X上顺利运行。
  • 语言:支持所有主要的编程语言,包括C ++,Python,R,Java,Scala和Julia。
  • 云集成:支持AWS,Azure和Yarn集群,适用于Flink,Spark和其他生态系统。

How to build an intuition for XGBoost?

决策树以其最简单的形式,易于可视化和可解释的算法,但为下一代基于树的算法建立直觉可能有点棘手。 请参阅下面的简单类比,以更好地了解基于树的算法的演变。
在这里插入图片描述

想象一下,你是一名招聘经理,面试几位具有优秀资历的候选人。 基于树的算法演变的每一步都可以看作是访谈过程的一个版本。

  • Decision Tree: 每个招聘经理都有一套标准,如教育水平,经验年数,面试表现。 决策树类似于招聘经理根据他或她自己的标准面试候选人。
  • Bagging: 现在想象一下,而不是一个面试官,现在有一个面试小组,每个面试官都有一个投票。 套袋或自助聚合涉及通过民主投票过程将来自所有调查员的输入结合起来以做出最终决定。
  • Random Forest: 它是基于布袋的算法,具有关键差异,其中仅随机选择特征的子集。 换句话说,每个面试官只会根据某些随机选择的资格测试受访者(例如,测试编程技能的技术面试和评估非技术技能的行为面试)。
  • Boosting: 这是一种替代方法,每位访调员根据前一位访调员的反馈改变评估标准。 通过部署更加动态的评估流程,“提高”面试流程的效率。
  • Gradient Boosting: 通过梯度下降算法例如增强误差最小化的特殊情况,例如 战略咨询公司利用案例访谈来剔除不太合格的候选人。
  • XGBoost: 将XGBoost视为“类固醇”的梯度增强(因此有人将其称为“极端梯度增强”!)。 它是软件和硬件优化技术的完美结合,可在最短的时间内使用较少的计算资源产生出色的结果。

Why does XGBoost perform so well?

XGBoost和Gradient Boosting Machines(GBMs)都是集合树方法,它们应用了使用梯度下降架构来提升弱学习者(通常是CART)的原理。 但是,XGBoost通过系统优化和算法增强改进了基础GBM框架。

在这里插入图片描述

系统优化:

  • 1 Parallelization: XGBoost使用并行化实现来处理顺序树构建过程。 由于用于构建基础学习者的循环的可互换性,这是可能的。 枚举树的叶节点的外部循环,以及计算特征的第二个内部循环。 这种循环嵌套限制了并行化,因为没有完成内部循环(对两者的计算要求更高),外部循环无法启动。 因此,为了改善运行时间,使用初始化通过所有实例的全局扫描和使用并行线程排序来交换循环的顺序。 此开关通过抵消计算中的任何并行化开销来提高算法性能。
  • 2 Tree Pruning: GBM框架内树分裂的停止标准本质上是贪婪的,取决于分裂点的负损失标准。 XGBoost首先使用’max_depth’参数而不是标准,然后开始向后修剪树。 这种“深度优先”方法显着提高了计算性能。
  • 3 Hardware Optimization: 该算法旨在有效利用硬件资源。 这是通过在每个线程中分配内部缓冲区来存储梯度统计信息来实现缓存感知来实现的。 诸如“核外”计算等进一步增强功能可优化可用磁盘空间,同时处理不适合内存的大数据帧。

算法增强:

  • Regularization:它通过LASSO(L1)和Ridge(L2)正则化来惩罚更复杂的模型,以防止过度拟合。
  • Sparsity Awareness: XGBoost通过根据训练损失自动“学习”最佳缺失值并更有效地处理数据中不同类型的稀疏模式,自然地承认输入的稀疏特征。
  • Weighted Quantile Sketch: XGBoost采用分布式加权分位数草图算法有效地找到加权数据集中的最佳分裂点。
  • Cross-validation: 该算法在每次迭代时都带有内置的交叉验证方法,无需显式编程此搜索,并指定单次运行所需的增强迭代的确切数量。

Where is the proof?

我们使用Scikit-learn的’Make_Classification’数据包创建了一个包含20个特征(2个信息和2个冗余)的100万个数据点的随机样本。 我们测试了几种算法,如Logistic回归,随机森林,标准梯度提升和XGBoost。
在这里插入图片描述
如上图所示,与其他算法相比,XGBoost模型具有预测性能和处理时间的最佳组合。 其他严格的基准研究也产生了类似的结果。 难怪XGBoost在最近的数据科学竞赛中被广泛使用。

“When in doubt, use XGBoost” — Owen Zhang, Winner of Avito Context Ad Click Prediction competition on Kaggle
“如有疑问,请使用XGBoost” - Owen Zhang,Avito上下文广告点击预测竞赛获胜者Kaggle

所以我们要一直使用XGBoost?

谈到机器学习(甚至是生活),没有免费的午餐。 作为数据科学家,我们必须测试所有可能的数据算法,以确定冠军算法。 此外,选择正确的算法是不够的。 我们还必须通过调整超参数为数据集选择正确的算法配置。 此外,选择获胜算法还有其他几个考虑因素,例如计算复杂性,可解释性和易于实现。 这正是机器学习开始从科学走向艺术的地步,但老实说,这就是魔术发生的地方!

What does the future hold?

机器学习是一个非常活跃的研究领域,已经有几种可行的XGBoost替代方案。 微软研究院最近发布了LightGBM框架,用于梯度增强,显示出巨大的潜力。 由Yandex Technology开发的CatBoost已经提供了令人印象深刻的基准测试结果。 我们有一个更好的模型框架,在预测性能,灵活性,可解释性和实用性方面优于XGBoost,这是一个时间问题。 然而,直到一个强大的挑战者出现,XGBoost将继续统治机器学习世界!

                                 --origin by Vishal Morde
                                 --translated by Adam 坤

猜你喜欢

转载自blog.csdn.net/weixin_41697507/article/details/89288235