仍然记得15年前参加工作的第一天,刚完成研究生学业的我,加入了一家全球投资银行担任分析师。那天我不停地拉直领带,努力回忆起学过的所有东西,怀疑自己是否足够胜任工作。察觉到我的焦虑,老板微笑着说:

“别担心!你只需要知道回归模型就行了!”

我当时在想,“我知道这个!”。我知道回归模型、线性回归和逻辑回归。老板的说法是对的,在任期内我仅仅建立了基于回归的统计模型。在那个时候,回归建模是预测分析无可争议的女王。15年后,回归建模的时代已经结束。迟暮的女王已经退场,取而代之的是名字时髦、活力满满的新女王XGBoost(Exterme Gradient Boosting,极限梯度提升)。

什么是XGBoost?

XGBoost是基于决策树的集成机器学习算法,使用了梯度提升框架。在涉及非结构化数据(图像、文本等)的预测问题中,人工神经网络往往优于所有其他算法或框架。然而,当涉及到中小型结构化/表格数据时,基于决策树的算法被认为是目前同类中最好的。请参阅下表了解这些年来基于树的算法的发展。

机器学习算法的新女王——XGBoost

基于决策树的XGBoost算法演化

XGBoost算法是华盛顿大学的一个研究项目。陈天奇和Carlos Guestrin在2016年的SIGGDD大会上发的的论文,让机器学习世界如火如荼。自引入以来,该算法不仅赢得了众多的Kaggle竞赛,而且还被认为是若干前沿行业应用的驱动力。因此,有一个强大的数据科学家社区为XGBoost开源项目做出贡献,GitHub上有大约350个贡献者和~3600个提交者。该算法有以下特点:

  1. 应用范围广泛:可用于解决回归、分类、排名和用户自定义预测问题。

  2. 可移植性:在Windows、Linux和os x上运行平稳。

  3. 语言:支持所有主流的编程语言,包括C++、Python、R、java、Scala和Julia。

  4. 云集成:支持AWS、Azure和Yarn集群,与Flink、Spark和其他生态系统配合良好。

如何建立对XGBoost的直觉认识?

决策树,在其最简单的形式,是易于可视化和相当可解释的算法,但为下一代基于树的算法建立直觉可能有点棘手。下面是一个简单的类比,可以更好地理解基于树的算法的发展。

机器学习算法的新女王——XGBoost

照片来Unsplash的rawpixel

想象一下,你是一个招聘经理,面试几位资历优秀的应聘者。基于树的算法进化的每一步都可以看作是面试过程的一个版本。

  1. 决策树:每个招聘经理都有一套标准,比如教育水平、工作年限、面试表现。决策树类似于招聘经理根据自己的标准面试应聘者。

  2. Bagging:现在想象一下,不是一个面试官,而是一个面试小组,每个面试官都有投票权。Bagging聚合包括通过民主投票过程将所有面试官的意见结合起来,以最终做出决定。

  3. 随机森林:这是一种基于Bagging的算法,有一个关键的区别,其中只有一个子集的特征是随机选择的。换言之,每个面试官只会对面试者进行一些随机选择的资格测试(例如,测试编程技能的技术面试和评估非技术技能的行为面试)。

  4. Boosting:这是一种替代方法,每个面试官都会根据前一位面试官的反馈来改变评估标准。这通过部署一个更动态的评估过程来“提升Boosts”面试过程的效率。

  5. 梯度提升:通过梯度下降算法将误差最小化的一种特例,例如,战略咨询公司利用案例面试来淘汰不合格的候选人。

  6. XGBoost:可以把XGBoost看作是对“steroids”的梯度增强(它被称为“极致梯度增强”是有原因的!)。它是软硬件优化技术的完美结合,可以在最短的时间内使用较少的计算资源获得优异的结果。

为什么XGBoost表现如此出色?

XGBoost和Gradient Boosting Machines(GBMs)都是集成树方法,它们采用梯度下降结构来提高弱学习者(CARTs)的学习能力。然而,XGBoost通过系统优化和算法增强改进了基本GBM框架。

机器学习算法的新女王——XGBoost

XGBoost如何优化标准GBM算法

  1. 并行化:XGBoost使用并行化实现序列树的构建过程。这是可能的,因为用于构建基本学习器的循环具有可互换性;外部循环枚举树的叶节点,第二个内部循环计算特征。这是可能的,因为用于构建基本学习器的循环具有可互换性;外部循环枚举树的叶节点,第二个内部循环计算特征。这种循环嵌套限制了并行化,因为没有完成内部循环(对这两个循环的计算要求更高),外部循环就无法启动。因此,为了改进运行时,循环的顺序是通过初始化来交换的,通过对所有实例的全局扫描和使用并行线程进行排序。此开关通过抵消计算中的任何并行化开销来提高算法性能。

  2. 树修剪:GBM框架中的树分裂停止准则本质上是贪婪的,它依赖于分裂点的负损失准则。XGBoost使用指定的“max_depth”参数,而不是先使用条件,然后开始向后修剪树。这种“深度优先”方法显著提高了计算性能。

  3. 硬件优化:此算法旨在有效利用硬件资源。这是通过缓存感知来实现的,通过在每个线程中分配内部缓冲区来存储梯度统计信息。进一步的增强,如“内核外”计算优化可用磁盘空间,同时处理不适合内存的大数据帧。

算法增强:

  1. 正则化:它通过L1脊线L2正则化来惩罚更复杂的模型,以防止过度拟合。

  2. 稀疏性意识:XGBoost通过根据训练损失自动“学习”最佳缺失值,自然地允许输入稀疏特征,并更有效地处理数据中不同类型的稀疏模式。

  3. 加权分位数草图:XGBoost采用分布式加权分位数草图算法,有效地找到加权数据集之间的最佳分割点。

  4. 交叉验证:该算法在每次迭代中都带有内置的交叉验证方法,不需要显式地对该搜索进行编程,也不必指定一次运行中所需的确切的提升迭代次数。

证据在哪里?

我们使用scikitlearn的“Make_nuclassification”数据包创建了一个随机样本,其中有100万个数据点,有20个特征(2个是信息性的,2个是冗余的)。我们测试了一些算法,如Logistic回归、随机森林、标准梯度提升和XGBoost。

机器学习算法的新女王——XGBoost

XGBoost与使用SKLearn的Make_Classification 数据集的其他ML算法的比较

如上图所示,与其他算法相比,XGBoost模型具有最佳的预测性能和处理时间组合。其他严格的基准研究也产生了类似的结果。难怪XGBoost在最近的数据科学竞赛中被广泛使用。

“如有疑问,请使用XGBoost”——Owen Zhang

所以我们应该一直使用XGBoost吗?

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

未来会怎样?

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