日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
Spark MLlib機器學習實踐(第2版)圖書
人氣:38

Spark MLlib機器學習實踐(第2版)

Spark MLlib機器學習案例精彩講解,讓您輕松掌握
  • 所屬分類:圖書 >計算機/網絡>人工智能  
  • 作者:[王曉華]
  • 產品參數:
  • 叢書名:--
  • 國際刊號:9787302465089
  • 出版社:清華大學出版社
  • 出版時間:2017-03
  • 印刷時間:2017-02-01
  • 版次:2
  • 開本:128開
  • 頁數:--
  • 紙張:膠版紙
  • 包裝:平裝-膠訂
  • 套裝:

內容簡介

Spark作為新興的、應用范圍為廣泛的大數據處理開源框架引起了廣泛的關注,它吸引了大量程序設計和開發人員進行相關內容的學習與開發,其中MLlib是Spark框架使用的核心。本書是一本細致介紹Spark MLlib程序設計的圖書,入門簡單,示例豐富。 本書分為13章,從Spark基礎安裝和配置開始,依次介紹MLlib程序設計基礎、MLlib的數據對象構建、MLlib中RDD使用介紹,各種分類、聚類、回歸等數據處理方法,后還通過一個完整的實例,回顧了前面的學習內容,并通過代碼實現了一個完整的分析過程。 本書理論內容由淺而深,采取實例和理論相結合的方式,講解細致直觀,適合Spark MLlib初學者、大數據分析和挖掘人員,也適合高校和培訓學習相關專業的師生教學參考。

編輯推薦

MLlib是Apache Spark機器學習庫。本書入門簡單,實例豐富,詳解協同過濾、線性回歸、分類、決策樹、保序回歸、聚類、關聯、數據降維、特征提取和轉換等MLlib主要算法,用實例說明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

在線預覽

回歸分析(regression analysis)是一種用來確定兩種或兩種以上變量間相互依賴的定量關系的統計分析方法,運用十分廣泛。回歸分析可以按以下要素分類:? 按照涉及的自變量的多少,分為回歸和多重回歸分析;? 按照自變量的多少,可分為一元回歸分析和多元回歸分析;? 按照自變量和因變量之間的關系類型,可分為線性回歸分析和非線性回歸分析。如果在回歸分析中,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關系,則稱為多重線性回歸分析。回歸分析是最常用的機器學習算法之一,可以說回歸分析理論與實際研究的建立使得機器學習作為一門系統的計算機應用學科得以確認。MLlib中,線性回歸是一種能夠較為預測具體數據的回歸方法,它通過給定的一系列訓練數據,在預測算法的幫助下預測未知的數據。本章將向讀者介紹線性回歸的基本理論與MLlib中使用的預測算法,以及為了防止過度擬合而進行的正則化處理,這些不僅僅是回歸算法的核心,也是MLlib的最核心部分。本章主要知識點:? 隨機梯度下降算法詳解? MLlib回歸的過擬合? MLlib線性回歸實戰6.1 隨機梯度下降算法詳解機器學習中回歸算法的種類有很多,例如神經網絡回歸算法、蟻群回歸算法、支持向量機回歸算法等,這些都可以在一定程度上達成回歸擬合的目的。MLlib中使用的是較為經典的隨機梯度下降算法,它充分利用了Spark框架的迭代計算特性,通過不停地判斷和選擇當前目標下的路徑,從而能夠在最短路徑下達到的結果,繼而提高大數據的計算效率。6.1.1 道士下山的故事在介紹隨機梯度下降算法之前,給大家講一個道士下山的故事。請讀者看圖6-1。 圖6-1 模擬隨機梯度下降算法的演示圖這是一個模擬隨機梯度下降算法的演示圖。為了便于理解,筆者將其比喻成道士想要出去游玩的一座山。設想道士有24小時和道友一起到一座不太熟悉的山上去玩,在興趣盎然中很快登上了山頂。但是天有不測,下起了雨。如果這時需要道士和其同來的道友以最快的速度下山,那該怎么辦呢?如果想以最快的速度下山,那么最快的辦法就是順著坡度最陡峭的地方走下去。但是由于不熟悉路,道士在下山的過程中,每走過一段路程需要停下來觀望,從而選擇最陡峭的下山路線。這樣一路走下來的話,可以在最短時間內走到山腳。這個最短的路線從圖上可以近似的表示為:① → ② → ③ → ④ → ⑤ → ⑥ → ⑦每個數字代表每次停頓的地點,這樣只需要在每個停頓的地點上選擇最陡峭的下山路即可。這個就是一個道士下山的故事。隨機梯度下降算法和這個類似,如果想要使用最迅捷的方法,那么最簡單的辦法就是在下降一個梯度的階層后,尋找一個當前獲得的較大坡度繼續下降。這就是隨機梯度算法的原理。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 (12i)) //寫入公式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。 圖6-3 擬合與過擬合從圖6-3所示A圖和B圖的對比來看,如果測試數據過于側重某些具體的點,則會對整體的曲線形成構成很大的影響,從而影響到待測數據的測試精準度。這種對于測試數據過于接近而實際數據擬合程度不夠的現象稱為過擬合,而解決辦法就是對數據進行處理,而處理過程稱為回歸的正則化。正則化使用較多的一般有兩種方法,lasso回歸(L1回歸)和嶺回歸(L2回歸)。其目的是通過對最小二乘估計加入處罰約束,使某些系數的估計為0。從6-3圖中A圖和B圖回歸曲線上看,A和B的差異較多地集中在回歸系數的選取上。這里可以近似地將A假設為如下公式: 而B公式可以近似的表示為: 從A和B公式的比較來看,B公式更多的是增加了系數。因此解決辦法就是通過對增加的系數進行消除從而使之消除過擬合。更加直觀的理解就是,防止通過擬合算法計算出的回歸公式比較大地響應和依賴某些特定的特征值,從而影響回歸曲線的率。6.2.2 lasso回歸與嶺回歸由前面對過擬合產生的原因分析來看,如果能夠消除擬合公式中多余的擬合系數,那么產生的曲線可以較好地對數據進行擬合處理。因此可以認為對擬合公式過擬合的消除最直接的辦法就是去除其多余的公式,那么通過數學公式表達如下: 從公式可以看到,f(B')是f(B)的變形形式,其通過增加一個新的系數公式J(θ)從而使原始數據公式獲得了正則化表達。這里J(θ)又稱為損失函數,它通過回歸擬合曲線的范數L1和L2與一個步進數α相乘得到。范數L1和范數L2是兩種不同的系數懲罰項,首先來看L1范數。L1范數指的是回歸公式中各個元素的值之和,其又稱為“稀疏規則算子(Lasso regularization)”。其一般公式如下: 即可以通過這個公式計算使得f(B')能夠取得最小化。而L2范數指的是回歸公式中各個元素的平方和,其又稱為“嶺回歸(Ridge Regression)”可以用公式表示為: MLlib中SGD算法支持L1和L2正則化方法,而LBFGS只支持L2正則化,不支持L1正則化。L1范數和L2范數相比較而言,L1能夠在步進系數α在一定值的情況下將回歸曲線的某些特定系數修正為0。而L1回歸由于其平方的處理方法從而使得回歸曲線獲得較高的計算精度。6.3 MLlib線性回歸實戰6.3.1 MLlib線性回歸基本準備在前面的章節中,我們為讀者介紹了線性回歸的一些基本知識,這些知識將伴隨讀者的整個機器學習和數據挖掘的工作生涯。本節將帶領讀者開始學習及時個回歸算法,即線性回歸。首先需要完成線性回歸的數據準備工作。MLlib中,線性回歸的基本數據是嚴格按照數據格式進行設置。例如,如果想求得公式y=2x1 3x2系數,那么需要在數據基礎中設置2個x值,并且在其前部設置y值。數據整理規則如下:數據位置://DATA//D06//lpsa.data1,0 12,0 23,0 35,1 47,6 19,4 56,3 3這里逗號(,)前面的數值是根據不同的數據求出的結果值,而每個系數的x值依次地被排列在其后。這些就是數據的收集規則:Y = a bX其次是對既定的MLlib回歸算法中數據格式的要求,我們可以從回歸算法的源碼來分析,源碼代碼段如下:def train( input: RDD[LabeledPoint], numIterations: Int, stepSize: Double): LinearRegressionModel = { train(input, numIterations, stepSize, 1.0)}從上面代碼段可以看到,整理的訓練數據集需要輸入一個LabeledPoint格式的數據,因此在讀取來自數據集中的數據時,需要將其轉化為既定的格式。本例子數據轉化的格式如下:val parsedData = data.map { line => val parts = line.split(',') LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))}.cache()從中可以看到,程序首先對讀取的數據集進行分片處理,根據逗號將其分解為因變量與自變量,即線性回歸中的y和x值。其后將其轉換為LabeledPoint格式的數據,這里part(0)和part(1)分別代表數據分開的y和x值,并根據需要將x值轉化成一個向量數組。其次是訓練模型的數據要求。numIterations是整體模型的迭代次數,理論上迭代的次數越多則模型的擬合程度越高,但是隨之而來的是迭代需要的時間越長。而stepSize是上面章節中隨機梯度下降算法中的步進系數,代表每次迭代過程中模型的整體修正程度。一部分就是根據數據集訓練的線性回歸模型預測數據。MLlib中線性回歸模型預測方法有2種,其代碼如下:def predict(testData: RDD[Vector]): RDD[Double] = {

def predict(testData: Vector): Double = {表示分別要求輸入一個向量或者一個RDD化后的向量作為數據變量,這里可以通過RDD內建的方法對數據進行處理。一個完整的線性回歸程序如程序6-2所示。代碼位置://SRC//C06// LinearRegression.scala程序6-2 線性回歸程序import org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}import org.apache.spark.{SparkConf, SparkContext}

object LinearRegression { val conf = new SparkConf() //創建環境變量 .setMaster("local") //設置本地化處理 .setAppName("LinearRegression ") //設定名稱 val sc = new SparkContext(conf) //創建環境變量實例

def main(args: Array[String]) { val data = sc.textFile("c:/lpsa.data") //獲取數據集路徑 val parsedData = data.map { line => //開始對數據集處理 val parts = line.split(',') //根據逗號進行分區 LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble))) }.cache() //轉化數據格式 //建立模型 val model = LinearRegressionWithSGD.train(parsedData, 100,0.1) val prediction= model.predict(parsedData.map((_.features))) //檢驗測試集數據 prediction.foreach(obj => println(obj)) //打印原測試集數據使用模型后得出的結果 println(model.predict(Vectors.dense(0,1))) //提供新的待測數據 }

}這里順帶提示一下,讀者在一步看到的Vectors.dense(0,1)代碼是人為的創建一個MLLib數據向量輸入到已構成的數據模型中。請讀者自行輸入數據和計算回歸結果。6.3.2 MLlib線性回歸實戰:商品價格與消費者收入之間的關系本小節我們做一個MLlib線性回歸的實例。某種商品的需求量(y,噸)、價格(x1,元/千克)和消費者收入(x2,元)觀測值如表6-1所示。表6-1 消費和需求對應表yx1x2yx1x2

100 5 1000 65 7 40075 7 600 90 5 130080 6 1200 100 4 110070 6 500 110 3 130050 8 30 60 9 300要求:建立需求函數: ;從要求可以看到,我們需要建立一個需求回歸公式,首先需要對數據進行處理,而數據的處理可以如圖6-4所示。數據位置://DATA//D06//lr.txt 圖6-4 數據示例從圖6-4可以看到,“|”分割了y值與x值,而不同的x之間通過“,”進行分割。具體程序如程序6-3所示。代碼位置://SRC//C06// LinearRegression2.scala程序6-3 線性回歸實戰import org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}import org.apache.spark.{SparkConf, SparkContext}

object LinearRegression { val conf = new SparkConf() //創建環境變量 .setMaster("local") //設置本地化處理 .setAppName("LinearRegression2 ") //設定名稱 val sc = new SparkContext(conf) //創建環境變量實例

def main(args: Array[String]) { val data = sc.textFile("c:/lr.txt") //獲取數據集路徑 val parsedData = data.map { line => //開始對數據集處理 val parts = line.split('|') //根據逗號進行分區 LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(',').map(_.toDouble))) }.cache() //轉化數據格式 //建立模型 val model = LinearRegressionWithSGD.train(parsedData, 200,0.1) val prediction = model.predict(parsedData.map((_.features)))//檢驗測試集數據prediction.foreach(obj => println(obj)) //打印原測試集數據使用模型后得出的結果 println(model.predict(Vectors.dense(0,1))) //提供新的待測數據 }

}結果請讀者自行驗證完成。6.3.3 對擬合曲線的驗證上一節中,筆者通過數據擬合出了每個元素對應系數,根據系數的確定可以定義出回歸曲線公式。而至于根據系數擬合出的公式是否符合真實的數據表現則需要另外一個檢驗標準。均方誤差(Mean Squared Error,MSE)是衡量“平均誤差”的一種較方便的方法,可以評價數據的變化程度。均方根誤差是均方誤差的算術平方根。標準誤差定義為各測量值誤差的平方和的平均值的平方根。設n個測量值的誤差為θ1、θ2……θn,則這組測量值的標準誤差σ計算公式如下: 數理統計中均方誤差是指參數估計值與參數真值之差平方的期望值,記為MSE。MSE是衡量“平均誤差”的一種較方便的方法,MSE可以評價數據的變化程度,MSE的值越小,說明預測模型描述實驗數據具有更好的度。與此相對應的,還有均方根誤差RMSE、平均百分誤差等。因此,為了衡量數據預測結果與真實結果之間的差異,可以使用MSE來計算相關的預測誤差。代碼如下:val valuesAndPreds = parsedData.map { point => { val prediction = model.predict(point.features) (point.label, prediction) }}

val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2)}.mean()我們可以將這些代碼添加到已有的程序代碼中計算回歸曲線的MSE,具體程序如程序6-4所示。代碼位置://SRC//C06// LinearRegression3.scala程序6-4 計算回歸曲線的MSEimport org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.regression.{LabeledPoint,

網友評論(不代表本站觀點)

來自匿名用**的評論:

書的內容講得不錯

2017-05-30 13:49:03
來自匿名用**的評論:

好書,質量很高

2017-07-01 10:46:31
來自匿名用**的評論:

包裝有破損

2017-09-27 20:06:29
來自無昵稱**的評論:

第一版就賣的不錯,,, 好書

2017-09-30 09:46:43

免責聲明

更多出版社