簡單介紹
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)