1. 程式人生 > >十二、spark MLlib的scala示例

十二、spark MLlib的scala示例

簡介

spark MLlib官網:http://spark.apache.org/docs/latest/ml-guide.html

mllib是spark core之上的演算法庫,包含了豐富的機器學習的一系列演算法。你可以通過簡單的API來構建演算法模型,然後利用模型來進行預測分析推薦之類的。

它包含了一些工具,如:

1)演算法工具:分類、迴歸、聚類、協同等

2)特徵化工具:特徵提取、轉換、降維、選擇等

3)管道:用於構建、評估和調整機器學習管道的工具

4)永續性:儲存和載入演算法、模型、管道

5)實用工具:線性代數、統計、資料處理等工具

spark MLlib支援的演算法很豐富,以下將以ALS推薦演算法為例,簡單使用MLlib

ALS簡介

目前熱門的推薦演算法主要是協同過濾演算法,而ALS(alternate least square:交替最小二乘法)指的是使用最小二乘法的協同過濾演算法。

ALS在mllib.recommendation.ALS中,使用步驟如下:

1)輸入RDD,型別為mllib.recommendation.Rating

2)呼叫train方法訓練出模型,型別未mllib.recommendation.MatrixFactorizationModel

有了ALS模型以後,我們可以利用這個模型去做一些預測

程式碼示例

以下程式碼,使用Array陣列模擬了一份簡單的資料(使用者ID, 商品ID, 評分),並生成RDD。

我們將RDD作為輸入,進行模型訓練。而後,我們拿訓練好的模型進行預測:使用者ID=1,產品ID=2的評分

import org.apache.spark.mllib.recommendation.{ALS, MatrixFactorizationModel, Rating}
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * @Description spark 協同過濾推薦演算法示例
  * @Author lay
  * @Date 2018/12/10 22:29
  
*/ object SparkALSDemo { var conf: SparkConf = _ var sc: SparkContext = _ var data: Array[String] = Array("1,1,1.0", "1,2,2.0", "1,3,4.5", "2,3,4.0", "2,4,5.0") var dataRDD: RDD[(Int, Int, Float)] = _ var ratings: RDD[Rating] = _ var model: MatrixFactorizationModel = _ def init: Unit = { conf = new SparkConf().setAppName("spark als demo").setMaster("local") sc = new SparkContext(conf) } def makeRdd: Unit = { dataRDD = sc.parallelize(data).map{x => val lines = x.split(","); (lines(0).toInt, lines(1).toInt, lines(2).toFloat)} ratings = dataRDD.map(x => Rating(x._1, x._2, x._3)) } def trainModel: Unit = { val rank = 10 // 向量大小,預設10 val iterations = 10 // 迭代次數,預設10 model = ALS.train(ratings, rank, iterations) } def main(args: Array[String]): Unit = { // 初始化 init // 生成RDD makeRdd // 訓練模型 trainModel // 預測結果 val result = model.predict(1, 2) println("預測評分:" + result) } }

輸出結果為:

預測評分:1.9874704066075966

我們看到預測資料與我們的訓練資料 “2” 近似

以上程式碼只是做了一個簡單的過程演示,大體瞭解MLlib的過程是個什麼樣的概念。

在實際專案中,輸入數量可能是海量的,並且會有訓練資料和校驗資料。在不斷地訓練和校驗過程當中去迭代演算法實現不斷地逼近實際值,從而達到滿意的結果。所以,除了模型訓練過程外,機器學習中對模型的精確校驗也是很重要的,它的結果標識著你的模型訓練是否是一個有使用價值的模型。

spark MLlib的其它演算法也是類似的使用,你只需要給它資料,然後訓練模型,便可以利用模型來預測分析分類等