本書是人工智能和機器學習領域專業(yè)多年實踐的結晶,深入淺出講解機器學習應用和工程實踐,是對機器學習工程實踐和設計模式的系統(tǒng)回顧。全書分別從項目前的準備,數(shù)據(jù)收集和準備,特征工程,監(jiān)督模型訓練,模型評估,模型服務、監(jiān)測和維護等方面講解,由淺入深剖析機器學習實踐過程中遇到的問題,幫助讀者快速掌握機器學習工程實踐和設計模式的基本原理與方法。
本書內(nèi)容安排合理,架構清晰,理論與實踐相結合,適合想要從事機器學習項目的數(shù)據(jù)分析師、機器學習工程師以及機器學習相關專業(yè)的學生閱讀,也可供需要處理模型的軟件架構師參考。
1.機器學習入門手冊《機器學習精講》姊妹篇,人工智能和機器學習領域專業(yè)人士的多年實踐結晶,深入淺出講解機器學習應用和工程實踐。
2.系統(tǒng)闡釋利用機器學習大規(guī)模地解決業(yè)務問題,涉及項目準備工作、數(shù)據(jù)收集、特征工程、監(jiān)督模型訓練、模型評估、模型部署,以及模型服務、監(jiān)測和維護等全流程
3.從零開始講解,分任務、分步驟的介紹機器學習項目,展示項目完整設計過程。
4.理論實踐相結合側重于討論多種實際應用場景,幫助讀者應用到實際開發(fā)中。
5.人工智能和機器學習領域專業(yè)人士Cassie Kozyrkov、Karolis Urbonas作序推薦。
安德烈·布可夫(Andriy Burkov),人工智能和機器學習領域專業(yè)人士,擁有人工智能博士學位,尤其擅長自然語言處理、機器學習、信息檢索等。目前,他是高德納(Gartner)咨詢公司機器學習開發(fā)團隊的主管。該團隊的主要工作是,使用淺層和深度學習技術,開發(fā)可用于生產(chǎn)環(huán)境的、先進的多語言文字抽取和標準化系統(tǒng)。著有本書的姊妹篇《機器學習精講》。
目錄
第 1章 概述 1
1.1 符號和定義 1
1.1.1 數(shù)據(jù)結構 1
1.1.2 大寫西格瑪記法 3
1.2 什么是機器學習 3
1.2.1 監(jiān)督學習 4
1.2.2 無監(jiān)督學習 5
1.2.3 半監(jiān)督學習 6
1.2.4 強化學習 6
1.3 數(shù)據(jù)和機器學習術語 6
1.3.1 直接和間接使用的數(shù)據(jù) 7
1.3.2 原始數(shù)據(jù)和規(guī)整數(shù)據(jù) 7
1.3.3 訓練集和留出集 8
1.3.4 基線 9
1.3.5 機器學習流水線 9
1.3.6 參數(shù)與超參數(shù) 10
1.3.7 分類與回歸 10
1.3.8 基于模型學習與基于實例學習 11
1.3.9 淺層學習與深度學習的比較 11
1.3.10 訓練與評分 11
1.4 何時使用機器學習 11
1.4.1 如果問題太復雜,無法進行編程 12
1.4.2 如果問題不斷變化 12
1.4.3 如果它是一個感知問題 13
1.4.4 如果它是一種未曾研究過的現(xiàn)象 13
1.4.5 如果問題的目標簡單 14
1.4.6 如果它有成本效益 14
1.5 何時不使用機器學習 14
1.6 什么是機器學習工程 15
1.7 機器學習項目生命周期 16
1.8 小結 17
第 2章 項目開始前 19
2.1 機器學習項目的優(yōu)先級排序 19
2.1.1 機器學習的影響 19
2.1.2 機器學習的成本 20
2.2 估計機器學習項目的復雜度 21
2.2.1 未知因素 21
2.2.2 簡化問題 21
2.2.3 非線性進展 22
2.3 確定機器學習項目的目標 22
2.3.1 模型能做什么 22
2.3.2 成功模型的屬性 23
2.4 構建機器學習團隊 24
2.4.1 兩種文化 24
2.4.2 機器學習團隊的成員 25
2.5 機器學習項目為何失敗 26
2.5.1 缺乏有經(jīng)驗的人才 26
2.5.2 缺乏領導層的支持 26
2.5.3 數(shù)據(jù)基礎設施缺失 27
2.5.4 數(shù)據(jù)標簽的挑戰(zhàn) 27
2.5.5 谷倉式組織和缺乏協(xié)作 28
2.5.6 技術上不可行的項目 28
2.5.7 技術團隊和業(yè)務團隊之間缺乏協(xié)調 28
2.6 小結 29
第3章 數(shù)據(jù)收集和準備 31
3.1 關于數(shù)據(jù)的問題 31
3.1.1 數(shù)據(jù)是否可獲得 31
3.1.2 數(shù)據(jù)是否相當大 32
3.1.3 數(shù)據(jù)是否可用 34
3.1.4 數(shù)據(jù)是否可理解 35
3.1.5 數(shù)據(jù)是否可靠 36
3.2 數(shù)據(jù)的常見問題 37
3.2.1 高成本 37
3.2.2 質量差 39
3.2.3 噪聲 39
3.2.4 偏差 40
3.2.5 預測能力低 45
3.2.6 過時的樣本 45
3.2.7 離群值 46
3.2.8 數(shù)據(jù)泄露 47
3.3 什么是好數(shù)據(jù) 48
3.3.1 好數(shù)據(jù)是有信息的 48
3.3.2 好數(shù)據(jù)有好的覆蓋面 48
3.3.3 好數(shù)據(jù)反映真實的輸入 48
3.3.4 好數(shù)據(jù)沒有偏差 49
3.3.5 好數(shù)據(jù)不是反饋環(huán)路的結果 49
3.3.6 好數(shù)據(jù)有一致的標簽 49
3.3.7 好數(shù)據(jù)足夠大 49
3.3.8 好數(shù)據(jù)總結 50
3.4 處理交互數(shù)據(jù) 50
3.5 數(shù)據(jù)泄露的原因 51
3.5.1 目標是一個特征的函數(shù) 51
3.5.2 特征隱藏目標 52
3.5.3 特征來自未來 52
3.6 數(shù)據(jù)劃分 53
3.7 處理缺失的屬性 55
3.7.1 數(shù)據(jù)填補技術 55
3.7.2 填補過程中的泄露問題 57
3.8 數(shù)據(jù)增強 57
3.8.1 圖像的數(shù)據(jù)增強 57
3.8.2 文本的數(shù)據(jù)增強 59
3.9 處理不平衡的數(shù)據(jù) 60
3.9.1 過采樣 60
3.9.2 欠采樣 62
3.9.3 混合策略 62
3.10 數(shù)據(jù)采樣策略 63
3.10.1 簡單隨機采樣 63
3.10.2 系統(tǒng)采樣 64
3.10.3 分層采樣 64
3.11 存儲數(shù)據(jù) 64
3.11.1 數(shù)據(jù)格式 65
3.11.2 數(shù)據(jù)存儲級別 66
3.11.3 數(shù)據(jù)版本化 68
3.11.4 文檔和元數(shù)據(jù) 69
3.11.5 數(shù)據(jù)生命周期 70
3.12 數(shù)據(jù)處理實踐 70
3.12.1 可重復性 70
3.12.2 數(shù)據(jù)第 一,算法第二 70
3.13 小結 71
第4章 特征工程 73
4.1 為什么要進行特征工程 73
4.2 如何進行特征工程 74
4.2.1 文本的特征工程 74
4.2.2 為什么詞袋有用 77
4.2.3 將分類特征轉換為數(shù)字 78
4.2.4 特征哈!80
4.2.5 主題建!81
4.2.6 時間序列的特征 85
4.2.7 發(fā)揮你的創(chuàng)造力 88
4.3 疊加特征 88
4.3.1 疊加特征向量 88
4.3.2 疊加單個特征 89
4.4 好特征的屬性 90
4.4.1 高預測能力 90
4.4.2 快速計算能力 90
4.4.3 可靠性 91
4.4.4 不相關 91
4.4.5 其他屬性 91
4.5 特征選擇 92
4.5.1 切除長尾 92
4.5.2 Boruta 93
4.5.3 L1正則化 95
4.5.4 特定任務的特征選擇 95
4.6 合成特征 96
4.6.1 特征離散化 96
4.6.2 從關系數(shù)據(jù)中合成特征 97
4.6.3 通過數(shù)據(jù)合成特征 99
4.6.4 通過其他特征合成特征 99
4.7 從數(shù)據(jù)中學習特征 100
4.7.1 單詞嵌入 100
4.7.2 文檔嵌入 102
4.7.3 任何東西的嵌入 103
4.7.4 選擇嵌入維度 104
4.8 降維 104
4.8.1 用PCA快速降維 104
4.8.2 用于可視化的降維 105
4.9 縮放特征 105
4.9.1 歸一化 105
4.9.2 標準化 106
4.10 特征工程中的數(shù)據(jù)泄露問題 107
4.10.1 可能出現(xiàn)的問題 107
4.10.2 解決方案 107
4.11 存儲特征和編寫文檔 108
4.11.1 模式文件 108
4.11.2 特征商店 109
4.12 特征工程實踐 112
4.12.1 生成許多簡單的特征 112
4.12.2 復用遺留系統(tǒng) 112
4.12.3 在需要時使用ID作為特征 112
4.12.4 但在可能時要減少基數(shù) 113
4.12.5 謹慎使用計數(shù) 113
4.12.6 必要時進行特征選擇 114
4.12.7 認真測試代碼 114
4.12.8 保持代碼、模型和數(shù)據(jù)的同步性 115
4.12.9 隔離特征提取代碼 115
4.12.10 將模型和特征提取器序列化在一起 115
4.12.11 記錄特征的值 115
4.13 小結 115
第5章 監(jiān)督模型訓練(第 一部分) 117
5.1 開始模型工作之前 117
5.1.1 驗證模式一致性 117
5.1.2 定義可實現(xiàn)的表現(xiàn)水平 118
5.1.3 選擇表現(xiàn)指標 118
5.1.4 選擇正確的基線 118
5.1.5 將數(shù)據(jù)分成三個集 121
5.1.6 監(jiān)督學習的前提條件 122
5.2 為機器學習表示標簽 122
5.2.1 多類分類 122
5.2.2 多標簽分類 123
5.3 選擇學習算法 124
5.3.1 學習算法的主要屬性 124
5.3.2 算法抽查 125
5.4 建立流水線 126
5.5 評估模型表現(xiàn) 127
5.5.1 回歸的表現(xiàn)指標 128
5.5.2 分類的表現(xiàn)指標 128
5.5.3 排名的表現(xiàn)指標 134
5.6 超參數(shù)調整 137
5.6.1 網(wǎng)格搜索 137
5.6.2 隨機搜索 138
5.6.3 由粗到精搜索 139
5.6.4 其他技術 140
5.6.5 交叉驗證 140
5.7 淺層模型訓練 141
5.7.1 淺層模型訓練策略 141
5.7.2 保存和恢復模型 142
5.8 偏差-方差折中 143
5.8.1 欠擬合 143
5.8.2 過擬合 143
5.8.3 折中 145
5.9 正則化 146
5.9.1 L1和L2正則化 147
5.9.2 其他形式的正則化 147
5.10 小結 148
第6章 監(jiān)督模型訓練(第二部分) 150
6.1 深度模型訓練策略 150
6.1.1 神經(jīng)網(wǎng)絡訓練策略 151
6.1.2 表現(xiàn)指標和成本函數(shù) 151
6.1.3 參數(shù)初始化策略 153
6.1.4 優(yōu)化算法 154
6.1.5 學習率衰減安排表 158
6.1.6 正則化 159
6.1.7 網(wǎng)絡規(guī)模搜索和超參數(shù)調整 160
6.1.8 處理多個輸入 162
6.1.9 處理多個輸出 162
6.1.10 遷移學習 163
6.2 堆疊模型 165
6.2.1 集成學習的類型 165
6.2.2 模型堆疊的一種算法 166
6.2.3 模型堆疊中的數(shù)據(jù)泄露問題 167
6.3 應對分布偏移 167
6.3.1 分布偏移的類型 167
6.3.2 對抗驗證 168
6.4 處理不平衡數(shù)據(jù)集 168
6.4.1 類權重 169
6.4.2 重采樣數(shù)據(jù)集的集成 169
6.4.3 其他技術 170
6.5 模型校準 170
6.5.1 良好校準的模型 171
6.5.2 校準技術 172
6.6 故障排除與誤差分析 172
6.6.1 模范行為不良的原因 173
6.6.2 迭代模型的細化 173
6.6.3 誤差分析 174
6.6.4 復雜系統(tǒng)的誤差分析 175
6.6.5 使用切片指標 177
6.6.6 修復錯誤的標簽 177
6.6.7 尋找其他的樣本來標記 177
6.6.8 深度學習的故障排除 178
6.7 實踐 179
6.7.1 提供一個好模型 180
6.7.2 信任流行的開源實現(xiàn)方式 180
6.7.3 優(yōu)化業(yè)務特定的表現(xiàn)指標 180
6.7.4 從頭開始升級 180
6.7.5 避免修正級聯(lián) 181
6.7.6 謹慎使用模型級聯(lián) 181
6.7.7 編寫高效的代碼、編譯和并行化 182
6.7.8 對較新和較舊數(shù)據(jù)都進行測試 183
6.7.9 更多的數(shù)據(jù)勝過更聰明的算法 183
6.7.10 新數(shù)據(jù)勝過巧妙的特征 184
6.7.11 擁抱微小進步 184
6.7.12 促進可重復性 184
6.8 小結 185
第7章 模型評估 187
7.1 離線和在線評估 188
7.2 A/B測試 190
7.2.1 G檢驗 190
7.2.2 Z檢驗 193
7.2.3 結語和警告 195
7.3 多臂老虎機 195
7.4 模型表現(xiàn)的統(tǒng)計界限 198
7.4.1 分類誤差的統(tǒng)計區(qū)間 199
7.4.2 自舉法統(tǒng)計區(qū)間 199
7.4.3 回歸的自舉法預測區(qū)間 201
7.5 評估測試集的充分性 201
7.5.1 神經(jīng)元覆蓋率 201
7.5.2 突變測試 202
7.6 模型屬性的評估 202
7.6.1 健壯性 203
7.6.2 公平性 203
7.7 小結 204
第8章 模型部署 206
8.1 靜態(tài)部署 206
8.2 在用戶設備上動態(tài)部署 207
8.2.1 模型參數(shù)的部署 207
8.2.2 序列化對象的部署 208
8.2.3 部署到瀏覽器上 208
8.2.4 優(yōu)點和缺點 208
8.3 在服務器上動態(tài)部署 209
8.3.1 在虛擬機上部署 209
8.3.2 在容器中部署 210
8.3.3 無服務器部署 211
8.3.4 模型流 212
8.4 部署策略 214
8.4.1 單一部署 214
8.4.2 靜默部署 215
8.4.3 金絲雀部署 215
8.4.4 多臂老虎機 216
8.5 自動部署、版本管理和元數(shù)據(jù) 216
8.5.1 模型附帶資產(chǎn) 216
8.5.2 版本同步 216
8.5.3 模型版本元數(shù)據(jù) 217
8.6 模型部署實踐 217
8.6.1 算法效率 218
8.6.2 深度模型的部署 221
8.6.3 緩存 221
8.6.4 模型和代碼的交付格式 222
8.6.5 從一個簡單的模型開始 224
8.6.6 對外測試 225
8.7 小結 225
第9章 模型服務、監(jiān)測和維護 227
9.1 模型服務運行時的屬性 227
9.1.1 安全性和正確性 227
9.1.2 部署的方便性 228
9.1.3 模型有效性的保證 228
9.1.4 易于恢復 229
9.1.5 避免訓練/服務偏離 229
9.1.6 避免隱藏反饋環(huán)路 229
9.2 模型服務模式 230
9.2.1 批量模式服務 230
9.2.2 對人按需服務 231
9.2.3 對機器按需服務 232
9.3 現(xiàn)實世界中的模型服務 233
9.3.1 為錯誤做好準備 233
9.3.2 處理錯誤 234
9.3.3 做好準備,應對變化 236
9.3.4 做好準備,應對人性 237
9.4 模型監(jiān)測 238
9.4.1 什么會出問題 238
9.4.2 監(jiān)測的內(nèi)容和方法 239
9.4.3 記錄什么日志 241
9.4.4 監(jiān)測濫用情況 242
9.5 模型維護 243
9.5.1 何時更新 243
9.5.2 如何更新 244
9.6 小結 246
第 10章 結論 249
10.1 學習收獲 249
10.2 后續(xù)閱讀 253
10.3 致謝 253