你听说过XGBoost吗

2019-06-19 20:16:53 浏览数 (1)

这是个深度学习的时代,传统的机器学习算法仿佛已经失去了往日的光彩,你能随处听到卷积神经网络、循环神经网络以及其他各种net,偶尔听到的机器学习算法也是支持向量机,逻辑回归。今天给大家介绍一个自出生便统治数据科学界的王者——XGBoost算法,往期文章中我们分析过该算法的基本原理,本文让我们来看一下为什么XGBoost如此强大。

什么是XGBoost

XGBoost 是一种基于决策树的集成机器学习算法,它基于Boosting框架。虽然在涉及非结构化数据(图像,文本等)的预测问题中,人工神经网络倾向于优于所有其他算法或框架。但是当涉及到中小型结构/表格数据时,基于决策树的算法目前被认为是最好的。基于树的算法从最初的决策树开始,通过不断的改进,其发展历程如下:

XGBoost算法是华盛顿大学的研究开发项目。由2016年陈天奇和Carlos Guestrin在SIGKDD会议上发表的论文提出。自推出以来,该算法不仅赢得了众多Kaggle比赛的胜利,而且还成为几个尖端行业应用的引擎驱动力。其中有一个强大的数据科学家社区为XGBoost开源项目做出贡献,在GitHub上有大约350个贡献者和大约3600个提交。该算法具有以下特点:

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

为什么强大

XGBoost和Gradient Boosting Machines都是集合树方法,都基于梯度下降来提升弱学习器(通常是CART)。但不同的是,XGBoost在GBM的基础上通过系统优化和算法增强改进了GBM框架已达到更好的效果。

系统优化

  • 并行化:XGBoost使用并行化实现来处理。为了减少运行时间,通过初始化所有实例的全局扫描和使用并行线程排序来交换循环的顺序,可以抵消计算中的并行化开销。
  • 树修剪:GBM框架内树分裂的停止标准本质上是贪婪的,取决于分裂点的负损失标准。XGBoost首先使用'max_depth'参数限制分裂,然后开始向后修剪树。这种“深度优先”方法显着提高了计算性能。
  • 硬件优化:该算法旨在有效利用硬件资源。这是通过在每个线程中分配内部缓冲区来存储梯度统计信息来实现缓存感知来实现的。诸如“核外”计算等进一步增强功能可优化可用磁盘空间,同时处理不适合内存的大数据帧。

算法增强:

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

没有对比就没有伤害

没有对比就没有伤害,不那个数据集练练都显得很虚。所以我们使用Scikit-learn的Make_Classification数据包创建了一个包含20个特征的100万个数据点的随机样本来测试了几种算法,如Logistic回归,随机森林,标准梯度提升和XGBoost。通过比较其准确率和训练时间来直观说明XGBoost的强大,看图:

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

竞争对手

机器学习在数据挖掘中的使用是目前一个热门研究方向,在进行数据处理时,除了选择强大的算法,参数的调整以及数据特征处理也是非常重要的。此外,选择算法还有其他几个考虑因素,例如计算复杂性,可解释性和易于实现,这也是机器学习能否用于实际生活的重要因素。目前微软研究院发布的LightGBM框架以及Yandex开发的CatBoost框架都相对于XGBoost做了改进,但在一个在预测性能,灵活性,可解释性和实用性方面都优于XGBoost的框架诞生之前,XGBoost仍然占据数据分析的江湖。

0 人点赞