天天看点

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)
           

继续阅读