本書是介紹機器學(xué)習(xí)技術(shù)的綜合指南,從基礎(chǔ)的統(tǒng)計學(xué)原理和R語言編程知識,到核心的機器學(xué)習(xí)理論和算法分析,以及機器學(xué)習(xí)模型的評估和改進方法,再到機器學(xué)習(xí)技術(shù)在大數(shù)據(jù)平臺上的應(yīng)用,書中都有詳細介紹。
本書主要在第1版的基礎(chǔ)上增加了兩個部分:*個是關(guān)于時間序列模型的新章節(jié)(第 9 章),這是一個源于統(tǒng)計學(xué)的傳統(tǒng)主題。第二個新增的章節(jié)是深度學(xué)習(xí)(第 11 章),它是機器學(xué)習(xí)的一個迅速崛起的子領(lǐng)域。除了增加這兩個章節(jié)之外,本書中的文本和代碼會以一種讀者友好的新格式來整體呈現(xiàn)。新版會繼續(xù)專注于使用流行的統(tǒng)計編程語言 R 來構(gòu)建用例。對于深度學(xué)習(xí)這樣的主題,我們建議采用 Python 語言來配合 TensorFlow 這樣的框架。但是,在第2版中,我們會向讀者展示如何在 TensorFlow 中使用 R 語言編程,因此如果讀者只熟悉 R,可以暫時無須學(xué)習(xí) Python。與第1版一樣,我們通過各種實際用例保持了機器學(xué)習(xí)理論與應(yīng)用的良好平衡,為讀者提供了一個真正全面的機器學(xué)習(xí)主題集合。
(1)從頭到尾了解機器學(xué)習(xí)模型構(gòu)建過程的全面指南
(2)演示了R語言中各種概念的實踐
(3)含基于R語言的Keras和TensorFlow深度學(xué)習(xí)模型介紹
(4)講授如何用 R 語言在 TensorFlow 框架中進行編程,從而讓只擅長 R 語言的讀者不必費力去學(xué)習(xí) Python
譯 者 序
本書最大的特點就是它的全面性。從基礎(chǔ)的統(tǒng)計學(xué)原理和R語言編程知識,到核心的機器學(xué)習(xí)理論和算法分析,以及機器學(xué)習(xí)模型的評估和改進方法,再到機器學(xué)習(xí)技術(shù)在大數(shù)據(jù)平臺上的應(yīng)用,書中都用了一定的篇幅進行講述。此外,對于一些比較前沿和高級的主題,作者也給出了相應(yīng)的參考資料,供有興趣的讀者進一步提高。
第2版還增加了時間序列模型,并把深度學(xué)習(xí)部分從原先的一個小節(jié)擴大為一章,從而大大提高了本書的實用性。
這樣的寫作思路給讀者展示了當今機器學(xué)習(xí)技術(shù)發(fā)展的全貌,有利于讀者理解各種機器學(xué)習(xí)技術(shù)的適用范圍及其相互聯(lián)系,也有利于讀者先從全局和整體入手,再逐步深入到每個細節(jié)中,這樣比較容易把握適合自己的方向。至于不足之處,也許是因為范圍太廣,導(dǎo)致有些部分的講解不夠深入,有些代碼和實例的講解也略顯簡單。
因此,這本書比較適合機器學(xué)習(xí)技術(shù)的初學(xué)者,以及僅僅在某個領(lǐng)域有一定經(jīng)驗、希望從更廣的角度來認識機器學(xué)習(xí)的專業(yè)人士。如果讀者希望更深入鉆研某些技術(shù),可以將本書給出的參考資料作為起點。雖然這些參考資料基本都是英文版的,不過要掌握最新的技術(shù),閱讀原版資料也是一個必要的途徑。本書還引入了很多 R 語言平臺的組件包,它們也適用于實際環(huán)境下的分析工作,是應(yīng)用領(lǐng)域必不可少的得力工具。限于篇幅,本書很難逐個對它們進行詳細介紹,而且開源組件包的版本變化很快,在實際應(yīng)用時,也需要認真閱讀它們的官方文檔。
看過我前幾本譯作的讀者都知道我有在 GitHub 上開辟討論區(qū)的習(xí)慣,這樣可以針對書中的理論、應(yīng)用、代碼等問題與讀者進行交流。本書也不例外,它的討論區(qū)鏈接是 https://github.com/coderLMN/machineLearningUsingR/issues ,歡迎讀者去提出問題并參與討論。我之所以愿意花時間參與這樣的討論,是因為這樣不僅能夠幫助讀者答疑,及時糾正書中可能存在的錯誤,同時我自己在這個過程中也經(jīng)?梢蚤_闊思路、得到啟發(fā)。
我不知道其他譯者會不會這么做,但我為此感到自豪。
其實我還有一個更大的心愿,就是希望讀者在實際運用這些技術(shù)時寫出自己的理解和體會,用自己的經(jīng)驗來幫助其他的讀者。我希望能把這樣的實踐經(jīng)驗總結(jié)放在討論區(qū)里,其中高水平的總結(jié)還可以在書籍再印的時候作為附錄添加進去,從而幫助到更多的讀者。
真心希望這個心愿在本書出版時能夠?qū)崿F(xiàn)。
此外,我在書中加入了一些譯者注,標注了我在翻譯過程中覺得有必要說明的一些問題,例如某些代碼的變動、某些概念的通俗化解釋、提醒讀者注意的細節(jié),等等。由于本人水平有限,雖然已盡全力查閱資料并自行驗證,但翻譯內(nèi)容和譯者注里難免會有不嚴謹或者不正確的地方,還望讀者不吝指正。
本書的代碼和數(shù)據(jù)可從官方GitHub下載:https://github.com/Apress/machine-lea-rning-r-2e。(第1版的下載鏈接是:https://github.com/Apress/machine-learning-using-r )
最后,真誠感謝我的家人。這本書覆蓋的主題較多,翻譯的周期較長,有他們的支持和激勵,我才能保質(zhì)保量地完成這個工作。
吳今朝
2019年9月
前言
第2版添加了兩個新章節(jié),一個介紹時間序列模型(第9章),這是一個源于統(tǒng)計學(xué)的傳統(tǒng)主題;第二個介紹深度學(xué)習(xí)(第11章),它是機器學(xué)習(xí)的一個迅速崛起的子領(lǐng)域。除了增加這兩個章節(jié)之外,本書中的文本和代碼會以一種讀者友好的新格式來整體呈現(xiàn)。
新版會繼續(xù)專注于使用流行的統(tǒng)計編程語言R來構(gòu)建用例。對于深度學(xué)習(xí)這樣的主題,我們建議采用Python語言配合TensorFlow這樣的框架來學(xué)習(xí)。但是,本書會向讀者展示如何在TensorFlow中使用R語言編程,因此如果讀者只熟悉R語言,暫時無須學(xué)習(xí)Python。
與第1版一樣,書中通過各種實際用例保持了機器學(xué)習(xí)理論與應(yīng)用的良好平衡,為讀者提供了一個真正全面的機器學(xué)習(xí)主題集合。
讀者將學(xué)到的內(nèi)容:
利用R語言學(xué)習(xí)機器學(xué)習(xí)算法。
掌握構(gòu)建過程流的機器學(xué)習(xí)模型。
機器學(xué)習(xí)算法的理論基礎(chǔ)。
專注于行業(yè)的實際用例。
R語言中的時間序列建模。
在R語言中使用Keras和TensorFlow進行深度學(xué)習(xí)。
目標讀者
本書適用于希望了解機器學(xué)習(xí)方法和算法在R語言中的實踐的數(shù)據(jù)科學(xué)家、數(shù)據(jù)科學(xué)專業(yè)人員和學(xué)術(shù)界研究人員。對于那些想用Apache Hadoop、Hive、Pig和Spark實現(xiàn)可擴展機器學(xué)習(xí)模型相關(guān)技術(shù)的讀者,本書也能使之受益。
本書是一本全面的教程,適合想要從頭到尾了解機器學(xué)習(xí)模型構(gòu)建過程的任何人,內(nèi)容包括:
相關(guān)概念在R語言中的實際演示。
使用Apache Hadoop和Spark的機器學(xué)習(xí)模型。
時間序列分析。
在R語言中利用Keras和TensorFlow介紹深度學(xué)習(xí)模型。
曼卡西克·拉瑪蘇布蘭馬尼安(Karthik Ramasubramanian)
就職于印度創(chuàng)業(yè)技術(shù)公司 Hike Messenger。他一直為零售、電子商務(wù)和技術(shù)行業(yè)解決跨行業(yè)的數(shù)據(jù)科學(xué)問題,開發(fā)數(shù)據(jù)驅(qū)動的解決方案并進行原型構(gòu)建。Karthik 對整個數(shù)據(jù)科學(xué)生命周期(從探索數(shù)據(jù)問題,到創(chuàng)建數(shù)據(jù)科學(xué)模型,以及開發(fā)各行業(yè)相關(guān)產(chǎn)品)都具有豐富的經(jīng)驗。
阿布舍克·辛格(Abhishek Singh)
他領(lǐng)導(dǎo)的數(shù)據(jù)科學(xué)專業(yè)團隊正在解決糧食安全、網(wǎng)絡(luò)安全、自然災(zāi)害、醫(yī)療保健以及更多領(lǐng)域的緊迫問題。他對美國銀行的資產(chǎn)進行了壓力測試,開發(fā)了保險定價模型,并優(yōu)化了客戶的電信體驗。他積極參與數(shù)據(jù)科學(xué)分析相關(guān)的思想交流、創(chuàng)作、公開演講、會議和培訓(xùn)。他堅定地支持負責任地使用人工智能來消除偏見,并堅信合理使用AI將使生活更美好。
譯者序
前言
第1章 機器學(xué)習(xí)和R語言入門1
1.1 了解發(fā)展歷程1
1.1.1 統(tǒng)計學(xué)習(xí)2
1.1.2 機器學(xué)習(xí)2
1.1.3 人工智能3
1.1.4 數(shù)據(jù)挖掘3
1.1.5 數(shù)據(jù)科學(xué)4
1.2 概率與統(tǒng)計5
1.2.1 計數(shù)和概率的定義5
1.2.2 事件和關(guān)系7
1.2.3 隨機性、概率和分布9
1.2.4 置信區(qū)間和假設(shè)檢驗9
1.3 R語言入門13
1.3.1 基本組成部分13
1.3.2 R語言的數(shù)據(jù)結(jié)構(gòu)14
1.3.3 子集處理15
1.3.4 函數(shù)和Apply系列17
1.4 機器學(xué)習(xí)過程工作流19
1.4.1 計劃20
1.4.2 探索20
1.4.3 構(gòu)建20
1.4.4 評估20
1.5 其他技術(shù)21
1.6 小結(jié)21
第2章 數(shù)據(jù)準備和探索22
2.1 規(guī)劃數(shù)據(jù)收集23
2.1.1 變量類型23
2.1.2 數(shù)據(jù)格式24
2.1.3 數(shù)據(jù)源的類型29
2.2 初始數(shù)據(jù)分析30
2.2.1 初步印象30
2.2.2 把多個數(shù)據(jù)源組織到一起32
2.2.3 整理數(shù)據(jù)34
2.2.4 補充更多信息37
2.2.5 重塑38
2.3 探索性數(shù)據(jù)分析38
2.3.1 摘要統(tǒng)計量39
2.3.2 矩42
2.4 案例研究:信用卡欺詐46
2.4.1 數(shù)據(jù)導(dǎo)入46
2.4.2 數(shù)據(jù)變換47
2.4.3 數(shù)據(jù)探索48
2.5 小結(jié)50
第3章 抽樣與重抽樣技術(shù)51
3.1 介紹抽樣技術(shù)51
3.2 抽樣的術(shù)語52
3.2.1 樣本52
3.2.2 抽樣分布52
3.2.3 總?cè)后w的均值和方差53
3.2.4 樣本均值和方差53
3.2.5 匯總的均值和方差53
3.2.6 抽樣點53
3.2.7 抽樣誤差54
3.2.8 抽樣率54
3.2.9 抽樣偏誤54
3.2.10 無放回的抽樣54
3.2.11 有放回的抽樣55
3.3 信用卡欺詐:總?cè)后w的統(tǒng)計量55
3.3.1 數(shù)據(jù)描述55
3.3.2 總?cè)后w的均值56
3.3.3 總?cè)后w的方差56
3.3.4 匯總的均值和方差56
3.4 抽樣在業(yè)務(wù)上的意義59
3.5 概率和非概率抽樣60
3.6 關(guān)于抽樣分布的統(tǒng)計理論61
3.6.1 大數(shù)定律62
3.6.2 中心極限定理64
3.7 概率抽樣技術(shù)67
3.7.1 總?cè)后w的統(tǒng)計量67
3.7.2 簡單隨機抽樣70
3.7.3 系統(tǒng)性隨機抽樣75
3.7.4 分層隨機抽樣78
3.7.5 聚類抽樣83
3.7.6 自助抽樣88
3.8 蒙特卡羅方法:接受-拒絕93
3.9 小結(jié)95
第4章 R語言里的數(shù)據(jù)可視化96
4.1 ggplot2組件包簡介97
4.2 世界經(jīng)濟發(fā)展指標97
4.3 折線圖97
4.4 堆疊柱狀圖102
4.5 散點圖106
4.6 箱形圖107
4.7 直方圖和密度圖109
4.8 餅圖113
4.9 相關(guān)圖114
4.10 熱點圖116
4.11 氣泡圖117
4.12 瀑布圖120
4.13 系統(tǒng)樹圖122
4.14 關(guān)鍵字云124
4.15 桑基圖126
4.16 時間序列圖127
4.17 隊列圖129
4.18 空間圖130
4.19 小結(jié)133
第5章 特征工程135
5.1 特征工程簡介135
5.2 了解工作數(shù)據(jù)136
5.2.1 數(shù)據(jù)摘要137
5.2.2 因變量的屬性137
5.2.3 特征的可用性:連續(xù)型或
分類型140
5.2.4 設(shè)置數(shù)據(jù)的假設(shè)141
5.3 特征排名141
5.4 變量子集的選擇144
5.4.1 過濾器方法145
5.4.2 包裝器方法148
5.4.3 嵌入式方法154
5.5 主成分分析158
5.6 小結(jié)161
第6章 機器學(xué)習(xí)理論和實踐162
6.1 機器學(xué)習(xí)的類型163
6.1.1 有監(jiān)督學(xué)習(xí)164
6.1.2 無監(jiān)督學(xué)習(xí)164
6.1.3 半監(jiān)督學(xué)習(xí)165
6.1.4 強化學(xué)習(xí)165
6.2 機器學(xué)習(xí)算法的類別165
6.3 實際環(huán)境的數(shù)據(jù)集168
6.3.1 房產(chǎn)售價168
6.3.2 購買偏好169
6.3.3 Twitter訂閱和文章169
6.3.4 乳腺癌170
6.3.5 購物籃170
6.3.6 亞馬遜美食評論170
6.4 回歸分析171
6.5 相關(guān)分析172
6.5.1 線性回歸174
6.5.2 簡單線性回歸175
6.5.3 多元線性回歸177
6.5.4 模型診斷:線性回歸180
6.5.5 多項回歸190
6.5.6 邏輯回歸193
6.5.7 logit變換194
6.5.8 幾率比194
6.5.9 模型診斷:邏輯回歸200
6.5.10 多項邏輯回歸208
6.5.11 廣義線性模型211
6.5.12 結(jié)論212
6.6 支持向量機213
6.6.1 線性SVM214
6.6.2 二元SVM分類模型214
6.6.3 多類別SVM216
6.6.4 結(jié)論217
6.7 決策樹217
6.7.1 決策樹的類型218
6.7.2 決策指標219
6.7.3 決策樹學(xué)習(xí)方法221
6.7.4 集成樹235
6.7.5 結(jié)論241
6.8 樸素貝葉斯方法241
6.8.1 條件概率241
6.8.2 貝葉斯定理241
6.8.3 先驗概率242
6.8.4 后驗概率242
6.8.5 似然和邊際似然242
6.8.6 樸素貝葉斯方法243
6.8.7 結(jié)論247
6.9 聚類分析247
6.9.1 聚類方法簡介248
6.9.2 聚類算法248
6.9.3 內(nèi)部評估256
6.9.4 外部評估257
6.9.5 結(jié)論259
6.10 關(guān)聯(lián)規(guī)則挖掘259
6.10.1 關(guān)聯(lián)概念簡介259
6.10.2 規(guī)則挖掘算法261
6.10.3 推薦算法267
6.10.4 結(jié)論273
6.11 人工神經(jīng)網(wǎng)絡(luò)273
6.11.1 人類認知學(xué)習(xí)273
6.11.2 感知器275
6.11.3 Sigmoid神經(jīng)元276
6.11.4 神經(jīng)網(wǎng)絡(luò)的體系架構(gòu)277
6.11.5 有監(jiān)督與無監(jiān)督的神經(jīng)網(wǎng)絡(luò)278
6.11.6 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)算法279
6.11.7 前饋反向傳播281
6.11.8 結(jié)論286
6.12 文本挖掘方法286
6.12.1 文本挖掘簡介287
6.12.2 文本摘要288
6.12.3 TF-IDF289
6.12.4 詞性標注291
6.12.5 關(guān)鍵字云295
6.12.6 文本分析:Microsoft Cognitive Services295
6.12.7 結(jié)論304
6.13 在線機器學(xué)習(xí)算法304
6.13.1 模糊C均值聚類305
6.13.2 結(jié)論308
6.14 構(gòu)建模型的核對清單308
6.15 小結(jié)308
第7章 機器學(xué)習(xí)模型的評估309
7.1 數(shù)據(jù)集309
7.1.1 房產(chǎn)售價309
7.1.2 購買偏好311
7.2 模型性能和評估入門312
7.3 模型性能評估的目標313
7.4 總?cè)后w的穩(wěn)定性指數(shù)314
7.5 連續(xù)型輸出的模型評估318
7.5.1 平均絕對誤差320
7.5.2 均方根誤差321
7.5.3 R2322
7.6 離散型輸出的模型評估325
7.6.1 分類矩陣325
7.6.2 靈敏度和特異性329
7.6.3 ROC曲線下的面積330
7.7 概率技術(shù)333
7.7.1 K折交叉驗證333
7.7.2 自助抽樣335
7.8 Kappa誤差指標336
7.9 小結(jié)339
第8章 模型性能改進340
8.1 Caret組件包概述341
8.2 超參數(shù)簡介343
8.3 超參數(shù)優(yōu)化345
8.3.1 人工搜索346
8.3.2 人工網(wǎng)格搜索348
8.3.3 自動網(wǎng)格搜索349
8.3.4 最優(yōu)搜索351
8.3.5 隨機搜索353
8.3.6 自定義搜索354
8.4 偏誤和方差權(quán)衡357
8.5 集成學(xué)習(xí)簡介360
8.5.1 投票集成360
8.5.2 集成學(xué)習(xí)中的高級方法361
8.6 在R語言里演示集成技術(shù)364
8.6.1 裝袋樹364
8.6.2 決策樹的梯度增強366
8.6.3 混合knn和rpart369
8.6.4 利用caretEnsemble進行堆疊370
8.7 高級主題:機器學(xué)習(xí)模型的貝葉斯優(yōu)化374
8.8 小結(jié)379
第9章 時間序列模型380
9.1 時間序列的組成部分380
9.2 平穩(wěn)性檢驗383
9.3 ACF和AR模型386
9.4 PACF和MA模型388
9.5 ARIMA模型391
9.6 具有AR誤差的線性回歸397
9.7 小結(jié)400
第10章 可擴展機器學(xué)習(xí)和相關(guān)技術(shù)402
10.1 分布式處理和存儲402
10.1.1 GFS403
10.1.2 MapReduce404
10.1.3 R語言里的并行執(zhí)行404
10.2 Hadoop生態(tài)系統(tǒng)407
10.2.1 MapReduce408
10.2.2 Hive411
10.2.3 Apache Pig414
10.2.4 HBase417
10.2.5 Spark418
10.3 在R語言環(huán)境下用Spark進行機器學(xué)習(xí)419
10.3.1 設(shè)置環(huán)境變量419
10.3.2 初始化Spark會話420
10.3.3 加載數(shù)據(jù)并運行預(yù)處理420
10.3.4 創(chuàng)建SparkDataFrame421
10.3.5 構(gòu)建機器學(xué)習(xí)模型421
10.3.6 對測試數(shù)據(jù)進行預(yù)測422
10.3.7 終止SparkR會話423
10.4 在R語言里利用H2O進行機器學(xué)習(xí)423
10.4.1 安裝組件包424
10.4.2 H2O集群的初始化424
10.5 小結(jié)425
第11章 用Keras和TensorFlow進行深度學(xué)習(xí)427
11.1 深度學(xué)習(xí)簡介427
11.2 深度學(xué)習(xí)架構(gòu)428
11.2.1 卷積神經(jīng)網(wǎng)絡(luò)428
11.2.2 遞歸神經(jīng)網(wǎng)絡(luò)429
11.2.3 生成對抗網(wǎng)絡(luò)430
11.3 深度學(xué)習(xí)的工具集431
11.3.1 高級庫431
11.3.2 后端引擎或框架431
11.3.3 硬件能力432
11.3.4 編程語言的選擇432
11.3.5 云基礎(chǔ)架構(gòu)432
11.4 用例:識別Quora中的重復(fù)問題432
11.4.1 環(huán)境設(shè)置432
11.4.2 數(shù)據(jù)預(yù)處理433
11.4.3 基準模型434
11.4.4 Siamese遞歸架構(gòu)435
11.4.5 Keras模型437
11.4.6 模型的摘要437
11.4.7 驗證樣本438
11.4.8 訓(xùn)練模型438
11.4.9 保存模型439
11.4.10 模型性能439
11.4.11 進行預(yù)測440
11.4.12 預(yù)測示例440
11.5 小結(jié)441