十二、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的其它算法也是類似的使用,你只需要給它數據,然后訓練模型,便可以利用模型來預測分析分類等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM