産品特色
編輯推薦
MLlib是Apache Spark機器學習庫。本書入門簡單,實例豐富,詳解協同過濾、綫性迴歸、分類、決策樹、保序迴歸、聚類、關聯、數據降維、特徵提取和轉換等MLlib主要算法,用實例說明MLlib大數據機器學習算法的運用。
內容簡介
Spark作為新興的、應用範圍*為廣泛的大數據處理開源框架引起瞭廣泛的關注,它吸引瞭大量程序設計和開發人員進行相關內容的學習與開發,其中MLlib是Spark框架使用的核心。本書是一本細緻介紹Spark MLlib程序設計的圖書,入門簡單,示例豐富。
本書分為13章,從Spark基礎安裝和配置開始,依次介紹MLlib程序設計基礎、MLlib的數據對象構建、MLlib中RDD使用介紹,各種分類、聚類、迴歸等數據處理方法,*後還通過一個完整的實例,迴顧瞭前麵的學習內容,並通過代碼實現瞭一個完整的分析過程。
本書理論內容由淺而深,采取實例和理論相結閤的方式,講解細緻直觀,適閤Spark MLlib初學者、大數據分析和挖掘人員,也適閤高校和培訓學習相關專業的師生教學參考。
作者簡介
王曉華,高校資深計算機專業講師,主要研究方嚮為雲計算、數據挖掘;曾主持和參與多項國傢和省級科研課題,發錶過多篇論文,有一項專利。
內頁插圖
目錄
第1章 星星之火 1
1.1 大數據時代 1
1.2 大數據分析時代 2
1.3 簡單、優雅、有效——這就是Spark 3
1.4 核心——MLlib 4
1.5 星星之火,可以燎原 6
1.6 小結 6
第2章 Spark安裝和開發環境配置 7
2.1 Windows單機模式Spark安裝和配置 7
2.1.1 Windows 7安裝Java 7
2.1.2 Windows 7安裝Scala 10
2.1.3 Intellij IDEA下載和安裝 13
2.1.4 Intellij IDEA中Scala插件的安裝 14
2.1.5 HelloJava——使用Intellij IDEA創建Java程序 18
2.1.6 HelloScala——使用Intellij IDEA創建Scala程序 21
2.1.7 *後一腳——Spark單機版安裝 26
2.2 經典的WordCount 29
2.2.1 Spark實現WordCount 29
2.2.2 MapReduce實現WordCount 31
2.3 小結 34
第3章 RDD詳解 35
3.1 RDD是什麼 35
3.1.1 RDD名稱的秘密 35
3.1.2 RDD特性 36
3.1.3 與其他分布式共享內存的區彆 37
3.1.4 RDD缺陷 37
3.2 RDD工作原理 38
3.2.1 RDD工作原理圖 38
3.2.2 RDD的相互依賴 38
3.3 RDD應用API詳解 39
3.3.1 使用aggregate方法對給定的數據集進行方法設定 39
3.3.2 提前計算的cache方法 42
3.3.3 笛卡爾操作的cartesian方法 43
3.3.4 分片存儲的coalesce方法 44
3.3.5 以value計算的countByValue方法 45
3.3.6 以key計算的countByKey方法 45
3.3.7 除去數據集中重復項的distinct方法 46
3.3.8 過濾數據的filter方法 47
3.3.9 以行為單位操作數據的flatMap方法 47
3.3.10 以單個數據為目標進行操作的map方法 48
3.3.11 分組數據的groupBy方法 48
3.3.12 生成鍵值對的keyBy方法 49
3.3.13 同時對兩個數據進行處理的reduce方法 50
3.3.14 對數據進行重新排序的sortBy方法 51
3.3.15 閤並壓縮的zip方法 52
3.4 小結 53
第4章 MLlib基本概念 54
4.1 MLlib基本數據類型 54
4.1.1 多種數據類型 54
4.1.2 從本地嚮量集起步 55
4.1.3 嚮量標簽的使用 56
4.1.4 本地矩陣的使用 58
4.1.5 分布式矩陣的使用 59
4.2 MLlib數理統計基本概念 62
4.2.1 基本統計量 62
4.2.2 統計量基本數據 63
4.2.3 距離計算 64
4.2.4 兩組數據相關係數計算 65
4.2.5 分層抽樣 67
4.2.6 假設檢驗 69
4.2.7 隨機數 70
4.3 小結 71
第5章 協同過濾算法 72
5.1 協同過濾 72
5.1.1 協同過濾概述 72
5.1.2 基於用戶的推薦 73
5.1.3 基於物品的推薦 74
5.1.4 協同過濾算法的不足 75
5.2 相似度度量 75
5.2.1 基於歐幾裏得距離的相似度計算 75
5.2.2 基於餘弦角度的相似度計算 76
5.2.3 歐幾裏得相似度與餘弦相似度的比較 77
5.2.4 *個例子——餘弦相似度實戰 77
5.3 MLlib中的交替*小二乘法(ALS算法) 80
5.3.1 *小二乘法(LS算法)詳解 81
5.3.2 MLlib中交替*小二乘法(ALS算法)詳解 82
5.3.3 ALS算法實戰 83
5.4 小結 85
第6章 MLlib綫性迴歸理論與實戰 86
6.1 隨機梯度下降算法詳解 86
6.1.1 道士下山的故事 87
6.1.2 隨機梯度下降算法的理論基礎 88
6.1.3 隨機梯度下降算法實戰 88
6.2 MLlib迴歸的過擬閤 89
6.2.1 過擬閤産生的原因 90
6.2.2 lasso迴歸與嶺迴歸 91
6.3 MLlib綫性迴歸實戰 91
6.3.1 MLlib綫性迴歸基本準備 91
6.3.2 MLlib綫性迴歸實戰:商品價格與消費者收入之間的關係 94
6.3.3 對擬閤麯綫的驗證 95
6.4 小結 97
第7章 MLlib分類實戰 98
7.1 邏輯迴歸詳解 98
7.1.1 邏輯迴歸不是迴歸算法 98
7.1.2 邏輯迴歸的數學基礎 99
7.1.3 一元邏輯迴歸示例 100
7.1.4 多元邏輯迴歸示例 101
7.1.5 MLlib邏輯迴歸驗證 103
7.1.6 MLlib邏輯迴歸實例:腎癌的轉移判斷 104
7.2 支持嚮量機詳解 106
7.2.1 三角還是圓 106
7.2.2 支持嚮量機的數學基礎 108
7.2.3 支持嚮量機使用示例 109
7.2.4 使用支持嚮量機分析腎癌轉移 110
7.3 樸素貝葉斯詳解 111
7.3.1 穿褲子的男生or女生 111
7.3.2 貝葉斯定理的數學基礎和意義 112
7.3.3 樸素貝葉斯定理 113
7.3.4 MLlib樸素貝葉斯使用示例 114
7.3.5 MLlib樸素貝葉斯實戰:“僵屍粉”的鑒定 115
7.4 小結 117
第8章 決策樹與保序迴歸 118
8.1 決策樹詳解 118
8.1.1 水晶球的秘密 119
8.1.2 決策樹的算法基礎:信息熵 119
8.1.3 決策樹的算法基礎——ID3算法 121
8.1.4 MLlib中決策樹的構建 122
8.1.5 MLlib中決策樹示例 123
8.1.6 隨機雨林與梯度提升算法(GBT) 125
8.2 保序迴歸詳解 127
8.2.1 何為保序迴歸 128
8.2.2 保序迴歸示例 128
8.3 小結 129
第9章 MLlib中聚類詳解 130
9.1 聚類與分類 130
9.1.1 什麼是分類 130
9.1.2 什麼是聚類 131
9.2 MLlib中的Kmeans算法 131
9.2.1 什麼是kmeans算法 131
9.2.2 MLlib中Kmeans算法示例 133
9.2.3 Kmeans算法中細節的討論 134
9.3 高斯混閤聚類 135
9.3.1 從高斯分布聚類起步 135
9.3.2 混閤高斯聚類 137
9.3.3 MLlib高斯混閤模型使用示例 137
9.4 快速迭代聚類 138
9.4.1 快速迭代聚類理論基礎 138
9.4.2 快速迭代聚類示例 139
9.5 小結 140
第10章 MLlib中關聯規則 141
10.1 Apriori頻繁項集算法 141
10.1.1 啤酒與尿布 141
10.1.2 經典的Apriori算法 142
10.1.3 Apriori算法示例 144
10.2 FP-growth算法 145
10.2.1 Apriori算法的局限性 145
10.2.2 FP-growth算法 145
10.2.3 FP樹示例 148
10.3 小結 149
第11章 數據降維 150
11.1 奇異值分解(SVD) 150
11.1.1 行矩陣(RowMatrix)詳解 150
11.1.2 奇異值分解算法基礎 151
11.1.3 MLlib中奇異值分解示例 152
11.2 主成分分析(PCA) 153
11.2.1 主成分分析(PCA)的定義 154
11.2.2 主成分分析(PCA)的數學基礎 154
11.2.3 MLlib中主成分分析(PCA)示例 155
11.3 小結 156
第12章 特徵提取和轉換 157
12.1 TF-IDF 157
12.1.1 如何查找所要的新聞 157
12.1.2 TF-IDF算法的數學計算 158
12.1.3 MLlib中TF-IDF示例 159
12.2 詞嚮量化工具 160
12.2.1 詞嚮量化基礎 160
12.2.2 詞嚮量化使用示例 161
12.3 基於卡方檢驗的特徵選擇 162
12.3.1 “吃貨”的苦惱 162
12.3.2 MLlib中基於卡方檢驗的特徵選擇示例 163
12.4 小結 164
第13章 MLlib實戰演練——鳶尾花分析 166
13.1 建模說明 166
13.1.1 數據的描述與分析目標 166
13.1.2 建模說明 168
13.2 數據預處理和分析 171
13.2.1 微觀分析——均值與方差的對比分析 171
13.2.2 宏觀分析——不同種類特性的長度計算 174
13.2.3 去除重復項——相關係數的確定 176
13.3 長與寬之間的關係——數據集的迴歸分析 180
13.3.1 使用綫性迴歸分析長與寬之間的關係 180
13.3.2 使用邏輯迴歸分析長與寬之間的關係 183
13.4 使用分類和聚類對鳶尾花數據集進行處理 184
13.4.1 使用聚類分析對數據集進行聚類處理 184
13.4.2 使用分類分析對數據集進行分類處理 187
13.5 *終的判定——決策樹測試 188
13.5.1 決定數據集的歸類——決策樹 188
13.5.2 決定數據集歸類的分布式方法——隨機雨林 190
13.6 小結 191
精彩書摘
第 6 章
MLlib綫性迴歸理論與實戰 ?
迴歸分析(regression analysis)是一種用來確定兩種或兩種以上變量間相互依賴的定量關係的統計分析方法,運用十分廣泛。迴歸分析可以按以下要素分類:
按照涉及的自變量的多少,分為迴歸和多重迴歸分析;
按照自變量的多少,可分為一元迴歸分析和多元迴歸分析;
按照自變量和因變量之間的關係類型,可分為綫性迴歸分析和非綫性迴歸分析。
如果在迴歸分析中,隻包括一個自變量和一個因變量,且二者的關係可用一條直綫近似錶示,這種迴歸分析稱為一元綫性迴歸分析。如果迴歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是綫性關係,則稱為多重綫性迴歸分析。
迴歸分析是*常用的機器學習算法之一,可以說迴歸分析理論與實際研究的建立使得機器學習作為一門係統的計算機應用學科得以確認。
MLlib中,綫性迴歸是一種能夠較為準確預測具體數據的迴歸方法,它通過給定的一係列訓練數據,在預測算法的幫助下預測未知的數據。
本章將嚮讀者介紹綫性迴歸的基本理論與MLlib中使用的預測算法,以及為瞭防止過度擬閤而進行的正則化處理,這些不僅僅是迴歸算法的核心,也是MLlib的*核心部分。
本章主要知識點:
隨機梯度下降算法詳解
MLlib迴歸的過擬閤
MLlib綫性迴歸實戰
6.1 隨機梯度下降算法詳解
機器學習中迴歸算法的種類有很多,例如神經網絡迴歸算法、蟻群迴歸算法、支持嚮量機迴歸算法等,這些都可以在一定程度上達成迴歸擬閤的目的。
MLlib中使用的是較為經典的隨機梯度下降算法,它充分利用瞭Spark框架的迭代計算特性,通過不停地判斷和選擇當前目標下的*優路徑,從而能夠在*短路徑下達到*優的結果,繼而提高大數據的計算效率。
6.1.1 道士下山的故事
在介紹隨機梯度下降算法之前,給大傢講一個道士下山的故事。請讀者看圖6-1。
圖6-1 模擬隨機梯度下降算法的演示圖
這是一個模擬隨機梯度下降算法的演示圖。為瞭便於理解,筆者將其比喻成道士想要齣去遊玩的一座山。
設想道士有一天和道友一起到一座不太熟悉的山上去玩,在興趣盎然中很快登上瞭山頂。但是天有不測,下起瞭雨。如果這時需要道士和其同來的道友以*快的速度下山,那該怎麼辦呢?
如果想以*快的速度下山,那麼*快的辦法就是順著坡度*陡峭的地方走下去。但是由於不熟悉路,道士在下山的過程中,每走過一段路程需要停下來觀望,從而選擇*陡峭的下山路綫。這樣一路走下來的話,可以在*短時間內走到山腳。
這個*短的路綫從圖上可以近似的錶示為:
① → ② → ③ → ④ → ⑤ → ⑥ → ⑦
每個數字代錶每次停頓的地點,這樣隻需要在每個停頓的地點上選擇*陡峭的下山路即可。
這個就是一個道士下山的故事。隨機梯度下降算法和這個類似,如果想要使用*迅捷的方法,那麼*簡單的辦法就是在下降一個梯度的階層後,尋找一個當前獲得的*大坡度繼續下降。這就是隨機梯度算法的原理。
6.1.2 隨機梯度下降算法的理論基礎
從上一小節的例子可以看到,隨機梯度下降算法就是不停地尋找某個節點中下降幅度*大的那個趨勢進行迭代計算,直到將數據收縮到符閤要求的範圍為止。它可以用數學公式錶達如下:
在上一章介紹*小二乘法的時候,筆者通過*小二乘法說明瞭直接求解*優化變量的方法,也介紹瞭在求解過程中的前提條件是要求計算值與實際值的偏差的平方*小。
但是在隨機梯度下降算法中,對於係數需要通過不停地求解齣當前位置下*優化的數據。這句話通過數學方式錶達的話就是不停地對係數θ求偏導數。即公式如下:
公式中θ會嚮著梯度下降的*快方嚮減少,從而推斷齣θ的*優解。
因此可以說隨機梯度下降算法*終被歸結為通過迭代計算特徵值從而求齣*閤適的值。θ求解的公式如下:
公式中α是下降係數,用較為通俗的話來說就是用以計算每次下降的幅度大小。係數越大則每次計算中差值越大,係數越小則差值越小,但是計算時間也相對延長。
6.1.3 隨機梯度下降算法實戰
隨機梯度下降算法將梯度下降算法通過一個模型來錶示的話,如圖6-2所示:
圖6-2 隨機梯度下降算法過程
從圖中可以看到,實現隨機梯度下降算法的關鍵是擬閤算法的實現。而本例的擬閤算法實現較為簡單,通過不停地修正數據值從而達到數據的*優值。具體實現代碼如程序6-1所示:
代碼位置://SRC//C06// SGD.scala
程序6-1 隨機梯度下降算法
import scala.collection.mutable.HashMap
object SGD {
val data = HashMap[Int,Int]() //創建數據集
def getData():HashMap[Int,Int] = { //生成數據集內容
for(i <- 1 to 50){ //創建50個數據
data += (i -> (12*i)) //寫入公式y=2x
}
data //返迴數據集
}
var θ:Double = 0 //*步假設θ為0
var α:Double = 0.1 //設置步進係數
def sgd(x:Double,y:Double) = { //設置迭代公式
θ = θ - α * ( (θ*x) - y) //迭代公式
}
def main(args: Array[String]) {
val dataSource = getData() //獲取數據集
dataSource.foreach(myMap =>{ //開始迭代
sgd(myMap._1,myMap._2) //輸入數據
})
println(“*終結果θ值為 ” + θ) //顯示結果
}
}
*終結果請讀者自行驗證完成。
讀者在重復運行本程序的時候,可以適當地增大數據量和步進係數。當增大數據量的時候可以看到,θ值會開始偏離一定的距離,請讀者考慮為何會這樣。
6.2 MLlib迴歸的過擬閤
有計算就有誤差,誤差不可怕,我們需要的是采用何種方法消除誤差。
迴歸分析在計算過程中,由於特定分析數據和算法選擇的原因,結果會對分析數據産生非常強烈的擬閤效果;而對於測試數據,卻錶現得不理想,這種效果和原因稱為過擬閤。本節將分析過擬閤産生的原因和效果,並給齣一個處理手段供讀者學習和掌握。
6.2.1 過擬閤産生的原因
在上一節的*後,我們建議和鼓勵讀者對數據的量進行調整從而獲得更多的擬閤修正係數。相信讀者也發現,隨著數據量的增加,擬閤的係數在達到一定值後會發生較大幅度的偏轉。在上一節程序6-1的例子中,步進係數在0.1的程度下,數據量達到70以後就發生偏轉。産生這樣原因就是MLlib迴歸會産生過擬閤現象。
對於過擬閤的例子請讀者參看圖6-3。
……
前言/序言
Spark在英文中是火花的意思,創作者希望它能夠像火花一樣點燃大數據時代的序幕。它,做到瞭。
大數據時代是一個充滿著機會和挑戰的時代,就像一座未經開發的金山,任何人都有資格去獲得其中的寶藏,僅僅需要的就是有一把得心應手的工具——MLlib就是這個工具。
本書目的
本書的主要目的是介紹如何使用MLlib進行數據挖掘。MLlib是Spark中*核心的部分,它是Spark機器學習庫,經過無數創造者卓越的工作,MLlib已經成為一個優雅的、可以運行在分布式集群上的數據挖掘工具。
MLlib充分利用瞭現有數據挖掘的技術與手段,將隱藏在數據中不為人知,但又包含價值的信息從中提取齣來,並通過相應的計算機程序,無須人工乾預自動地在係統中進行計算,以發現其中的規律。
通常來說,數據挖掘的難點和重點在於兩個方麵:分彆是算法的學習和程序的設計。還有的是需要使用者有些相應的背景知識,例如統計學、人工智能、網絡技術等。本書在寫作上以工程實踐為主,重點介紹其與數據挖掘密切相關的算法與概念,並且使用淺顯易懂的語言將其中涉及的算法進行概括性描述,從而可以幫助使用者更好地瞭解和掌握數據挖掘的原理。
作者在寫作本書的時候有一個基本原則,這本書應該體現工程實踐與理論之間的平衡。數據挖掘的目的是為瞭解決現實中的問題,並提供一個結果,而不是去理論比較哪個算法更高深,看起來更能嚇唬人。本書對算法的基本理論和算法也做瞭描述,如果讀者閱讀起來覺得睏難,建議找齣相應的教材深入復習一下,相信大多數的讀者都能理解相關的內容。
本書內容
本書主要介紹MLlib數據挖掘算法,編寫的內容可以分成三部分:*部分是MLlib*基本的介紹以及RDD的用法,包括第1~4章;第二部分是MLlib算法的應用介紹,包括第5~12章;第三部分通過一個經典的實例嚮讀者演示瞭如何使用MLlib去進行數據挖掘工作,為第13章。
各章節內容如下:
第1章主要介紹瞭大數據時代帶給社會與個人的影響,並由此産生的各種意義。介紹瞭大數據如何深入到每個人的生活之中。MLlib是大數據分析的利器,能夠幫助使用者更好地完成數據分析。
第2章介紹Spark的單機版安裝方法和開發環境配置。MLlib是Spark數據處理框架的一個主要組件,因此其運行必須要有Spark的支持。
第3章是對彈性數據集(RDD)進行瞭講解,包括彈性數據集的基本組成原理和使用,以及彈性數據集在數據處理時産生的相互依賴關係,並對主要方法逐一進行示例演示。
第4章介紹瞭MLlib在數據處理時所用到的基本數據類型。MLlib對數據進行處理時,需要將數據轉變成相應的數據類型。
第5章介紹瞭MLlib中協同過濾算法的基本原理和應用,並據此介紹瞭相似度計算和*小二乘法的原理和應用。
第6~12章每章是一個MLlib分支部分,其將MLlib各個數據挖掘算法分彆做瞭應用描述,介紹瞭其基本原理和學科背景,演示瞭使用方法和示例,對每個數據做瞭詳細的分析。並且在一些較為重要的程序代碼上,作者深入MLlib源碼,研究瞭其構建方法和參數設計,從而幫助讀者更深入地理解MLlib,也為將來讀者編寫自有的MLlib程序奠定瞭基礎。
第13章是本文的*後一章,通過經典的鳶尾花數據集嚮讀者演示瞭一個數據挖掘的詳細步驟。從數據的預處理開始,去除有相關性的重復數據,采用多種算法對數據進行分析計算,對數據進行分類迴歸,從而*終得到隱藏在數據中的結果,並為讀者演示瞭數據挖掘的基本步驟與方法。
本書特點
本書盡量避免純粹的理論知識介紹和高深技術研討,完全從應用實踐齣發,用*簡單的、典型的示例引申齣核心知識,*後還指齣瞭通往“高精尖”進一步深入學習的道路;
本書全麵介紹瞭MLlib涉及的數據挖掘的基本結構和上層程序設計,藉此能夠係統地看到MLlib的全貌,使讀者在學習的過程中不至於迷失方嚮;
本書在寫作上淺顯易懂,沒有深奧的數學知識,采用瞭較為簡潔的形式描述瞭應用的理論知識,讓讀者輕鬆愉悅地掌握相關內容;
本書旨在引導讀者進行更多技術上的創新,每章都會用示例描述的形式幫助讀者更好地學習內容;
本書代碼遵循重構原理,避免代碼汙染,引導讀者寫齣優秀的、簡潔的、可維護的代碼。
讀者與作者
準備從事或者從事大數據挖掘、大數據分析的工作人員
Spark MLlib初學者
高校和培訓學校數據分析和處理相關專業的師生
本書由王曉華主編,其他參與創作的作者還有李陽、張學軍、陳士領、陳麗、殷龍、張鑫、趙海波、張興瑜、毛聰、王琳、陳宇、生暉、張喆、王健,排名不分先後。
示例代碼下載
如果下載有問題,請聯係電子郵箱,郵件主題為“MLlib代碼”。
編 者
2017年1月