內容簡介
本書深入介紹了機器學習領域的基本概念和方法,除介紹了Python機器學習庫和用機器學習庫搭建神經網路模型的方法外,還介紹了機器學習算法的數學理論、工作原理、使用方法、實現細節以及如何避免機器學習算法實現過程中的常見問題。本書涵蓋了多種用於文本和圖像分類的機器學習與深度學習方法,以及用於生成新數據的生成對抗網路(GAN)和用於訓練智慧型體的強化學習,還介紹了深度學習的新動態,包括圖神經網路和用於自然語言處理(NLP)的大型transformer。本書講解清晰,示例生動,理論和實踐部分相對平衡,既可以作為機器學習領域初學者的入門教程,也可以作為讀者開發機器學習項目時的參考書。
圖書目錄
譯者序
序
前言
作者簡介
審校者簡介
第1章 賦予計算機從數據中學習的能力1
1.1 將數據轉化為知識的智慧型系統1
1.2 三種機器學習類型2
1.2.1 用於預測未來的監督學習2
1.2.2 解決互動問題的強化學習4
1.2.3 發現數據中隱藏規律的無監督學習 5
1.3 基本術語與符號6
1.3.1 本書中使用的符號和約定6
1.3.2 機器學習術語8
1.4 構建機器學習系統的路線圖8
1.4.1 數據預處理——讓數據可用8
1.4.2 訓練和選擇預測模型9
1.4.3 使用未見過的數據對模型進行評估10
1.5 使用Python實現機器學習算法10
1.5.1 從Python Package Index中安裝Python和其他軟體包10
1.5.2 使用Anaconda Python
軟體包管理器11
1.5.3 科學計算、數據科學和機器學習軟體包12
1.6 本章小結13
第2章 訓練簡單的機器學習分類算法14
2.1 人工神經元——機器學習早期歷史一瞥14
2.1.1 人工神經元的定義15
2.1.2 感知機學習規則16
2.2 使用Python實現感知機學習算法19
2.2.1 面向對象的感知機API19
2.2.2 使用鳶尾花數據集訓練感知機22
2.3 自適應線性神經元與算法收斂27
2.3.1 使用梯度下降法最小化損失函式28
2.3.2 在Python中實現Adaline30
2.3.3 通過特徵縮放改進梯度下降34
2.3.4 大規模機器學習與隨機梯度下降36
2.4 本章小結41
XIV
第3章 ScikitLearn機器學習分類算法之旅42
3.1 分類算法的選擇42
3.2 學習ScikitLearn的第一步——訓練感知機43
3.3 用邏輯回歸算法建模分類機率48
3.3.1 邏輯回歸與條件機率48
3.3.2 用邏輯損失函式更新模型權重51
3.3.3 從Adaline的代碼實現到邏輯回歸的代碼實現53
3.3.4 用ScikitLearn訓練邏輯回歸模型56
3.3.5 使用正則化避免模型過擬合59
3.4 基於最大分類間隔的支持向量機62
3.4.1 理解最大分類間隔62
3.4.2 使用鬆弛變數解決非線性可分問題62
3.4.3 ScikitLearn中另外一種實現64
3.5 使用核支持向量機求解非線性問題64
3.5.1 處理線性不可分數據的核方法64
3.5.2 使用核方法在高維空間中尋找分離超平面66
3.6 決策樹學習69
3.6.1 最大化信息增益70
3.6.2 構建決策樹73
3.6.3 多棵決策樹組成隨機森林76
3.7 基於惰性學習策略的k近鄰算法78
3.8 本章小結81
第4章 構建良好的訓練數據集——數據預處理83
4.1 處理缺失值83
4.1.1 識別表格數據中的缺失值83
4.1.2 刪除含有缺失值的樣本或特徵85
4.1.3 填補缺失值85
4.1.4 ScikitLearn的估計器86
4.2 處理類別數據87
4.2.1 用pandas實現類別數據編碼88
4.2.2 映射有序特徵88
4.2.3 類別標籤編碼89
4.2.4 標稱特徵的獨熱編碼90
4.3 將數據集劃分為訓練數據集和測試數據集93
4.4 使特徵具有相同的尺度95
4.5 選擇有意義的特徵97
4.5.1 用L1和L2正則化對模型複雜度進行懲罰98
4.5.2 L2正則化的幾何解釋98
4.5.3 L1正則化與稀疏解99
4.5.4 序貫特徵選擇算法102
4.6 用隨機森林評估特徵重要性107
4.7 本章小結109
第5章 通過降維方法壓縮數據110
5.1 無監督降維的主成分分析方法110
5.1.1 主成分分析的主要步驟110
5.1.2 提取主成分的步驟112
5.1.3 總方差和被解釋的方差114
5.1.4 特徵變換115
5.1.5 用ScikitLearn實現主成分分析118
5.1.6 評估特徵的貢獻120
5.2 監督數據壓縮的線性判別分析方法122
5.2.1 主成分分析與線性判別分析122
5.2.2 線性判別分析基本原理123
5.2.3 計算散布矩陣124
5.2.4 為新特徵子空間選擇線性判別式126
5.2.5 將樣本投影到新的特徵空間128
5.2.6 用ScikitLearn實現線性判別分析128
5.3 非線性降維和可視化130
5.3.1 非線性降維的不足130
5.3.2 使用tSNE可視化數據131
5.4 本章小結135
XV
第6章 模型評估和超參數調優的最佳實踐136
6.1 使用pipeline方法簡化工作流程136
6.1.1 載入威斯康星乳腺癌數據集136
6.1.2 在pipeline中集成轉換器和估計器138
6.2 使用k折交叉驗證評估模型性能140
6.2.1 holdout交叉驗證140
6.2.2 k折交叉驗證140
6.3 用學習曲線和驗證曲線調試算法144
6.3.1 使用學習曲線解決偏差和方差問題144
6.3.2 使用驗證曲線解決過擬合和欠擬合問題146
6.4 通過格線搜尋微調機器學習模型148
6.4.1 通過格線搜尋調整超參數148
6.4.2 通過隨機搜尋更廣泛地探索超參數的配置149
6.4.3 連續減半超參數的搜尋算法151
6.4.4 嵌套交叉驗證153
6.5 模型性能評估指標154
6.5.1 混淆矩陣155
6.5.2 精確率和召回率156
6.5.3 繪製ROC曲線158
6.5.4 多分類器評價指標160
6.5.5 處理類別不均衡問題161
6.6 本章小結163
XVI
第7章 組合不同模型的集成學習164
7.1 集成學習164
7.2 通過絕對多數投票組合分類器167
7.2.1 實現一個簡單的基於絕對多數投票的集成分類器167
7.2.2 使用絕對多數投票原則進行預測171
7.2.3 評估和調整集成分類器173
7.3 bagging——基於bootstrap樣本構建集成分類器179
7.3.1 bagging簡介179
7.3.2 使用bagging對葡萄酒數據集中的樣本進行分類180
7.4 通過自適應boosting提高弱學習器的性能184
7.4.1 boosting的工作原理184
7.4.2 用ScikitLearn實現AdaBoost188
7.5 梯度boosting——基於損失梯度訓練集成分類器191
7.5.1 比較AdaBoost與梯度boosting191
7.5.2 通用的梯度boosting算法概述191
7.5.3 解釋用於分類的梯度boosting算法193
7.5.4 用梯度boosting分類的例子194
7.5.5 使用XGBoost196
7.6 本章小結197
第8章 用機器學習進行情感分析198
8.1 對IMDb影評數據進行文本處理198
8.1.1 獲取影評數據集199
8.1.2 將影評數據集預處理成更易使用的格式199
8.2 詞袋模型201
8.2.1 將單詞轉換為特徵向量201
8.2.2 通過詞頻-逆文檔頻率評估單詞的相關性203
8.2.3 文本數據清洗204
8.2.4 將文檔處理成token206
8.3 訓練用於文檔分類的邏輯回歸模型208
8.4 處理更大的數據——線上算法和核外學習方法210
8.5 用潛在狄利克雷分配實現主題建模213
8.5.1 使用LDA分解文本
文檔214
8.5.2 用ScikitLearn實現LDA214
8.6 本章小結217
第9章 預測連續目標變數的回歸分析218
9.1 線性回歸簡介218
9.1.1 簡單線性回歸218
9.1.2 多元線性回歸219
9.2 探索艾姆斯住房數據集220
9.2.1 將艾姆斯住房數據集載入到DataFrame中220
9.2.2 可視化數據集的重要特徵222
9.2.3 使用相關矩陣查看相關性223
9.3 最小二乘線性回歸模型的實現225
9.3.1 用梯度下降法求解回歸參數225
9.3.2 用ScikitLearn估計回歸模型的係數229
9.4 使用RANSAC擬合穩健回歸模型231
9.5 評估線性回歸模型的性能233
9.6 使用正則化方法進行回歸237
9.7 將線性回歸模型轉化為曲線——多項式回歸238
9.7.1 使用ScikitLearn添加多項式項239
9.7.2 建模艾姆斯住房數據集中的非線性關係240
9.8 使用隨機森林處理非線性關係243
9.8.1 決策樹回歸243
9.8.2 隨機森林回歸245
9.9 本章小結247
XVII
第10章 處理無標籤數據的聚類分析248
10.1 使用k均值算法對樣本分組248
10.1.1 用ScikitLearn實現k均值聚類248
10.1.2 k均值++——更聰明的簇初始化方法252
10.1.3 硬聚類與軟聚類253
10.1.4 用肘方法求解最優簇的數量255
10.1.5 通過輪廓圖量化聚類質量255
10.2 把簇組織成層次樹260
10.2.1 自底向上的聚類260
10.2.2 在距離矩陣上進行分層聚類262
10.2.3 熱度圖與樹狀圖結合265
10.2.4 通過ScikitLearn進行凝聚聚類266
10.3 通過DBSCAN定位高密度區域267
10.4 本章小結272
XVIII
第11章 從零開始實現多層人工神經網路273
11.1 用人工神經網路建立複雜函式模型273
11.1.1 單層神經網路274
11.1.2 多層神經網路結構275
11.1.3 利用前向傳播激活神經網路277
11.2 識別手寫數字279
11.2.1 獲取並準備MNIST數據集279
11.2.2 實現多層感知機282
11.2.3 神經網路訓練代碼287
11.2.4 評估神經網路的性能291
11.3 訓練人工神經網路295
11.3.1 損失函式的計算295
11.3.2 理解反向傳播296
11.3.3 通過反向傳播訓練神經網路297
11.4 關於神經網路的收斂性300
11.5 關於神經網路實現的最後幾句話300
11.6 本章小結301
第12章 用PyTorch並行訓練神經網路302
12.1 PyTorch和模型的訓練性能302
12.1.1 性能挑戰302
12.1.2 什麼是PyTorch303
12.1.3 如何學習PyTorch304
12.2 學習PyTorch的第一步304
12.2.1 安裝PyTorch305
12.2.2 在PyTorch中創建張量306
12.2.3 對張量形狀和數據類型進行操作307
12.2.4 張量數學運算307
12.2.5 拆分、堆疊和連線張量309
12.3 在PyTorch中構建輸入pipeline310
12.3.1 使用已有張量創建PyTorch DataLoader311
12.3.2 將兩個張量組合成一個聯合數據集311
12.3.3 亂序、批處理和重複313
12.3.4 用存儲在本地硬碟的檔案創建數據集314
12.3.5 從torchvision.datasets庫中獲取數據集318
12.4 在PyTorch中構建神經網路模型321
12.4.1 PyTorch神經網路模組322
12.4.2 構建線性回歸模型322
12.4.3 使用torch.nn和torch.optim模組訓練模型325
12.4.4 構建多層感知機對鳶尾花數據集分類326
12.4.5 在測試數據集上評估訓練好的模型329
12.4.6 保存和重新載入訓練好的模型329
12.5 為多層神經網路選擇激活函式330
12.5.1 回顧邏輯函式331
12.5.2 使用softmax函式估計多分類中的類別機率332
12.5.3 使用雙曲正切函式拓寬輸出範圍333
12.5.4 整流線性單元335
12.6 本章小結337
第13章 深入探討PyTorch的工作原理338
13.1 PyTorch的主要功能338
13.2 PyTorch的計算圖339
13.2.1 理解計算圖339
13.2.2 在PyTorch中創建計算圖339
13.3 用於存儲和更新模型參數的PyTorch張量340
13.4 通過自動微分計算梯度342
13.4.1 計算損失函式關於可微變數的梯度342
13.4.2 自動微分343
13.4.3 對抗樣本344
13.5 使用torch.nn模組簡化常見結構344
13.5.1 使用nn.Sequential實現模型344
13.5.2 選擇損失函式345
13.5.3 解決XOR分類問題346
13.5.4 使用nn.Module靈活構建模型350
13.5.5 使用PyTorch編寫自定義層352
13.6 項目1:預測汽車的燃油效率356
13.6.1 使用特徵列357
13.6.2 訓練DNN回歸模型360
13.7 項目2:分類MNIST手寫數字362
XIX
13.8 高級PyTorch API:PyTorch Lightning簡介364
13.8.1 構建PyTorch Lightning模型365
13.8.2 為Lightning 設定數據載入器367
13.8.3 使用PyTorch Lightning Trainer類訓練模型369
13.8.4 使用TensorBoard評估模型370
13.9 本章小結373
第14章 使用深度卷積神經網路對圖像進行分類374
14.1 卷積神經網路的組成模組374
14.1.1 了解卷積神經網路和層次特徵375
14.1.2 離散卷積376
14.1.3 下採樣層383
XX
14.2 構建卷積神經網路385
14.2.1 處理多個輸入通道385
14.2.2 使用L2範數和dropout對神經網路正則化388
14.2.3 分類任務的損失函式390
14.3 使用PyTorch實現深度卷積神經網路392
14.3.1 多層卷積神經網路結構392
14.3.2 數據載入和預處理393
14.3.3 使用torch.nn模組實現卷積神經網路394
14.4 使用卷積神經網路對人臉圖像進行微笑分類400
14.4.1 載入CelebA數據集400
14.4.2 圖像轉換和數據增廣401
14.4.3 訓練卷積神經網路微笑分類器407
14.5 本章小結413
第15章 用循環神經網路對序列數據建模415
15.1 序列數據415
15.1.1 序列數據建模415
15.1.2 序列數據與時間序列數據416
15.1.3 序列數據的表示416
15.1.4 序列建模方法417
15.2 用於序列數據建模的循環神經網路418
15.2.1 循環神經網路的循環機制418
15.2.2 循環神經網路激活值計算419
15.2.3 隱藏層循環與輸出層循環421
15.2.4 遠距離學習面臨的問題424
15.2.5 長短期記憶網路425
15.3 在PyTorch中實現循環神經網路426
15.3.1 項目1:基於IMDb影評進行情感分析427
15.3.2 項目2:在PyTorch中實現字元級語言建模437
15.4 本章小結448
第16章 transformer:利用注意力機制改善自然語言處理效果449
16.1 帶有注意力機制的循環神經網路449
16.2 自注意力機制453
16.3 注意力是唯一需要的:最初的transformer460
16.4 利用未標註的數據構建大型語言模型467
16.5 用PyTorch微調BERT模型478
16.6 本章小結489
XXI
第17章 用於合成新數據的生成對抗網路491
17.1 生成對抗網路491
17.2 從零開始實現生成對抗網路497
17.3 用卷積GAN和Wasserstein GAN提高生成圖像的質量510
17.4 其他生成對抗網路套用529
17.5 本章小結530
XXII
第18章 用於捕獲圖數據關係的圖神經網路531
18.1 圖數據簡介531
18.2 理解圖卷積534
18.3 用PyTorch從零開始實現圖神經網路540
18.4 其他圖神經網路層和最新的進展554
18.5 本章小結559
第19章 在複雜環境中做決策的強化學習560
19.1 從經驗中學習概述560
19.2 強化學習的理論基礎563
19.3 強化學習算法569
19.4 實現第一個強化學習算法575
19.5 深度Q學習概覽588
19.6 本章小結及本書總結595