本書以機器學習基礎(chǔ)知識做鋪墊,深入剖析XGBoost的原理、分布式實現(xiàn)、模型優(yōu)化、深度應用等。
第1~3章使讀者對機器學習算法形成整體認知,了解如何優(yōu)化模型以及評估預測結(jié)果,并熟悉常用機器學習算法的實現(xiàn)原理和應用,如線性回歸、邏輯回歸、決策樹、神經(jīng)網(wǎng)絡(luò)、支持向量機等。
第4章借助實際案例,講解如何通過XGBoost解決分類、回歸、排序等問題,并介紹了XGBoost常用功能的使用方法。
第5~7章是本書的重點,從理論推導與源碼層面深入剖析XGBoost,涵蓋XGBoost原理與理論證明、分布式XGBoost的實現(xiàn)、XGBoost各組件的源碼解析。
第8~9章為進階內(nèi)容,著重解析算法實踐與工程應用中的難點,進而幫助讀者更好地解決實際問題。
第10章介紹了一些較為前沿的將樹模型與其他模型融合的研究方法,以開拓眼界,拓展思路。
1)知名互聯(lián)網(wǎng)公司工程師撰寫,打通高效機器學習脈絡(luò),掌握競賽神器XGBoost
2)以機器學習基礎(chǔ)知識做鋪墊,深入剖析XGBoost原理、分布式實現(xiàn)、模型優(yōu)化、深度應用等
大數(shù)據(jù)時代的今天,基于規(guī)則解決具體業(yè)務(wù)問題的傳統(tǒng)方式已無法滿足企業(yè)需求,機器學習與人工智能逐漸走入人們的視野,并迅速得到了眾多企業(yè)的廣泛關(guān)注。各大互聯(lián)網(wǎng)公司相繼成立了自己的機器學習研究院,或建立機器學習團隊。然而,隨著企業(yè)業(yè)務(wù)規(guī)模、數(shù)據(jù)規(guī)模日益擴大,業(yè)務(wù)類型越來越復雜,怎樣在短時間內(nèi)訓練出高準確率的模型,成為許多企業(yè)面對的挑戰(zhàn)。
在機器學習與人工智能的浪潮中,XGBoost憑借高效、便捷、擴展性強等優(yōu)勢,在眾多開源機器學習庫中脫穎而出,廣受各大企業(yè)青睞。目前XGBoost已成為熱門的機器學習開源項目之一,擁有強大的社區(qū)支持,技術(shù)也日趨成熟。
為什么要寫這本書
最初寫這本書的想法萌生于兩年前。當時,一些剛接觸XGBoost的同事讓我推薦學習資料,但我發(fā)現(xiàn)除了英文論文和官方文檔外,竟找不到一本XGBoost的入門書籍。當然,論文和官方文檔是學習XGBoost的重要參考資料,但對于剛接觸機器學習的初學者而言,學習這些資料的成本相對較高。如果沒有足夠的理論基礎(chǔ),初學者容易一開始就被細節(jié)和難點纏住,降低學習的積極性。
XGBoost涉及的相關(guān)知識較多,資料比較分散,苦于缺乏一個系統(tǒng)、完整的學習教程可以參考,學習者不得不在搜集資料上耗費大量時間。此外,對于XGBoost的應用也少有完整的案例剖析。想深入理解XGBoost的學習者,只能通過研究項目源碼的方式進行學習,這顯然不是一個特別高效的學習方式。
為了能夠深入理解XGBoost中各個組件的實現(xiàn)原理,筆者也花費了很多時間和精力。在閱讀了相關(guān)論文文檔、深入研究源碼并多次實踐后,積累了很多學習筆記,對XGBoost也有了自己的理解,由此便萌生了將其整理成書的想法。這樣既可以幫助更多的人快速了解和學習XGBoost,使自己的學習所得發(fā)揮更大的價值,也可以在梳理所學知識的過程中進一步提升。
本書特色
本書是國內(nèi)少有的系統(tǒng)、全面地介紹XGBoost技術(shù)原理的書籍,以通俗易懂的方式對XGBoost的原理和應用進行介紹,力求幫助讀者深入理解XGBoost。
(1)講授循次而進,符合初學者的認知規(guī)律。本書首先介紹機器學習中的常用算法,幫助讀者直觀地理解算法的基本原理,打下良好的理論基礎(chǔ)。然后由淺入深,鞭擗向里,帶領(lǐng)讀者深入探索機器學習前沿技術(shù)。
(2)內(nèi)容涵蓋全面,重視理解深度。本書不僅全面覆蓋了決策樹、Gradient Tree Boosting、目標函數(shù)近似、切分點查找算法等常見內(nèi)容,還詳細講解了分布式實現(xiàn)、排序?qū)W習、模型解釋性、DART等內(nèi)容。
(3)案例實用豐富,幫助讀者解決實際遇到的機器學習問題。本書在每個算法講解之后都配有相應的編程示例,不僅使讀者理解算法原理,還有助于提升靈活運用算法的能力。
另外,本書可以作為算法開發(fā)人員手邊的工具書,在學習和工作的過程中隨時查閱參考。
讀者對象
人工智能領(lǐng)域的算法工程師
人工智能領(lǐng)域的架構(gòu)師
其他對機器學習感興趣的人
如何閱讀本書
本書共有10章,具體內(nèi)容如下。
第1章介紹了何謂機器學習和機器學習中的一些基本概念,以及機器學習應用開發(fā)的步驟,并對集成學習的歷史發(fā)展、XGBoost的應用場景及其優(yōu)良特性進行了概述。
第2章詳細講解了Python機器學習環(huán)境的搭建及常用開源工具包的安裝和使用,并以一個簡單的示例展示XGBoost的使用方法。
第3章講述了常用機器學習算法的實現(xiàn)原理和應用,如線性回歸、邏輯回歸、決策樹、神經(jīng)網(wǎng)絡(luò)、支持向量機等,使讀者對機器學習算法有一個整體認知,同時了解如何在模型訓練過程中進行優(yōu)化、如何對模型結(jié)果進行評估。
第4章通過scikit-learn與XGBoost相結(jié)合,以實際的案例向讀者說明如何通過XGBoost解決分類、回歸、排序等問題,并介紹了XGBoost中常用功能的使用方法。
第5章深入介紹XGBoost的實現(xiàn)原理,包括Boosting算法思想、XGBoost目標函數(shù)近似、切分點查找算法、排序?qū)W習、模型可解釋性等內(nèi)容,從理論上保證XGBoost的有效性,使讀者深入理解XGBoost。
第6章詳細介紹了分布式XGBoost的實現(xiàn)原理,包括分布式機器學習框架Rabit,XGBoost在Spark、Flink平臺的實現(xiàn),GPU版本的實現(xiàn)等。
第7章從源碼的角度深入剖析了XGBoost中各個組件的實現(xiàn)原理,詳細介紹了模型訓練、預測、解析,以及不同目標函數(shù)和評估函數(shù)的實現(xiàn)過程。
第8章詳細介紹了如何通過模型選擇與優(yōu)化提高模型的泛化能力,從偏差和方差的角度進行了解釋,通過交叉驗證和Bootstrap等方法來說明模型選擇過程,并介紹了常用的超參數(shù)優(yōu)化方法。
第9章通過實際案例分析,使讀者能夠深入理解XGBoost的特性并靈活運用,能夠依據(jù)不同場景將XGBoost與其他模型融合,更好地解決實際問題。
第10章介紹了業(yè)界或?qū)W術(shù)界中樹模型與其他模型融合的一些研究方法,包括GBDT LR,多層GBDT模型結(jié)構(gòu)mGBDT,樹模型與深度學習、強化學習的融合等。
如果你是具有一定機器學習理論基礎(chǔ)的從業(yè)者,可以跳過前4章的基礎(chǔ)部分,直接從第5章開始閱讀。如果你是一位機器學習的初學者,并打算在未來深入鉆研這個方向,建議系統(tǒng)地閱讀本書,并動手實踐書中的所有實例。
勘誤和支持
由于筆者水平有限,編寫時間倉促,書中難免存在一些錯誤或表達不準確之處,懇請讀者批評指正。如果你有更多的寶貴意見,可通過電子郵箱xgbbook2019@163.com聯(lián)系我,期待得到你們的真摯反饋,讓我們在技術(shù)之路上互勉共進。
感謝
感謝中國人民大學的杜小勇老師、陳晉川老師,是他們幫我打開了科研的大門,讓我體會到鉆研知識的樂趣。感謝滴滴出行的李奘、卓呈祥、杜龍志以及所有在工作中幫助過我的同事。感謝機械工業(yè)出版社華章公司的高婧雅編輯在本書寫作過程中給予我的支持和幫助。
特別感謝本書的第一讀者我的愛人高陽,因為寫作,我犧牲了很多陪伴她的時間,感謝她的支持和理解,也感謝她幫我進行文稿校對。感謝她一路的支持和陪伴。
何龍
何龍
現(xiàn)就職于滴滴出行,XGBoost開源社區(qū)貢獻者,專注于人工智能和機器學習領(lǐng)域,從底層算法原理到上層應用實踐都有廣泛的興趣和研究。較早接觸XGBoost,熟悉XGBoost應用開發(fā),深入閱讀源碼,具有豐富的項目開發(fā)經(jīng)驗。
前言
第1章 機器學習概述1
1.1 何謂機器學習1
1.1.1 機器學習常用基本概念2
1.1.2 機器學習類型3
1.1.3 機器學習應用開發(fā)步驟4
1.2 集成學習發(fā)展與XGBoost提出5
1.2.1 集成學習5
1.2.2 XGBoost6
1.3 小結(jié)7
第2章 XGBoost驪珠初探9
2.1 搭建Python機器學習環(huán)境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運行環(huán)境39
2.3 示例:XGBoost告訴你蘑菇是否有毒42
2.4 小結(jié)44
第3章 機器學習算法基礎(chǔ)45
3.1 KNN45
3.1.1 KNN關(guān)鍵因素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 模型參數(shù)估計59
3.3.2 模型評估60
3.3.3 良性/惡性乳腺腫瘤預測61
3.3.4 softmax64
3.4 決策樹65
3.4.1 構(gòu)造決策樹66
3.4.2 特征選擇67
3.4.3 決策樹剪枝71
3.4.4 決策樹解決腫瘤分類問題71
3.5 正則化75
3.6 排序78
3.6.1 排序?qū)W習算法80
3.6.2 排序評價指標81
3.7 人工神經(jīng)網(wǎng)絡(luò)85
3.7.1 感知器85
3.7.2 人工神經(jīng)網(wǎng)絡(luò)的實現(xiàn)原理87
3.7.3 神經(jīng)網(wǎng)絡(luò)識別手寫體數(shù)字90
3.8 支持向量機92
3.8.1 核函數(shù)95
3.8.2 松弛變量97
3.8.3 通過SVM識別手寫體數(shù)字98
3.9 小結(jié)99
第4章 XGBoost小試牛刀100
4.1 XGBoost實現(xiàn)原理100
4.2 二分類問題101
4.3 多分類問題109
4.4 回歸問題113
4.5 排序問題117
4.6 其他常用功能121
4.7 小結(jié)145
第5章 XGBoost原理與理論證明146
5.1 CART146
5.1.1 CART生成147
5.1.2 剪枝算法150
5.2 Boosting算法思想與實現(xiàn)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 加權(quán)分位數(shù)概要算法167
5.4.5 稀疏感知切分點查找算法167
5.5 排序?qū)W習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線性模型的實現(xiàn)185
5.9 系統(tǒng)優(yōu)化187
5.9.1 基于列存儲數(shù)據(jù)塊的并行學習188
5.9.2 緩存感知訪問190
5.9.3 外存塊計算191
5.10 小結(jié)192
第6章 分布式XGBoost193
6.1 分布式機器學習框架Rabit 193
6.1.1 AllReduce193
6.1.2 Rabit195
6.1.3 Rabit應用197
6.2 資源管理系統(tǒng)YARN 200
6.2.1 YARN的基本架構(gòu)201
6.2.2 YARN的工作流程202
6.2.3 XGBoost on YARN203
6.3 可移植分布式XGBoost4J205
6.4 基于Spark平臺的實現(xiàn)208
6.4.1 Spark架構(gòu)208
6.4.2 RDD210
6.4.3 XGBoost4J-Spark211
6.5 基于Flink平臺的實現(xiàn)223
6.5.1 Flink原理簡介224
6.5.2 XGBoost4J-Flink227
6.6 基于GPU加速的實現(xiàn)229
6.6.1 GPU及其編程語言簡介229
6.6.2 XGBoost GPU加速原理230
6.6.3 XGBoost GPU應用236
6.7 小結(jié)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 目標函數(shù)278
7.3.1 二分類279
7.3.2 回歸280
7.3.3 多分類282
7.3.4 排序?qū)W習284
7.4 評估函數(shù)288
7.4.1 概述289
7.4.2 二分類291
7.4.3 多分類295
7.4.4 回歸296
7.4.5 排序297
7.5 小結(jié)299
第8章 模型選擇與優(yōu)化300
8.1 偏差與方差300
8.2 模型選擇303
8.2.1 交叉驗證304
8.2.2 Bootstrap306
8.3 超參數(shù)優(yōu)化307
8.3.1 網(wǎng)格搜索308
8.3.2 隨機搜索310
8.3.3 貝葉斯優(yōu)化313
8.4 XGBoost超參數(shù)優(yōu)化315
8.4.1 XGBoost參數(shù)介紹315
8.4.2 XGBoost調(diào)參示例319
8.5 小結(jié)334
第9章 通過XGBoost實現(xiàn)廣告分類器335
9.1 PCA335
9.1.1 PCA的實現(xiàn)原理335
9.1.2 通過PCA對人臉識別數(shù)據(jù)降維338
9.1.3 利用PCA實現(xiàn)數(shù)據(jù)可視化341
9.2 通過XGBoost實現(xiàn)廣告分類器343
9.3 小結(jié)357
第10章 基于樹模型的其他研究與應用358
10.1 GBDT、LR融合提升廣告點擊率358
10.2 mGBDT360
10.3 DEF362
10.4 一種基于樹模型的強化學習方法366
10.5 小結(jié)370