集成學習通過自動對比多個模型的輸出,將輸出結(jié)合起來,融合成強大的集成模型,得出最優(yōu)結(jié)果。集成學習發(fā)揮集體智慧,結(jié)果更準確,克服了單一模型的局限性。這種創(chuàng)新方法能夠綜合多個視角的響應(yīng);即使在沒有大規(guī)模數(shù)據(jù)集的情況下,也能給出可靠的預(yù)測結(jié)果。
《集成學習實戰(zhàn)》呈現(xiàn)同時應(yīng)用多種機器學習方法的實用技巧。每章都列舉一個獨特案例(如醫(yī)學診斷、情感分析等),展示一個功能完備的集成方法。本書不探討深奧的數(shù)學知識,所講內(nèi)容淺顯易懂,代碼豐富,供你輕松進行實驗!
主要內(nèi)容
● Bagging法、提升法和梯度提升法
● 分類、回歸和檢索方法
● 集成方法的模型和決策可解釋性
● 特征工程和集成多樣性
目前,關(guān)于集成學習著作比較少,主要是周志華教授團隊編寫的EnsembleMethods Foundations and Algorithms。不過,該書的出版時間較早(2012年出版英文,2020年出版了中文譯著),未涉及近10年來集成學習的前沿理論和技術(shù);另外該書主要偏向前沿理論,缺少算法實現(xiàn)和案例配套。
《集成學習實戰(zhàn)》的引進可謂恰逢其時,填補了集成學習領(lǐng)域著作方面的不足。本書圖文并茂地對深奧的集成學習理論和方法進行描述,并結(jié)合大量的案例和應(yīng)用程序,引導(dǎo)讀者邊思考邊實踐,從而逐步加深對集成學習的理解,并將這些新方法、新理論和新思想用于自己的研究。本書梳理了集成學習近20年來的前沿理論和技術(shù),主要從集成學習基礎(chǔ)知識、集成方式和集成學習數(shù)據(jù)集制作、特征提取和可解釋性三個方面進行了專題討論,還討論集成學習理論以及與概率機器學習和深度學習的結(jié)合策略。本書包含大量的圖、案例以及Python代碼實現(xiàn),讀者可以一邊閱讀一邊動手實踐。本書面向計算機、人工智能和大數(shù)據(jù)專業(yè)的高年級本科生和研究生,也面向?qū)C器學習與集成學習感興趣的研究人員和企業(yè)工程師。
曾幾何時,我還是一名研究生,仿佛在茫茫大海中漂泊,船上沒有舵手,研究方向不盡如人意,前途未卜。后來,我偶然看到了一篇題為支持向量機:是炒作還是福音?的文章。彼時是21世紀初,支持向量機(Support Vector Machine,SVM)無疑是當時最重要的機器學習技術(shù)。
在這篇文章中,作者(其中一位后來成為我的博士生導(dǎo)師)采用了一種相當簡化的方法來解釋SVM這一相當復(fù)雜的主題,將直覺和幾何與理論、應(yīng)用交織在一起。這篇文章給我留下了深刻印象,一下子激發(fā)了我對機器學習的熱情,并使我對了解這些方法在實現(xiàn)中的工作原理產(chǎn)生了強烈的迷戀。事實上,本書第1章的標題就是向那篇文章致敬,因為它對我的人生產(chǎn)生了十分深刻的影響。
與當時的SVM一樣,集成方法如今也被廣泛認為是最重要的機器學習技術(shù)。但很多人沒有意識到的是,在過去幾十年里,一些集成方法一直被認為是最先進的:20世紀90年代的Bagging法,21世紀最初的隨機森林和提升法,21世紀10年代的梯度提升法,以及21世紀20年代的XGBoost。最佳機器學習模型在不斷變化,集成方法似乎確實值得炒作。
在過去10年中,我有幸花費了大量時間訓(xùn)練各種類型的集成模型,將它們應(yīng)用于工業(yè)領(lǐng)域,并撰寫了相關(guān)的學術(shù)研究論文。在本書中,我盡可能多地展示了這些集成方法:一些是你肯定聽說過的,還有一些你應(yīng)該真正了解的新方法。
本書絕不僅是一本按部就班、代碼剪貼的教程(雖然你也可以這樣使用它)。網(wǎng)絡(luò)上有很多這樣的優(yōu)秀教程,可以讓你立即開始處理數(shù)據(jù)集。相反,我在介紹每一種新方法時,都會采用一種身臨其境的方式,這種方式的靈感來源于我讀過的第一篇機器學習論文,在我擔任研究生講師期間,我在大學課堂上對這篇論文進行了改進。
我始終認為,要深入理解一個技術(shù)主題,就必須將其剝離、拆解,并嘗試重新結(jié)合。在本書中,我也采用了同樣的做法:將拆解集成方法,并重新創(chuàng)建它們。將對它們進行調(diào)整,看看它們是如何變化的。這樣,就能看到它們的真正魅力!
希望本書能揭開這些技術(shù)和算法細節(jié)的神秘面紗,讓你進入集成思維模式,無論是為你的課程項目、Kaggle競賽還是用于生產(chǎn)應(yīng)用。
現(xiàn)在是學習集成方法的最佳時機。本書涵蓋的模型可分為三大類:
■ 基礎(chǔ)集成方法經(jīng)典的、人們耳熟能詳?shù)姆椒,包括歷史悠久的集成技術(shù),如Bagging法、隨機森林和AdaBoost等。
■ 最先進的集成方法現(xiàn)代集成時代經(jīng)過實踐驗證的強大方法,構(gòu)成了許多實際生產(chǎn)中的預(yù)測、推薦和搜索系統(tǒng)的核心。
■ 新興的集成方法剛剛問世的最新方法,用于應(yīng)對新需求和新興優(yōu)先事項,如可解釋性(explainability)和解釋性(interpretability)。
每章都將采用三管齊下的方法,介紹不同的集成技術(shù)。首先,你將一步步地直觀了解每種集成方法的原理。其次,你將自己實現(xiàn)每種集成方法的基本版本,以充分理解算法的核心和關(guān)鍵。最后,你將學習如何實際應(yīng)用魯棒的集成庫和工具。
大多數(shù)章節(jié)還提供了來自現(xiàn)實世界數(shù)據(jù)的案例研究,這些數(shù)據(jù)來自手寫數(shù)字預(yù)測、推薦系統(tǒng)、情感分析、需求預(yù)測等應(yīng)用領(lǐng)域。這些案例適當?shù)亟鉀Q了幾個實際應(yīng)用中的問題,包括預(yù)處理和特征工程、超參數(shù)選擇、高效訓(xùn)練技術(shù)和有效的模型評估。
讀者對象
本書面向廣泛的讀者群體:
■ 對使用集成方法在實際應(yīng)用中獲得最佳數(shù)據(jù)感興趣的數(shù)據(jù)科學家。
■ 正在構(gòu)建、評估和部署基于集成方法的生產(chǎn)就緒型應(yīng)用程序和流程的MLOps和DataOps工程師。
■ 希望將本書作為學習資料或補充教科書的數(shù)據(jù)科學和機器學習專業(yè)的學生。
■ Kaggler和數(shù)據(jù)科學愛好者,可將本書作為學習集成方法無盡建?赡苄缘那腥朦c。
本書不是機器學習和數(shù)據(jù)科學的入門讀物。本書假定你已經(jīng)掌握了一些機器學習的基礎(chǔ)知識,并且至少使用過一種基本的學習技術(shù)(如決策樹)。
此外,本書還假定你掌握Python的基礎(chǔ)知識。本書中的示例、可視化和章節(jié)案例研究均使用Python和Jupyter Notebook。了解其他常用的Python軟件包,如NumPy(用于數(shù)學計算)、pandas(用于數(shù)據(jù)處理)和Matplotlib(用于可視化),也是有用的,但并非必要。實際上,你可通過示例和案例研究來學習如何使用這些包。
本書結(jié)構(gòu)
本書分3個部分,共9章。第Ⅰ部分是集成方法的簡單介紹,第Ⅱ部分介紹并解釋幾種基本的集成方法,第Ⅲ部分涵蓋高級主題。
第Ⅰ部分集成學習基礎(chǔ)知識介紹集成方法以及為什么要學習集成方法。該部分還包含本書其余部分所涉及的集成方法的路線圖。
■ 第1章討論集成方法和基本集成術(shù)語,介紹擬合度與復(fù)雜性的權(quán)衡(或更正式的說法是偏差-方差權(quán)衡)。你將在該章構(gòu)建第一個集成模型。
第Ⅱ部分基本集成方法涵蓋幾個重要的集成方法系列,其中許多被認為是基本集成方法,并廣泛應(yīng)用于實際中。在該部分的每一章中,你將學習如何從零開始實現(xiàn)不同的集成方法,了解它們的工作原理,并將它們應(yīng)用于實際問題中。
■ 第2章開始介紹并行集成方法,確切地說,是同質(zhì)并行集成。涵蓋的集成方法包括Bagging法、隨機森林(random forest)、Pasting、隨機子空間(random subspace)、random patch法和極度隨機樹(Extra Tree)。
■ 第3章繼續(xù)介紹更多并行集成方法,但本章的重點是異質(zhì)并行集成方法。涵蓋的集成方法包括通過多數(shù)投票結(jié)合基礎(chǔ)模型、加權(quán)結(jié)合、使用Dempster-Shafer進行預(yù)測融合,以及通過Stacking進行元學習。
■ 第4章介紹另一種集成方法順序適應(yīng)性集成,特別是將許多弱模型提升為一個強大模型的基本概念:介紹了AdaBoost和LogitBoost等集成方法。
■ 第5章以提升的基本概念為基礎(chǔ),介紹另一種基本的順序集成方法梯度提升(它將梯度下降與提升相結(jié)合)。該章將討論如何使用scikit-learn和LightGBM訓(xùn)練梯度提升集成。
■ 第6章將繼續(xù)探討順序集成方法,介紹牛頓提升(Newton boosting,是梯度提升的一種高效擴展),將牛頓下降與提升相結(jié)合。該章將討論如何使用XGBoost訓(xùn)練牛頓提升集成。
第Ⅲ部分集成之外:將集成方法應(yīng)用于你的數(shù)據(jù)將展示如何將集成方法應(yīng)用于許多情況,包括具有連續(xù)值標簽和計數(shù)值標簽的數(shù)據(jù)集以及具有分類特征的數(shù)據(jù)集。還將討論如何解釋你的集成并說明其預(yù)測結(jié)果。
■ 第7章將介紹如何針對不同類型的回歸問題和廣義線性模型(訓(xùn)練標簽為連續(xù)值或計數(shù)值)進行集成訓(xùn)練。內(nèi)容包括線性回歸、泊松回歸、回歸和Tweedie回歸的并行和順序集成方法。
■ 第8章指出使用非數(shù)字特征(特別是分類特征)進行學習時面臨的挑戰(zhàn),并介紹一些編碼方案,有助于為這類數(shù)據(jù)訓(xùn)練有效的集成模型。該章還討論兩個重要的實際問題:數(shù)據(jù)泄露和預(yù)測偏移。最后,將討論如何通過有序編碼和CatBoost來解決這些問題。
■ 第9章從集成方法的角度闡述可解釋人工智能這一新興且非常重要的課題。該章介紹可解釋性的概念及其重要性。還討論幾種常見的黑盒可解釋方法,包括排列特征重要性、部分依賴圖、代理方法、局部解釋模型、Shapley值和SHapley加性解釋。此外,還介紹白盒集成方法、可解釋性提升機和InterpretML包。
■ 結(jié)語為旅程畫上了句號,并提供更多可供進一步探索和閱讀的主題。
雖然本書的大部分章節(jié)都可獨立閱讀,但第7~9章是在本書第Ⅱ部分的基礎(chǔ)上編寫的。
關(guān)于代碼
本書中的所有代碼和示例都是用Python 3編寫的。代碼編排在Jupyter Notebook中,可掃封底二維碼下載。
本書包含許多源代碼示例,這些示例既有以編號形式列出的,也有與普通文本并列的。這兩種情況下,源代碼的格式都是等寬字體,以使其與普通文本區(qū)分開來。許多情況下,原始源代碼都經(jīng)過重新格式化,添加了換行符,并重新調(diào)整了縮進,以適應(yīng)書中可用的頁面空間。
Gautam Kunapuli擁有逾15年的學術(shù)界和機器學習行業(yè)經(jīng)驗,重點研究人機協(xié)作學習、基于知識和建議的學習算法,以及針對機器學習難題的可擴展學習。
第I部分 集成學習基礎(chǔ)知識
第1章 集成方法:炒作還是福音· 3
1.1 集成方法:集體智慧 4
1.2 關(guān)注集成學習原因 6
1.3 單個模型中的擬合度與復(fù)雜性 8
1.3.1 決策樹回歸 8
1.3.2 支持向量回歸 12
1.4 第一個集成模型 15
1.5 集成方法的術(shù)語和分類 19
1.6 小結(jié) 21
第II部分 基本集成方法
第2章 同質(zhì)并行集成:Bagging法和隨機森林 25
2.1 并行集成 26
2.2 Bagging法:Bootstrap結(jié)合算法 27
2.2.1 直覺:重采樣和模型結(jié)合 28
2.2.2 實現(xiàn)Bagging法 31
2.2.3 使用scikit-learn實現(xiàn)Bagging法 33
2.2.4 使用并行化進行更快的訓(xùn)練 35
2.3 隨機森林 36
2.3.1 隨機決策樹 36
2.3.2 使用scikit-learn實現(xiàn)隨機森林 38
2.3.3 特征重要性 39
2.4 更多同質(zhì)并行集成· 40
2.4.1 Pasting 40
2.4.2 隨機子空間和random patch法 41
2.4.3 極度隨機樹 42
2.5 案例研究:乳腺癌診斷 43
2.5.1 加載和預(yù)處理 43
2.5.2 Bagging法、隨機森林和極度隨機樹 44
2.5.3 隨機森林中的特征重要性 47
2.6 小結(jié) 50
第3章 異質(zhì)并行集成:結(jié)合強學習器 53
3.1 異質(zhì)集成的基礎(chǔ)估計器 54
3.1.1 擬合基礎(chǔ)估計器 55
3.1.2 基礎(chǔ)估計器的單個預(yù)測 58
3.2 通過加權(quán)結(jié)合預(yù)測 60
3.2.1 多數(shù)投票 62
3.2.2 準確率加權(quán) 63
3.2.3 熵加權(quán)法 65
3.2.4 Dempster-Shafer結(jié)合 67
3.3 通過元學習結(jié)合預(yù)測 69
3.3.1 Stacking 70
3.3.2 通過交叉驗證進行Stacking 74
3.4 案例研究:情感分析 77
3.4.1 預(yù)處理 78
3.4.2 降低維度 81
3.4.3 blending分類器 82
3.5 小結(jié) 85
第4章 順序集成:自適應(yīng)提升 87
4.1 弱學習器的順序集成 88
4.2 AdaBoost:自適應(yīng)提升 90
4.2.1 直覺法:使用加權(quán)樣本進行學習 90
4.2.2 實現(xiàn)AdaBoost 93
4.2.3 使用scikit-learn的AdaBoost 99
4.3 AdaBoost在實踐中的應(yīng)用 101
4.3.1 學習率· 102
4.3.2 早停和剪枝 104
4.4 案例研究:手寫數(shù)字分類 106
4.4.1 利用 t-SNE降維 107
4.4.2 提升 109
4.5 LogitBoost:使用邏輯損失進行提升 112
4.5.1 邏輯損失函數(shù)與指數(shù)損失函數(shù) 112
4.5.2 將回歸作為分類的弱學習算法 113
4.5.3 實現(xiàn)LogitBoost 113
4.6 小結(jié) 116
第5章 順序集成:梯度提升 117
5.1 用梯度下降實現(xiàn)最小化 118
5.1.1 舉例說明梯度下降 119
5.1.2 在損失函數(shù)上進行梯度下降訓(xùn)練 125
5.2 梯度提升:梯度下降 提升 128
5.2.1 直覺:使用殘差學習 128
5.2.2 實現(xiàn)梯度提升 132
5.2.3 使用scikit-learn進行梯度提升 136
5.2.4 基于直方圖的梯度提升 138
5.3 LightGBM:梯度提升框架 140
5.3.1 為何將LightGBM稱為輕量級 140
5.3.2 利用LightGBM進行梯度提升 142
5.4 LightGBM在實踐中的應(yīng)用 143
5.4.1 學習率 143
5.4.2 早停 146
5.4.3 自定義損失函數(shù) 148
5.5 案例研究:文檔檢索 151
5.5.1 LETOR數(shù)據(jù)集 151
5.5.2 使用LightGBM進行文檔檢索 153
5.6 小結(jié) 156
第6章 順序集成:牛頓提升 157
6.1 最小化牛頓法 158
6.1.1 舉例說明牛頓法 160
6.1.2 訓(xùn)練過程中的損失函數(shù)的牛頓下降· 165
6.2 牛頓提升:牛頓法 Boosting 167
6.2.1 直覺:使用加權(quán)殘差進行學習 167
6.2.2 直覺:使用正則化損失函數(shù)進行學習 170
6.2.3 實現(xiàn)牛頓提升 173
6.3 XGBoost:牛頓提升框架 177
6.3.1 XGBoost的極端之處在哪里? 178
6.3.2 XGBoost的牛頓提升 179
6.4 XGBoost實踐 181
6.4.1 學習率 181
6.4.2 早停 184
6.5 案例研究:文檔檢索 185
6.5.1 LETOR數(shù)據(jù)集 185
6.5.2 使用XGBoost進行文檔檢索 186
6.6 小結(jié) 188
第III部分 集成之外:將集成方法應(yīng)用于你的數(shù)據(jù)
第7章 學習連續(xù)和計數(shù)標簽 193
7.1 回歸的簡要回顧 194
7.1.1 連續(xù)標簽的線性回歸 194
7.1.2 用于計數(shù)標簽的泊松回歸 200
7.1.3 用于分類標簽的邏輯回歸 203
7.1.4 廣義線性模型 204
7.1.5 非線性回歸 205
7.2 回歸的并行集成 208
7.2.1 隨機森林和極度隨機樹 209
7.2.2 結(jié)合回歸模型 212
7.2.3 Stacking回歸模型 213
7.3 用于回歸的順序集成 214
7.3.1 用于回歸的損失和似然函數(shù) 216
7.3.2 LightGBM和XGBoost的梯度提升 218
7.4 案例研究:需求預(yù)測 221
7.4.1 UCI自行車共享數(shù)據(jù)集 222
7.4.2 GLM和Stacking· 224
7.4.3 隨機森林和極度隨機樹 227
7.4.4 XGBoost和LightGBM 228
7.5 小結(jié) 231
第8章 學習分類特征 233
8.1 編碼分類特征 234
8.1.1 分類特征的類型 235
8.1.2 有序編碼和獨熱編碼 235
8.1.3 使用目標統(tǒng)計信息進行編碼 238
8.1.4 類別編碼器包 244
8.2 CatBoost:有序提升框架 247
8.2.1 有序目標統(tǒng)計和有序提升 247
8.2.2 無意識決策樹 249
8.2.3 CatBoost實踐 250
8.3 案例研究:收入預(yù)測 253
8.3.1 adult數(shù)據(jù)集 254
8.3.2 創(chuàng)建預(yù)處理和建模流程 256
8.3.3 類別編碼和集成 259
8.3.4 有序編碼和CatBoost提升 261
8.4 編碼高基數(shù)字符串特征 263
8.5 小結(jié) 267
第9章 集成學習可解釋性 269
9.1 可解釋性的含義 270
9.1.1 黑盒與白盒模型 270
9.1.2 決策樹(和決策規(guī)則) 273
9.1.3 廣義線性模型 276
9.2 案例研究:數(shù)據(jù)驅(qū)動的營銷 278
9.2.1 銀行營銷數(shù)據(jù)集 279
9.2.2 訓(xùn)練集成 281
9.2.3 樹集成中的特征重要性 282
9.3 全局可解釋性的黑盒方法 283
9.3.1 排列特征重要性 284
9.3.2 部分依賴圖 286
9.3.3 全局代理模型· 289
9.4 適用于局部可解釋性的黑盒方法 292
9.4.1 借助LIME的局部代理模型 292
9.4.2 借助SHAP的局部可解釋性 296
9.5 白盒集成:訓(xùn)練解釋性 302
9.5.1 可解釋性提升機 303
9.5.2 EBM實踐 306
9.6 小結(jié) 309
結(jié)語 311