産品特色
編輯推薦
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在英文中是火花的意思,創作者希望它
Spark MLlib機器學習實踐(第2版) 下載 mobi epub pdf txt 電子書 格式