[SPARK] MLlib 的使用 (2)

在使用MLlib的Linear Regression程式中,
我們大概可以簡單地分成以下三部分:

  1.  資料讀取
  2.  Regression模型的建立
  3.  顯示計算結果
在資料讀取部分, 對應於以下程式碼:

// Load training data
val training = spark.read.format("libsvm")
.load("data/mllib/sample_linear_regression_data.txt")

其目標是從檔案中, 取得數值並創立一個RDD,
此檔案依循libsvm的格式 (也就是key-value pair),
詳細的資料格式可以參考林智仁老師的網頁 (libsvm) 介紹:
https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/


至於Regression model的建立, 則是直接取用MLlib的函式庫,
程式碼如下:

val lr = new LinearRegression()
.setMaxIter(10)
.setRegParam(0.3)
.setElasticNetParam(0.8)

// Fit the model
val lrModel = lr.fit(training)

在程式中, lr是宣告的Linear Regression model,
該函式可以進一步參考Spark官方的說明: 連結
簡單來說, 放進去的參數用來決定遞迴的次數 (.setMaxIter(10)),
以及Cost function中的參數數值 (.setRegParam(0.3), .setElasticNetParam(0.8)),
而Cost function可以表示如下:


其中, .setRegParam(0.3)對應於\gamma,
.setElasticNetParam(0.8)對應於\alpha,
在確定模型後, 就放入資料開始進行運算: lrModel = lr.fit(training),

程式的最後, 則把學習得到的參數列出, 不再詳述,
值得注意的大概只有可以把資料儲存成RDD給之後程式使用,

綜合以上敘述, 在範例中的Linear Regression程式,
並沒有進行平行化處理, 而只是提供MLlib的程式方便執行,
(雖然說Linear Regression本身不支援平行化, 可能要看看其他演算法...)
若我們要設計平行化處理流程, 可能還是要從RDD的操作開始,
並利用Map等功能, 來進行數據處理間的平行化...

Note: 執行結果如下:
RMSE: 10.189077167598475
r2: 0.022861466913958184


留言

熱門文章

LTE筆記: RSRP, RSSI and RSRQ

[WiFi] WiFi 網路的識別: BSS, ESS, SSID, ESSID, BSSID

LTE筆記: 波束成型 (beamforming) 和天線陣列