目录
XGBoost
算法层面
什么是 XGBoost
GBDT是什么
GBDT中的GB
为何选择 XGBoost?
XGBoost 的优势和属性
XGBoost 和数据科学家
为何 XGBoost 在 GPU 上表现更出色
XGBoost + RAPIDS
GPU 加速的 XGBoost
NVIDIA是什么
使用 Spark + XGBoost 的 GPU 加速端到端数据流程
XGBoost
XGBoost 是一个开源软件库,在梯度提升框架下执行优化的分布式梯度提升机器学习算法。
该算法在GBDT的基础之上,在算法层面和系统设计层面都做了一些创新性的改进,可以把XGBoost看作是GBDT更好更快的实现
算法层面
(1)在GBDT目标函数的基础上,在对优化目标求解的时候使用了二阶导数的信息,因此会使优化目标的定义更加精确,训练速度会更快;此外,XGBoost在优化目标函数中加入了正则项,这会限制模型的复杂度,防止过拟合的发生。
(2)提出了一种处理缺失值的算法,XGBoost能够自动对缺失值进行处理
(3)在树生成选择特征划分节点的时候,通过加权分位数草图算法,预先对每个特征建立候选的划分节点,不在使用原先的贪婪算法(遍历每个特征所有取值),从而大大加快训练速度
系统设计层面
(1)对训练的每个特征排序并且以块(block)的结构存储在内存中,方便后续训练迭代重复使用,减少计算量。对于不同的特征的特征划分点,XGBoost分别在不同的线程中并行选择分裂的最大增益,从而实现了并行训练。
(2)提出了一种有效的缓存感知块结构用于树模型的核外学习
下面我们将分别对上述5项进行分析。
什么是 XGBoost?
即极端梯度提升,是可扩展的分布式梯度提升决策树 (GBDT) 机器学习库。XGBoost 提供并行树提升功能,是用于回归、分类和排名问题的先进机器学习库。
首先掌握 XGBoost 所构建的机器学习概念和算法(监督机器学习、决策树、集成学习和梯度提升)对理解 XGBoost 至关重要。
监督式机器学习使用算法来训练模型,利用标签和特征在数据集中查找模式,然后使用经过训练的模型预测新数据集特征上的标签。
决策树可创建一个模型,该模型通过评估 If-Then-Else True/False 特征问题树来预测标签,并估算做出正确决策的概率所需的最少问题数量。
决策树可用于利用分类来预测类别,或利用回归来预测连续数值。在以下简单示例中,决策树用于根据卧室的大小和数量(特征)来估算房价(标签)。
GBDT是什么
GBDT是Gradient Boosting Decision Tree的简写,中文为梯度提升决策树,是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。
GBDT中的GB
GB代表的是Gradient Boosting,意为梯度提升,梯度是一种数学概念,一个函数的梯度方向是函数上升最快的方向,相反的,负梯度方向是函数下降最快的方向。
梯度提升决策树 (GBDT) 是一种类似于随机森林的决策树集成学习算法,用于分类和回归。
集成学习算法结合了多种机器学习算法,可获得更出色的模型。
随机森林和 GBDT 都构建了由多个决策树组成的模型。不同之处在于树的构建和组合方式。
随机森林使用一种名为 Bagging 的技术,通过数据集的随机自助抽样样本并行构建完整的决策树。最终得到的预测结果是所有决策树预测结果的平均值。
术语“梯度提升”源自“提升”或改进单个弱模型的理念,通过将单个弱模型与大量其他弱模型相结合,生成统一的强大模型。梯度提升是提升的扩展,其中附加生成弱模型的过程被正式确定为目标函数上的梯度下降算法。梯度提升为下一个模型设定了目标结果,以尽可能减少错误。每个案例的目标结果都基于与预测相关的误差梯度(因此称为梯度提升)。
GBDT 以迭代方式训练一组浅层决策树,每次迭代都使用上一个模型的残差拟合下一个模型。最终预测是所有树预测的加权和。
随机森林“Bagging”可大幅减少差异和过拟合,
GBDT“Boosting”则可减少偏差和欠拟合。
XGBoost 是一种可扩展且高度准确的梯度提升实现,它突破了提升树算法的计算能力极限,主要用于提升机器学习模型性能,提高计算速度。使用 XGBoost 时,树是并行构建的,而不是像 GBDT 那样按顺序构建。XGBoost 遵循 level-wise 策略,扫描梯度值并使用这些部分和来评估训练集中每个可分割点的分割质量。
为何选择 XGBoost?
由于帮助个人和团队赢得了几乎所有 Kaggle 结构化数据竞赛,XGBoost 在过去几年中获得了极大的青睐。在这些竞赛中,公司和研究人员发布数据,之后统计师和数据挖掘者竞争生成预测和描述数据的优质模型。
最初构建了 XGBoost 的 Python 和 R 的执行。由于 XGBoost 的流行,如今 XGBoost 已经实现了为 Java、Scala、Julia、Perl 和其他语言提供包。这些执行向更多的开发者开放了 XGBoost 库,并提高了它在 Kaggle 社区中的吸引力。
XGBoost 的优势和属性
XGBoost 的优势和属性列表非常丰富,包括以下内容:
- 全球积极为 XGBoost 开源开发做出贡献的数据科学家数量庞大,且正在不断增长
- 在广泛的应用中使用,包括解决回归、分类、排名和用户定义的预测挑战中的问题
- 一个高度可移植的库,目前在 OS X、Windows 和 Linux 平台上运行
- 支持 AWS、Azure、Yarn 集群和其他生态系统的云集成
- 在各个垂直市场领域的多个组织中积极生产使用
- 一个专为高效、灵活和可便携而构建的库
XGBoost 和数据科学家
对于数据科学家来说,值得注意的是,与其他算法相比,XGBoost 和 XGBoost 机器学习模型在预测性能和处理时间方面具有出色的组合。各种基准研究都证实了这一点,并进一步解释了它对数据科学家的吸引力。
为何 XGBoost 在 GPU 上表现更出色
使用 XGBoost 处理由 CPU 提供动力的机器学习任务实际上可能需要数小时才能运行。这是因为创建高度准确的一级预测结果需要创建数千个决策树,并测试大量参数组合。
图形处理器或 GPU 配备由数千个小型高效核心组成的大规模并行架构,可以同时启动数千个并行线程,能够强力支持计算密集型任务。
NVIDIA 开发了 RAPIDS™,这是一个开源的数据分析和机器学习加速平台,或完全在 GPU 中执行端到端数据科学训练流程。它依赖于 NVIDIA CUDA® 基元进行低级别计算优化,但通过用户友好型 Python 界面实现 GPU 并行结构和高内存带宽。
RAPIDS 专注于分析和数据科学的常见数据准备任务,提供了一个熟悉的 DataFrame API,与 scikit-learn 和各种机器学习算法集成,无需支付典型的序列化成本。这可加速端到端流程(从数据准备到机器学习,再到深度学习)。RAPIDS 还包括对多节点、多 GPU 部署的支持,大大加快了对更大规模数据集的处理和训练。
XGBoost + RAPIDS
RAPIDS 团队与 Distributed Machine Learning Common (DMLC) XGBoost 组织密切合作,而且 XGBoost 现已包含无缝嵌入式 GPU 加速。这显著提升了模型训练的速度,并提高了预测的准确性。
XGBoost 现基于 GoAI 接口标准而构建,从 cuDF、cuPY、Numba、PyTorch 等提供零拷贝数据导入。Dask API 可轻松扩展到多个节点或多个 GPU,并且 RAPIDS 内存管理器 (RMM) 与 XGBoost 集成,因此您可以共享单个高速内存池。
GPU 加速的 XGBoost
GPU 加速的 XGBoost 算法利用并行前缀快速求和运算来扫描所有可能的分割,并通过并行基数排序对数据进行重新分区。此算法为给定的提升迭代构建决策树,一次生成一层,并在 GPU 上同时处理整个数据集。
NVIDIA是什么
NVIDIA是GPU(图形处理器)的发明者,也是人工智能计算的引领者。我们创建了世界上最大的游戏平台和世界上最快的超级计算机。我们是自动驾驶汽车,智能机器和物联网的大脑。
使用 Spark + XGBoost 的 GPU 加速端到端数据流程
NVIDIA 深知,大规模机器学习可为数据科学家和开发者以及最终用户提供强大的预测能力。但这种大规模学习取决于克服本地和云基础设施面临的关键难题,例如加速海量数据的预处理,然后加速计算密集型模型训练。
NVIDIA 首次发布的 Spark-XGBoost 支持跨 Apache Spark 节点的 XGBoost 机器学习模型的训练和推理。这有助于使其成为企业级分布式机器学习的先进机制。
GPU 加速的 Spark XGBoost 提高了海量数据的预处理速度,允许在 GPU 显存内实现更大的数据量,并缩短了 XGBoost 的训练和调优时间。