天天看點

spark 1.6 MLlib 協同過濾

簡單介紹

spark的協同過濾的矩陣分解采用ALS來計算,具體實作了算法以下參數

- numBlocks:資料劃分為多少block進行并行計算,設定成-1時為自動配置

- rank:模型的潛在因子(主特征數目)

- iterations:模型運作疊代次數

- lambda:ALS的規則化參數

- implicitPrefs:是采用顯式評分方式還是隐式回報資料,即是使用者打分,還是使用者通路等隐式分數

- alpha:采用隐式打分方式的置信度權重值

樣例

import org.apache.spark.mllib.recommendation.Rating
定義了評分的資料類型,裡面有三個屬性,分别是:
product int
user int
rating double
           

進行電影協同過濾的代碼樣例

import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.ml.recommendation.ALS
import org.apache.spark.mllib.recommendation.Rating

val rawdata = sc.textFile("D:\\ml-100k\\u.data")
    val raw_table = rawdata.map(_.split("\t")).map(x=>Rating(x().toInt,x().toInt,x().toDouble)).toDF
    val model = new ALS()
      .setRank() //主要因子個數
      .setRegParam()  //規則化參數lambda
       .setMaxIter()  // 最大疊代次數
       .setItemCol("product")
       .setUserCol("user")
       .setRatingCol("rating")
    val alsmodel = model.fit(raw_table)
    val predict = alsmodel.transform(raw_table)
    //給使用者234進行前五的産品推薦
    val recomm = predict.where("user=234").orderBy($"prediction".desc).show()
           

進行模型評估

  • 均方差:顯示評分評估
  • K值平均準确率:隐式評分評估,給使用者做推薦的前K個商品的與實際使用者購買的前K個的準确度
import org.apache.spark.ml.evaluation.RegressionEvaluator
// 回歸輸出結果評估
    val predictval = new RegressionEvaluator()
      .setLabelCol("rating")
      .setPredictionCol("prediction")
      .setMetricName("mse")//mse評估,還有rmse、r2、mae
    predictval.evaluate(predict)
           

繼續閱讀