本書不僅介紹大規(guī)模機器學習的基本概念,還包含豐富的案例研究。書中所選皆為*實用的技術和工具,而對理論細節(jié)不進行深入討論,旨在提供大規(guī)模機器學習方法(甚至非常規(guī)方法)。不管是初學者、普通用戶還是專家級用戶,通過本書都能理解并掌握利用Python進行大規(guī)模機器學習。為讓讀者快速掌握核心技術,本書由淺入深講解大量實例,圖文并茂呈現(xiàn)每一步的操作結果,幫助讀者更好地掌握大規(guī)模機器學習Python工具。例如:基于Scikit-learn可擴展學習、 Liblinear和Vowpal Wabbit快速支持向量機、基于Theano與H2O的大規(guī)模深度學習方法、TensorFlow深度學習技術與在線神經網絡方法、大規(guī)模分類和回歸樹的可擴展解決方案、大規(guī)模無監(jiān)督學習(PCA,聚類分析和主題建模等)擴展方法、Hadoop和Spark分布式環(huán)境、Spark機器學習實踐以及Theano和GPU計算的基礎知識。
擁有大腦的好處在于:一個人可以學習,無知可以變成有知,點滴知識可以逐漸匯聚成江海
Douglas Hofstadter
機器學習屬于人工智能范疇,其目的是基于現(xiàn)有數(shù)據(jù)集(訓練集)來尋找函數(shù),以便以盡可能高的正確性預測先前未見過的數(shù)據(jù)集(測試集)的結果,這通常以標簽和類別的形式(分類問題)或以連續(xù)值的形式(回歸問題)出現(xiàn)。在實際應用中,機器學習的具體實例包括預測未來股票價格,或從一組文件中對作者性別進行分類,等等。本書介紹最重要的機器學習概念和適合更大數(shù)據(jù)集的方法,并通過Python的實際示例向讀者進行講解。主要討論監(jiān)督學習(分類和回歸),以及適用于更大數(shù)據(jù)集的無監(jiān)督學習,比如主成分分析(PCA)、聚類和主題建模。
谷歌、Facebook和優(yōu)步等大型IT公司都聲稱它們成功地大規(guī)模應用了這樣的機器學習方法,從而引起世界轟動。隨著大數(shù)據(jù)的出現(xiàn)和適用性提高,對可擴展機器學習解決方案的需求呈指數(shù)增長,導致許多其他公司甚至個人也已經開始渴望在大數(shù)據(jù)集中挖掘隱藏的相關性成果。不幸的是,大多數(shù)學習算法都不能很好擴展,會在臺式計算機或較大的計算集群上導致CPU和內存過載。因此,即使大數(shù)據(jù)的炒作高峰已經過去,但可擴展機器學習解決方案并不充裕。
坦率地說,仍然需要解決許多瓶頸問題,即便是很難歸類為大數(shù)據(jù)的數(shù)據(jù)集也如此(有的數(shù)據(jù)集高達2GB甚至更大)。本書的任務是提供合適的方法(有時甚至是非常規(guī)方法),以便大規(guī)模應用最強大的開源機器學習方法,而無須昂貴的企業(yè)解決方案或大型計算集群。通過本書,讀者可以學習使用Python和其他一些可用的解決方案(這些方案與可擴展的機器學習流水線能很好地集成)。閱讀這本書是一次旅程,它將讓你對機器學習有一個全新的了解,從而為你開始真正的大數(shù)據(jù)分析奠定基礎。
本書涵蓋的內容
第1章以正確視角提出可擴展機器學習的問題,以便你熟悉本書中將要使用的工具。
第2章討論采用隨機梯度下降(SGD)策略減少內存消耗,它基于非核心學習的主題。另外演示各種數(shù)據(jù)的不同處理技術,例如散列技巧。
第3章介紹流算法,它能夠以支持向量機的形式發(fā)現(xiàn)非線性。我們將介紹目前Scikit-learn的替代方法,如LIBLINEAR和Vowpal Wabbit,雖然它們以外部shell命令運行,但很容易用Python腳本封裝和定向。
第4章為在Theano框架中應用深度神經網絡以及使用H2O進行大規(guī)模處理提供有用策略。盡管這是個熱門話題,但成功應用它會相當困難,更別說提供可擴展的解決方案。另外,還將學習使用theanets包中的自動編碼器實現(xiàn)無監(jiān)督的預訓練。
第5章介紹有趣的深度學習技術與在線神經網絡方法。雖然TensorFlow還處于起步階段,但該框架提供了非常不錯的機器學習解決方案。此外,還將詳解如何在TensorFlow環(huán)境中使用Keras卷積神經網絡功能。
第6章詳解隨機森林、梯度增強和XGboost的可擴展解決方案。CART是分類和回歸樹的縮寫,它是一種通常應用于集成方法框架的機器學習方法。我們還將演示使用H2O的大規(guī)模應用實例。
第7章深入介紹無監(jiān)督學習、PCA、聚類分析和主題建模方法,并使用正確方法對它們進行擴展。
第8章學習如何在虛擬機環(huán)境中設置Spark,以便從單臺機器轉移到網絡計算范例。Python很容易在機器集群上集成并能增強我們的工作效率,因此很容易利用Hadoop集群的能力。
第9章演示使用Spark處理數(shù)據(jù)和在大數(shù)據(jù)集上構建預測模型的所有重要環(huán)節(jié)。
附錄介紹GPU和Theano,包括Theano和GPU計算的基礎知識。如果你的系統(tǒng)允許,還將幫助讀者學習相關安裝和環(huán)境配置,以便在GPU上使用Theano。
本書要求
運行書中代碼示例需要在macOS、Linux或Microsoft Windows上安裝Python 27或更高版本。
書中示例經常使用Python的基本功能庫,例如SciPy、NumPy、Scikitlearn和StatsModels,并且在某種程度上使用matplotlib和pandas進行科學和統(tǒng)計計算。也會使用稱為H2O的非核心云計算應用程序。
本書需要Jupyter及其Python內核驅動的Notebooks,本書使用最新版本41。
第1章將為設置Python環(huán)境、核心庫以及全部必需工具提供所有分步說明和某些技巧。
本書讀者
本書適合數(shù)據(jù)科學從業(yè)者、開發(fā)人員以及計劃使用大型復雜數(shù)據(jù)集的讀者。 我們努力讓本書擁有盡可能好的可讀性,以便適合更多讀者。 考慮到本書主題非常先進,我們建議讀者先熟悉基本的機器學習概念,如分類和回歸、誤差最小化函數(shù)和交叉驗證等,但不嚴格要求讀者必須這樣做。本書假設讀者了解Python、Jupyter Notebooks和命令行運行,并有一定的數(shù)學基礎,能夠掌握書中的各種大型解決方案背后的概念。本書寫作風格也適合使用其他語言(R、Java和MATLAB)的程序員。 理想情況下,非常適合(但不限于)熟悉機器學習并有興趣使用Python的數(shù)據(jù)科學家,因為相比于R或MATLAB而言,Python在計算、內存和I/O方面有優(yōu)勢。
排版約定
書中代碼塊設置如下:
大多數(shù)示例中使用Jupyter Notebooks,所以希望在包含代碼塊的單元中始終帶有輸入(標記為In:),并通常帶有輸出(標記為Out:)。在你的計算機上,只需輸入In:后面的代碼,并檢查結果是否與Out:后面的內容相對應:
在終端命令行中給出命令時,會帶有前綴$>,否則,如果是Python REPL,則以>>>開頭:
表示警告或重要說明。
表示提示和技巧。
下載示例代碼及彩色圖像
本書的示例代碼及所有截圖和樣圖,可以從http://wwwpacktpubcom通過個人賬號下載,也可以訪問華章圖書官網http://wwwhzbookcom,通過注冊并登錄個人賬號下載。
還可以從GitHub獲取本書代碼:
https://githubcom/PacktPublishing/LargeScaleMachineLearningWithPython。
Bastiaan Sjardin是一位具有人工智能和數(shù)學背景的數(shù)據(jù)科學家和公司創(chuàng)始人。他獲得萊頓大學和麻省理工學院(MIT)校園課程聯(lián)合培養(yǎng)的認知科學碩士學位。在過去五年中,他從事過廣泛的數(shù)據(jù)科學和人工智能項目。他是密歇根大學社會網絡分析課程Coursera和約翰斯·霍普金斯大學機器學習實踐課程的?。他擅長Python和R編程語言。目前,他是Quandbee(http://wwwquandbeecom)的聯(lián)合創(chuàng)始人,該公司主要提供大規(guī)模機器學習和人工智能應用。
Luca Massaron是一位數(shù)據(jù)科學家和市場研究總監(jiān),擅長多元統(tǒng)計分析、機器學習和客戶洞察力研究,在解決實際問題和應用推理、統(tǒng)計、數(shù)據(jù)挖掘和算法來為用戶創(chuàng)造價值方面有十多年經驗。從成為意大利網絡觀眾分析的先驅,到躋身前十名的Kaggler,他一直對數(shù)據(jù)分析充滿熱情,還向專業(yè)人士和普通大眾展示數(shù)據(jù)驅動知識發(fā)現(xiàn)的潛力,相比不必要的復雜性,他更喜歡簡潔。他相信僅僅通過基本操作就可以在數(shù)據(jù)科學中收獲很多東西。
Alberto Boschetti是一位具有信號處理和統(tǒng)計專業(yè)知識的數(shù)據(jù)科學家。他獲得電信工程博士學位,目前在倫敦生活和工作。在其工作項目中,他面臨過從自然語言處理(NLP)和機器學習到分布式處理的挑戰(zhàn)。 他在工作中充滿熱情,始終努力了解數(shù)據(jù)科學的*新發(fā)展,他喜歡參加聚會、會議和其他活動。
譯者序
前言
作者簡介
審校者簡介
第1章邁向可擴展性的第一步1
11詳細解釋可擴展性1
111大規(guī)模實例3
112介紹Python4
113使用Python進行向上擴展4
114使用Python進行向外擴展5
12Python用于大規(guī)模機器學習6
121選擇Python 2還是Python 36
122安裝Python7
123逐步安裝7
124安裝軟件包8
125軟件包升級9
126科學計算發(fā)行版10
127Jupyter/IPython介紹11
13Python包13
131NumPy14
132SciPy14
133pandas14
134Scikitlearn15
135小結21
第2章Scikitlearn中的可擴展學習22
21非核心學習22
211選擇子采樣23
212一次優(yōu)化一個實例24
213構建非核心學習系統(tǒng)25
22流化源數(shù)據(jù)25
221處理真實數(shù)據(jù)集26
222第一個示例流化共享單車數(shù)據(jù)集28
223使用pandas I/O工具30
224使用數(shù)據(jù)庫31
225關注實例排序35
23隨機學習37
231批處理梯度下降37
232隨機梯度下降40
233Scikitlearn的SGD實現(xiàn)40
234定義SGD學習參數(shù)42
24數(shù)據(jù)流的特征管理43
241描述目標46
242哈希技巧49
243其他基本變換51
244流測試和驗證52
245使用SGD52
25小結56
第3章實現(xiàn)快速SVM57
31測試數(shù)據(jù)集58
311共享單車數(shù)據(jù)集58
312森林覆蓋類型數(shù)據(jù)集58
32支持向量機59
321hinge loss及其變形64
322Scikitlearn的SVM實現(xiàn)65
323探究通過子采樣改善非線性SVM68
324使用SGD實現(xiàn)大規(guī)模SVM70
33正則化特征選擇77
34SGD中的非線性78
35超參數(shù)調整82
36小結96
第4章神經網絡與深度學習97
41神經網絡架構98
411神經網絡如何學習106
412選擇正確的架構110
413使用神經網絡111
414sknn并行化111
42神經網絡和正則化113
43神經網絡和超參數(shù)優(yōu)化115
44神經網絡和決策邊界117
45用H2O進行規(guī);疃葘W習120
451用H2O進行大規(guī)模深度學習121
452H2O上的網格搜索124
46深度學習和無監(jiān)督預訓練126
47使用theanets進行深度學習126
48自動編碼器和無監(jiān)督學習128
49小結131
第5章用TensorFlow進行深度學習132
51TensorFlow安裝134
52在TensorFlow上使用SkFlow進行機器學習140
53安裝Keras和TensorFlow148
54在TensorFlow中通過Keras實現(xiàn)卷積神經網絡152
541卷積層153
542池化層153
543全連接層154
55增量CNN方法156
56GPU計算156
57小結159
第6章大規(guī)模分類和回歸樹160
61bootstrap聚合162
62隨機森林和極端隨機森林163
63隨機搜索實現(xiàn)快速參數(shù)優(yōu)化167
64CART和boosting172
65XGBoost179
651XGBoost回歸181
652XGBoost流化大型數(shù)據(jù)集184
653XGBoost模型存儲185
66用H2O實現(xiàn)非核心CART185
661H2O上的隨機森林和網格搜索186
662H2O上的隨機梯度增強和網格搜索188
67小結191
第7章大規(guī)模無監(jiān)督學習192
71無監(jiān)督方法192
72特征分解:PCA193
721隨機化PCA199
722增量PCA200
723稀疏PCA201
73使用H2O的PCA202
74K-均值聚類算法203
741初始化方法206
742K-均值假設206
743選擇最佳K209
744擴展K-均值算法:小批量212
75用H2O實現(xiàn)K-均值216
76LDA218
77小結226
第8章分布式環(huán)境Hadoop和Spark227
81從單機到集群227
82設置VM230
821VirtualBox230
822Vagrant232
823使用VM232
83Hadoop生態(tài)系統(tǒng)234
831架構234
832HDFS235
833MapReduce242
834YARN250
84Spark250
85小結260
第9章Spark機器學習實踐261
91為本章設置虛擬機261
92跨集群節(jié)點共享變量262
921廣播只讀變量262
922累加器只寫變量264
923廣播和累加器的示例265
93Spark的數(shù)據(jù)預處理267
931JSON文件和Spark DataFrame268
932處理缺失數(shù)據(jù)270
933在內存中分組和創(chuàng)建表271
934將預處理的DataFrame或RDD寫入磁盤273
935使用Spark DataFrame274
94Spark機器學習276
941Spark處理KDD99數(shù)據(jù)集277
942讀取數(shù)據(jù)集277
943特征工程280
944訓練學習器284
945評估學習器的表現(xiàn)286
946機器學習管道的威力286
947手動優(yōu)化288
948交叉驗證291
95小結293
附錄介紹GPU和Theano294