機器學習與預測分析正在改變企業(yè)和其他組織的運作方式,本書將帶領讀者進入預測分析的世界。全書共13章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統(tǒng)講述了數據分類、數據預處理、模型優(yōu)化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背后的基本理論與應用實踐聯系起來,通過這種方式讓讀者聚焦于如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統(tǒng)計模型。本書可作為學習數據科學的初學者及想進一步拓展數據科學領域認識的讀者的參考書。同樣,本書也適合計算機等相關專業(yè)的本科生、研究生閱讀。
前 言無需多言,大家都已知道,機器學習已發(fā)展成為當前最能激發(fā)人們興趣的技術之一。出于各種考慮,谷歌、臉書、蘋果、亞馬遜、IBM等眾多大公司都投入了巨資用于機器學習理論和應用的研究。機器學習看起來已經成為當前的一個流行語,但這絕不是炒作。這一令人興奮的技術為我們帶來了全新的可能,并已成為我們日常生活中不可或缺的一部分。例如,與智能手機的語音助手對話、向客戶推薦合適的商品、防止信用卡詐騙、過濾垃圾郵件,以及檢測與診斷疾病等,這樣的例子不勝枚舉。
如果你想參與機器學習的實踐,或是成為解決問題的能手,抑或是考慮從事機器學習研究方面的工作,那么本書正適合你。不過,對初學者來說,機器學習的理論知識是比較有難度的。幸運的是,近年來出版了許多非常實用的書籍,通過實現一些功能強大的算法來幫助讀者步入機器學習的殿堂。在我看來,代碼示例起到了重要的作用,通過示例代碼的實際操作可以對概念進行更好的闡釋。不過請記。耗芰姶罅,責任就接踵而至!機器學習背后的概念美妙且重要,就如同黑盒一樣令人無法琢磨。因此,我旨在為讀者提供一本不一樣的書籍:討論與機器學習概念相關的必要細節(jié),并以直觀且詳實的方式來說明機器學習算法是如何工作的,以及如何在實際中應用它們。尤為重要的是,如何避開常見的誤區(qū)。
如果在“谷歌學術”中搜索“機器學習”一詞,會返回一個大的文獻數:1 800 000。當然,我們無法討論過去60年中所提出的算法和應用的全部細節(jié)。不過,本書涵蓋了機器學習領域最核心的主題和概念,可以讓大家率先踏入這一領域,從而開啟一段令人興奮的旅程。如果本書內容無法滿足你對此領域的求知欲,你可以利用作者所列出的豐富資源,追尋這一領域最核心的突破。
如果你已經詳細地研究過機器學習理論,本書將教會你如何把所學知識付諸實踐。如果你曾經使用過機器學習技術,并且希望能更深入地了解機器學習算法是如何工作的,本書也適合你!如果你剛接觸機器學習領域,也不用擔心,反而更應該感到高興。我保證,機器學習將改變你解決問題的思考方式,并且讓你見識到如何通過發(fā)揮數據的力量來解決問題。
在深度進入機器學習領域之前,先回答一個重要的問題:為什么使用Python?答案很簡單:它功能強大且使用方便。Python已經成為數據科學領域最為流行的編程語言,它不僅可以讓我們忽略掉編程中那些繁雜的部分,還可以提供一個交互式環(huán)境,讓我們能夠快速記錄自己的想法,并且將概念直接付諸實現。
回顧我的個人經歷,實事求是地說,對機器學習的研究讓我成為一名優(yōu)秀的科學工作者,讓我變得善于思考,并且成長為問題解決能手。在本書中,我將與讀者分享這些知識。知識經由學習獲得,而學習熱情是其中的關鍵,真正掌握某項技能只有通過實踐才能夠實現。學習的歷程不可能一帆風順,某些主題相對來說難度會比較大,但我希望大家能把握住這個機會,并享受學習的回報。請記住,在機器學習的旅途中,我們共同前行,通過此書,你將學會許多新的技能,借助于它們,我們甚至能夠以數據驅動的方式解決那些最棘手的問題。
本書內容第1章介紹了機器學習算法的劃分。此外,還討論了構建一個典型的機器學習模型的必要步驟,對此過程的理解有助于后續(xù)章節(jié)的學習。
第2章追溯了機器學習的起源,介紹了二元感知分類器和自適應線性神經元。該章還介紹了模式分類的基礎,并著重介紹優(yōu)化算法和機器學習的相互作用。
第3章介紹了機器學習中分類算法的基本內容,并使用一個流行且包含算法種類相對齊全的開源機器學習算法庫scikit-learn,來完成幾個機器學習分類算法實例。
第4章討論了如何處理原始數據中常見的問題,諸如數據缺失等。該章還討論了幾種如何從數據集中找出蘊含信息最豐富特征的方法,并講解了如何處理不同數據類型的變量,以使其與機器學習算法的輸入要求相匹配。
第5章介紹了如何通過降維來壓縮數據的特征數量,以便將數據集壓縮到一個容量相對較小的子集上,同時還能保持原數據中有用的區(qū)分信息。該章主要討論了通過主成分分析來降維的標準方法,并將其與監(jiān)督以及線性變換技術進行了比較。
第6章討論了對預測模型進行評估時應該做什么和不應該做什么。此外,還探討了衡量模型的不同標準以及機器學習算法調優(yōu)的相關技巧。
第7章介紹了有效地組合多個機器學習算法的不同方法,并講授了如何通過構造繼承模型來消除個別分類器的弱點,從而最終得到更加準確和可信的預測結果。
第8章討論了將文本數據轉化為有意義的表達方式的方法,根據人們的留言借助機器學習算法來預測其觀點。
第9章繼續(xù)對預測模型進行了探討,并將引導你完成將機器學習模型嵌入到Web應用中的核心步驟。
第10章討論了當自變量和因變量都為連續(xù)值時,建立線性模型來完成預測的基本方法。在介紹了不同的線性模型后,又討論了多項式回歸和基于樹的方法—隨機森林。
第11章將關注的焦點轉移到了另一類型的機器學習方法:無監(jiān)督學習。我們使用了三種基本的聚類算法將具備一定相似度的對象劃分為幾個組別。
第1
作 者 簡 介Sebastian Raschka是密歇根州立大學的博士生,他在計算生物學領域提出了幾種新的計算方法,還被科技博客Analytics Vidhya評為GitHub上具影響力的數據科學家。他有一整年都使用Python進行編程的經驗,同時還多次參加數據科學應用與機器學習領域的研討會。正是因為Sebastian 在數據科學、機器學習以及Python等領域擁有豐富的演講和寫作經驗,他才有動力完成此書的撰寫,目的是幫助那些不具備機器學習背景的人設計出由數據驅動的解決方案。
他還積極參與到開源項目中,由他開發(fā)完成的計算方法已經被成功應用到了機器學習競賽(如Kaggle等)中。在業(yè)余時間,他沉醉于構建體育運動的預測模型,要么待在電腦前,要么在運動。
首先,我要感謝Arun Ross和Pang-Ning Tan教授,以及那些曾經啟發(fā)我并激起我在模式分類、機器學習、數據挖掘領域興趣的人。
我還想借此機會對Python社區(qū)和開源包的開發(fā)者表示感謝,他們幫助我創(chuàng)建了一個用于科學研究和數據科學的完美開發(fā)環(huán)境。
在此,還要特別感謝scikit-learn的核心開發(fā)人員。作為此項目的一個參與者,我有幸與這些極客合作,他們不僅對機器學習有著深入的了解,同時還都是非常出色的程序員。
后,我還要感謝所有對本書感興趣的讀者,也真心希望我的熱情能夠感染大家一起加入到Python與機器學習社區(qū)中來。
目 錄
譯者序
推薦序
作者簡介
審校者簡介
前言
第1章 賦予計算機學習數據的能力1
1.1構建智能機器將數據轉化為知識1
1.2 機器學習的三種不同方法1
1.2.1 通過監(jiān)督學習對未來事件進行預測2
1.2.2 通過強化學習解決交互式問題4
1.2.3 通過無監(jiān)督學習發(fā)現數據本身潛在的結構4
1.2.4 基本術語及符號介紹5
1.3 構建機器學習系統(tǒng)的藍圖6
1.3.1 數據預處理6
1.3.2 選擇預測模型類型并進行訓練7
1.3.3 模型驗證與使用未知數據進行預測8
1.4 Python在機器學習中的應用8
本章小結9
第2章 機器學習分類算法10
2.1 人造神經元—早期機器學習概覽10
2.2 使用Python實現感知器學習算法13
2.3 自適應線性神經元及其學習的收斂性19
2.3.1 通過梯度下降最小化代價函數20
2.3.2 使用Python實現自適應線性神經元21
2.3.3 大規(guī)模機器學習與隨機梯度下降25
本章小結29
第3章 使用scikit-learn實現機器學習分類算法30
3.1 分類算法的選擇30
3.2 初涉scikit-learn的使用30
使用scikit-learn訓練感知器31
3.3 邏輯斯諦回歸中的類別概率34
3.3.1 初識邏輯斯諦回歸與條件概率34
3.3.2 通過邏輯斯諦回歸模型的代價函數獲得權重36
3.3.3 使用scikit-learn訓練邏輯斯諦回歸模型37
3.3.4 通過正則化解決過擬合問題39
3.4 使用支持向量機最大化分類間隔41
3.4.1 對分類間隔最大化的直觀認識41
3.4.2 使用松弛變量解決非線性可分問題42
3.4.3 使用scikit-learn實現SVM44
3.5 使用核SVM解決非線性問題44
3.6 決策樹48
3.6.1 最大化信息增益—獲知盡可能準確的結果49
3.6.2 構建決策樹52
3.6.3 通過隨機森林將弱分類器集成為強分類器53
3.7 惰性學習算法—k-近鄰算法54
本章小結57
第4章 數據預處理—構建好的訓練數據集58
4.1 缺失數據的處理58
4.1.1 將存在缺失值的特征或樣本刪除59
4.1.2 缺失數據填充60
4.1.3 理解scikit-learn預估器的API60
4.2 處理類別數據61
4.2.1 有序特征的映射61
4.2.2 類標的編碼62
4.2.3 標稱特征上的獨熱編碼63
4.3 將數據集劃分為訓練數據集和測試數據集64
4.4 將特征的值縮放到相同的區(qū)間65
4.5 選擇有意義的特征66
4.5.1 使用L1正則化滿足數據稀疏化67
4.5.2 序列特征選擇算法70
4.6 通過隨機森林判定特征的重要性74
本章小結76
第5章 通過降維壓縮數據77
5.1 無監(jiān)督數據降維技術—主成分分析77
5.1.1 總體方差與貢獻方差78
5.1.2 特征轉換80
5.1.3 使用scikit-learn進行主成分分析82
5.2 通過線性判別分析壓縮無監(jiān)督數據84
5.2.1 計算散布矩陣85
5.2.2 在新特征子空間上選取線性判別算法87
5.2.3 將樣本映射到新的特征空間89
5.2.4 使用scikit-learn進行LDA分析90
5.3 使用核主成分分析進行非線性映射91
5.3.1 核函數與核技巧91
5.3.2 使用Python實現核主成分分析94
5.3.3 映射新的數據點99
5.3.4 scikit-learn中的核主成分分析102
本章小結103
第6章 模型評估與參數調優(yōu)實戰(zhàn)104
6.1 基于流水線的工作流104
6.1.1 加載威斯康星乳腺癌數據集104
6.1.2 在流水線中集成數據轉換及評估操作105
6.2 使用k折交叉驗證評估模型性能106
6.2.1 holdout方法106
6.2.2 k折交叉驗證107
6.3 通過學習及驗證曲線來調試算法110
6.3.1 使用學習曲線判定偏差和方差問題110
6.3.2 通過驗證曲線來判定過擬合與欠擬合112
6.4 使用網格搜索調優(yōu)機器學習模型113
6.4.1 使用網絡搜索調優(yōu)超參114
6.4.2 通過嵌套交叉驗證選擇算法115
6.5 了解不同的性能評價指標116
6.5.1 讀取混淆矩陣116
6.5.2 優(yōu)化分類模型的準確率和召回率117
6.5.3 繪制ROC曲線118
6.5.4 多類別分類的評價標準121
本章小結121
第7章 集成學習—組合不同的模型122
7.1 集成學習122
7.2 實現一個簡單的多數投票分類器125
7.3 評估與調優(yōu)集成分類器131
7.4 bagging —通過bootstrap樣本構建集成分類器135
7.5 通過自適應boosting提高弱學習機的性能138
本章小結143
第8章 使用機器學習進行情感分析144
8.1 獲取IMDb電影評論數據集144
8.2 詞袋模型簡介146
8.2.1 將單詞轉換為特征向量146
8.2.2 通過詞頻-逆文檔頻率計算單詞關聯度147
8.2.3 清洗文本數據148
8.2.4 標記文檔149
8.3 訓練用于文檔分類的邏輯斯諦回歸模型151
8.4 使用大數據—在線算法與外存學習152
本章小結155
第9章 在Web應用中嵌入機器學習模型156
9.1 序列化通過scikit-learn擬合的模型156
9.2 使用SQLite數據庫存儲數據158
9.3 使用Flask開發(fā)Web應用160
9.3.1 第一個Flask Web應用160
9.3.2 表單驗證及渲染161
9.4 將電影分類器嵌入Web應用164
9.5 在公共服務器上部署Web應用169
本章小結172
第10章 使用回歸分析預測連續(xù)型目標變量173
10.1 簡單線性回歸模型初探173
10.2 波士頓房屋數據集174
10.3 基于最小二乘法構建線性回歸模型178
10.3.1 通過梯度下降計算回歸參數178
10.3.2 使用scikit-learn估計回歸模型的系數181
10.4 使用RANSAC擬合高魯棒性回歸模型182
10.5 線性回歸模型性能的評估184
10.6 回歸中的正則化方法185
10.7 線性回歸模型的曲線化-多項式回歸186
10.7.1 房屋數據集中的非線性關系建模188
10.7.2 使用隨機森林處理非線性關系190
本章小結193
第11章 聚類分析——處理無類標數據194
11.1 使用k-means算法對相似對象進行分組194
11.1.1 k-means++196
11.1.2 硬聚類與軟聚類198
11.1.3 使用肘方法確定簇的最佳數量199
11.1.4 通過輪廓圖定量分析聚類質量200
11.2 層次聚類203
11.2.1 基于距離矩陣進行層次聚類204
11.2.2 樹狀圖與熱度圖的關聯207
11.2.3 通過scikit-learn進行凝聚聚類208
11.3 使用DBSCAN劃分高密度區(qū)域209
本章小結212
第12章 使用人工神經網絡識別圖像213
12.1 使用人工神經網絡對復雜函數建模213
12.1.1 單層神經網絡回顧214
12.1.2 多層神經網絡架構簡介215
12.1.3 通過正向傳播構造神經網絡216
12.2 手寫數字的識別218
12.2.1 獲取MNIST數據集218
12.2.2 實現一個多層感知器222
12.3 人工神經網絡的訓練228
12.3.1 計算邏輯斯諦代價函數228
12.3.2 通過反向傳播訓練神經網絡230
12.4 建立對反向傳播的直觀認識231
12.5 通過梯度檢驗調試神經網絡232
12.6 神經網絡的收斂性236
12.7 其他神經網絡架構237
12.7.1 卷積神經網絡237
12.7.2 循環(huán)神經網絡238
12.8 關于神經網絡的實現239
本章小結240
第13章 使用Theano并行訓練神經網絡241
13.1 使用Theano構建、編譯并運行表達式241
13.1.1 什么是Theano242
13.1.2 初探Theano243
13.1.3 配置Theano244
13.1.4 使用數組結構245
13.1.5 整理思路—線性回歸示例247
13.2 為前饋神經網絡選擇激勵函數250
13.2.1 邏輯斯諦函數概述250
13.2.2 通過softmax函數評估多類別分類任務中的類別概率252
13.2.3 通過雙曲正切函數增大輸出范圍252
13.3 使用Keras提高訓練神經網絡的效率254
本章小結258