本书以机器学习基础知识做铺垫,深入剖析XGBoost的原理、分布式实现、模型优化、深度应用等。
第1~3章使读者对机器学习算法形成整体认知,了解如何优化模型以及评估预测结果,并熟悉常用机器学习算法的实现原理和应用,如线性回归、逻辑回归、决策树、神经网络、支持向量机等。
第4章借助实际案例,讲解如何通过XGBoost解决分类、回归、排序等问题,并介绍了XGBoost常用功能的使用方法。
第5~7章是本书的重点,从理论推导与源码层面深入剖析XGBoost,涵盖XGBoost原理与理论证明、分布式XGBoost的实现、XGBoost各组件的源码解析。
第8~9章为进阶内容,着重解析算法实践与工程应用中的难点,进而帮助读者更好地解决实际问题。
第10章介绍了一些较为前沿的将树模型与其他模型融合的研究方法,以开拓眼界,拓展思路。
1)知名互联网公司工程师撰写,打通高效机器学习脉络,掌握竞赛神器XGBoost
2)以机器学习基础知识做铺垫,深入剖析XGBoost原理、分布式实现、模型优化、深度应用等
大数据时代的今天,基于规则解决具体业务问题的传统方式已无法满足企业需求,机器学习与人工智能逐渐走入人们的视野,并迅速得到了众多企业的广泛关注。各大互联网公司相继成立了自己的机器学习研究院,或建立机器学习团队。然而,随着企业业务规模、数据规模日益扩大,业务类型越来越复杂,怎样在短时间内训练出高准确率的模型,成为许多企业面对的挑战。
在机器学习与人工智能的浪潮中,XGBoost凭借高效、便捷、扩展性强等优势,在众多开源机器学习库中脱颖而出,广受各大企业青睐。目前XGBoost已成为热门的机器学习开源项目之一,拥有强大的社区支持,技术也日趋成熟。
为什么要写这本书
最初写这本书的想法萌生于两年前。当时,一些刚接触XGBoost的同事让我推荐学习资料,但我发现除了英文论文和官方文档外,竟找不到一本XGBoost的入门书籍。当然,论文和官方文档是学习XGBoost的重要参考资料,但对于刚接触机器学习的初学者而言,学习这些资料的成本相对较高。如果没有足够的理论基础,初学者容易一开始就被细节和难点缠住,降低学习的积极性。
XGBoost涉及的相关知识较多,资料比较分散,苦于缺乏一个系统、完整的学习教程可以参考,学习者不得不在搜集资料上耗费大量时间。此外,对于XGBoost的应用也少有完整的案例剖析。想深入理解XGBoost的学习者,只能通过研究项目源码的方式进行学习,这显然不是一个特别高效的学习方式。
为了能够深入理解XGBoost中各个组件的实现原理,笔者也花费了很多时间和精力。在阅读了相关论文文档、深入研究源码并多次实践后,积累了很多学习笔记,对XGBoost也有了自己的理解,由此便萌生了将其整理成书的想法。这样既可以帮助更多的人快速了解和学习XGBoost,使自己的学习所得发挥更大的价值,也可以在梳理所学知识的过程中进一步提升。
本书特色
本书是国内少有的系统、全面地介绍XGBoost技术原理的书籍,以通俗易懂的方式对XGBoost的原理和应用进行介绍,力求帮助读者深入理解XGBoost。
(1)讲授循次而进,符合初学者的认知规律。本书首先介绍机器学习中的常用算法,帮助读者直观地理解算法的基本原理,打下良好的理论基础。然后由浅入深,鞭擗向里,带领读者深入探索机器学习前沿技术。
(2)内容涵盖全面,重视理解深度。本书不仅全面覆盖了决策树、Gradient Tree Boosting、目标函数近似、切分点查找算法等常见内容,还详细讲解了分布式实现、排序学习、模型解释性、DART等内容。
(3)案例实用丰富,帮助读者解决实际遇到的机器学习问题。本书在每个算法讲解之后都配有相应的编程示例,不仅使读者理解算法原理,还有助于提升灵活运用算法的能力。
另外,本书可以作为算法开发人员手边的工具书,在学习和工作的过程中随时查阅参考。
读者对象
人工智能领域的算法工程师
人工智能领域的架构师
其他对机器学习感兴趣的人
如何阅读本书
本书共有10章,具体内容如下。
第1章介绍了何谓机器学习和机器学习中的一些基本概念,以及机器学习应用开发的步骤,并对集成学习的历史发展、XGBoost的应用场景及其优良特性进行了概述。
第2章详细讲解了Python机器学习环境的搭建及常用开源工具包的安装和使用,并以一个简单的示例展示XGBoost的使用方法。
第3章讲述了常用机器学习算法的实现原理和应用,如线性回归、逻辑回归、决策树、神经网络、支持向量机等,使读者对机器学习算法有一个整体认知,同时了解如何在模型训练过程中进行优化、如何对模型结果进行评估。
第4章通过scikit-learn与XGBoost相结合,以实际的案例向读者说明如何通过XGBoost解决分类、回归、排序等问题,并介绍了XGBoost中常用功能的使用方法。
第5章深入介绍XGBoost的实现原理,包括Boosting算法思想、XGBoost目标函数近似、切分点查找算法、排序学习、模型可解释性等内容,从理论上保证XGBoost的有效性,使读者深入理解XGBoost。
第6章详细介绍了分布式XGBoost的实现原理,包括分布式机器学习框架Rabit,XGBoost在Spark、Flink平台的实现,GPU版本的实现等。
第7章从源码的角度深入剖析了XGBoost中各个组件的实现原理,详细介绍了模型训练、预测、解析,以及不同目标函数和评估函数的实现过程。
第8章详细介绍了如何通过模型选择与优化提高模型的泛化能力,从偏差和方差的角度进行了解释,通过交叉验证和Bootstrap等方法来说明模型选择过程,并介绍了常用的超参数优化方法。
第9章通过实际案例分析,使读者能够深入理解XGBoost的特性并灵活运用,能够依据不同场景将XGBoost与其他模型融合,更好地解决实际问题。
第10章介绍了业界或学术界中树模型与其他模型融合的一些研究方法,包括GBDT LR,多层GBDT模型结构mGBDT,树模型与深度学习、强化学习的融合等。
如果你是具有一定机器学习理论基础的从业者,可以跳过前4章的基础部分,直接从第5章开始阅读。如果你是一位机器学习的初学者,并打算在未来深入钻研这个方向,建议系统地阅读本书,并动手实践书中的所有实例。
勘误和支持
由于笔者水平有限,编写时间仓促,书中难免存在一些错误或表达不准确之处,恳请读者批评指正。如果你有更多的宝贵意见,可通过电子邮箱xgbbook2019@163.com联系我,期待得到你们的真挚反馈,让我们在技术之路上互勉共进。
感谢
感谢中国人民大学的杜小勇老师、陈晋川老师,是他们帮我打开了科研的大门,让我体会到钻研知识的乐趣。感谢滴滴出行的李奘、卓呈祥、杜龙志以及所有在工作中帮助过我的同事。感谢机械工业出版社华章公司的高婧雅编辑在本书写作过程中给予我的支持和帮助。
特别感谢本书的第一读者我的爱人高阳,因为写作,我牺牲了很多陪伴她的时间,感谢她的支持和理解,也感谢她帮我进行文稿校对。感谢她一路的支持和陪伴。
何龙
何龙
现就职于滴滴出行,XGBoost开源社区贡献者,专注于人工智能和机器学习领域,从底层算法原理到上层应用实践都有广泛的兴趣和研究。较早接触XGBoost,熟悉XGBoost应用开发,深入阅读源码,具有丰富的项目开发经验。
前言
第1章 机器学习概述1
1.1 何谓机器学习1
1.1.1 机器学习常用基本概念2
1.1.2 机器学习类型3
1.1.3 机器学习应用开发步骤4
1.2 集成学习发展与XGBoost提出5
1.2.1 集成学习5
1.2.2 XGBoost6
1.3 小结7
第2章 XGBoost骊珠初探9
2.1 搭建Python机器学习环境9
2.1.1 Jupyter Notebook10
2.1.2 NumPy11
2.1.3 Pandas18
2.1.4 Matplotlib32
2.1.5 scikit-learn39
2.2 搭建XGBoost运行环境39
2.3 示例:XGBoost告诉你蘑菇是否有毒42
2.4 小结44
第3章 机器学习算法基础45
3.1 KNN45
3.1.1 KNN关键因素46
3.1.2 用KNN预测鸢尾花品种47
3.2 线性回归52
3.2.1 梯度下降法53
3.2.2 模型评估55
3.2.3 通过线性回归预测波士顿房屋价格55
3.3 逻辑回归57
3.3.1 模型参数估计59
3.3.2 模型评估60
3.3.3 良性/恶性乳腺肿瘤预测61
3.3.4 softmax64
3.4 决策树65
3.4.1 构造决策树66
3.4.2 特征选择67
3.4.3 决策树剪枝71
3.4.4 决策树解决肿瘤分类问题71
3.5 正则化75
3.6 排序78
3.6.1 排序学习算法80
3.6.2 排序评价指标81
3.7 人工神经网络85
3.7.1 感知器85
3.7.2 人工神经网络的实现原理87
3.7.3 神经网络识别手写体数字90
3.8 支持向量机92
3.8.1 核函数95
3.8.2 松弛变量97
3.8.3 通过SVM识别手写体数字98
3.9 小结99
第4章 XGBoost小试牛刀100
4.1 XGBoost实现原理100
4.2 二分类问题101
4.3 多分类问题109
4.4 回归问题113
4.5 排序问题117
4.6 其他常用功能121
4.7 小结145
第5章 XGBoost原理与理论证明146
5.1 CART146
5.1.1 CART生成147
5.1.2 剪枝算法150
5.2 Boosting算法思想与实现151
5.2.1 AdaBoost151
5.2.2 Gradient Boosting151
5.2.3 缩减153
5.2.4 Gradient Tree Boosting153
5.3 XGBoost中的Tree Boosting154
5.3.1 模型定义155
5.3.2 XGBoost中的Gradient Tree Boosting156
5.4 切分点查找算法161
5.4.1 精确贪心算法161
5.4.2 基于直方图的近似算法163
5.4.3 快速直方图算法165
5.4.4 加权分位数概要算法167
5.4.5 稀疏感知切分点查找算法167
5.5 排序学习169
5.6 DART174
5.7 树模型的可解释性177
5.7.1 Saabas177
5.7.2 SHAP179
5.8 线性模型原理183
5.8.1 Elastic Net回归183
5.8.2 并行坐标下降法184
5.8.3 XGBoost线性模型的实现185
5.9 系统优化187
5.9.1 基于列存储数据块的并行学习188
5.9.2 缓存感知访问190
5.9.3 外存块计算191
5.10 小结192
第6章 分布式XGBoost193
6.1 分布式机器学习框架Rabit 193
6.1.1 AllReduce193
6.1.2 Rabit195
6.1.3 Rabit应用197
6.2 资源管理系统YARN 200
6.2.1 YARN的基本架构201
6.2.2 YARN的工作流程202
6.2.3 XGBoost on YARN203
6.3 可移植分布式XGBoost4J205
6.4 基于Spark平台的实现208
6.4.1 Spark架构208
6.4.2 RDD210
6.4.3 XGBoost4J-Spark211
6.5 基于Flink平台的实现223
6.5.1 Flink原理简介224
6.5.2 XGBoost4J-Flink227
6.6 基于GPU加速的实现229
6.6.1 GPU及其编程语言简介229
6.6.2 XGBoost GPU加速原理230
6.6.3 XGBoost GPU应用236
6.7 小结239
第7章 XGBoost进阶240
7.1 模型训练、预测及解析240
7.1.1 树模型训练240
7.1.2 线性模型训练256
7.1.3 模型预测258
7.1.4 模型解析261
7.2 树模型更新264
7.2.1 updater_colmaker264
7.2.2 updater_histmaker264
7.2.3 updater_fast_hist271
7.2.4 其他更新器276
7.3 目标函数278
7.3.1 二分类279
7.3.2 回归280
7.3.3 多分类282
7.3.4 排序学习284
7.4 评估函数288
7.4.1 概述289
7.4.2 二分类291
7.4.3 多分类295
7.4.4 回归296
7.4.5 排序297
7.5 小结299
第8章 模型选择与优化300
8.1 偏差与方差300
8.2 模型选择303
8.2.1 交叉验证304
8.2.2 Bootstrap306
8.3 超参数优化307
8.3.1 网格搜索308
8.3.2 随机搜索310
8.3.3 贝叶斯优化313
8.4 XGBoost超参数优化315
8.4.1 XGBoost参数介绍315
8.4.2 XGBoost调参示例319
8.5 小结334
第9章 通过XGBoost实现广告分类器335
9.1 PCA335
9.1.1 PCA的实现原理335
9.1.2 通过PCA对人脸识别数据降维338
9.1.3 利用PCA实现数据可视化341
9.2 通过XGBoost实现广告分类器343
9.3 小结357
第10章 基于树模型的其他研究与应用358
10.1 GBDT、LR融合提升广告点击率358
10.2 mGBDT360
10.3 DEF362
10.4 一种基于树模型的强化学习方法366
10.5 小结370