推荐系统8_SparkML实现协同过滤ALS2

测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
除了ALS方法,Spark还提供了基于均值的协同过滤推荐方法和基于随机梯度下降的协同过滤推荐方法。具体实现步骤如下: 1. 基于均值的协同过滤推荐方法 ```scala import org.apache.spark.ml.evaluation.RegressionEvaluator import org.apache.spark.ml.recommendation.AverageRating import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("Collaborative Filtering Example") .getOrCreate() val ratings = spark.read.format("csv") .option("header", "true") .option("inferSchema", "true") .load("ratings.csv") .drop("timestamp") //计算每个物品的平均评分 val averageRatings = ratings.groupBy("movieId").agg(avg("rating").alias("avgRating")) //将每个用户对每个物品的评分减去该物品的平均评分,得到用户对物品的相对评分 val relativeRatings = ratings.join(averageRatings, "movieId").withColumn("relativeRating", $"rating" - $"avgRating") //训练模型 val model = new AverageRating() .setUserCol("userId") .setItemCol("movieId") .setRatingCol("relativeRating") .fit(relativeRatings) //评估模型效果 val predictions = model.transform(relativeRatings) val evaluator = new RegressionEvaluator() .setMetricName("rmse") .setLabelCol("relativeRating") .setPredictionCol("prediction") val rmse = evaluator.evaluate(predictions) //生成推荐结果 val userRecs = model.recommendForAllUsers(10) val movieRecs = model.recommendForAllItems(10) ``` 该方法先计算每个物品的平均评分,然后将每个用户对每个物品的评分减去该物品的平均评分,得到用户对物品的相对评分。接着,使用相对评分训练模型,并评估模型效果。最后,生成用户和物品的推荐结果。 2. 基于随机梯度下降的协同过滤推荐方法 ```scala import org.apache.spark.ml.evaluation.RegressionEvaluator import org.apache.spark.ml.recommendation.{ALS, ALSModel} import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("Collaborative Filtering Example") .getOrCreate() val ratings = spark.read.format("csv") .option("header", "true") .option("inferSchema", "true") .load("ratings.csv") .drop("timestamp") //将评分数据随机划分为训练集和测试集 val Array(training, test) = ratings.randomSplit(Array(0.8, 0.2)) //训练模型 val als = new ALS() .setMaxIter(5) .setRegParam(0.01) .setUserCol("userId") .setItemCol("movieId") .setRatingCol("rating") .setImplicitPrefs(true) //使用隐式反馈 val model = als.fit(training) //评估模型效果 val predictions = model.transform(test) val evaluator = new RegressionEvaluator() .setMetricName("rmse") .setLabelCol("rating") .setPredictionCol("prediction") val rmse = evaluator.evaluate(predictions) //生成推荐结果 val userRecs = model.recommendForAllUsers(10) val movieRecs = model.recommendForAllItems(10) ``` 该方法使用ALS算法,但设置了`setImplicitPrefs(true)`来使用隐式反馈,即只考虑用户行为数据中的“喜欢”和“不喜欢”,而不考虑具体评分。其他步骤与ALS方法类似,包括划分训练集和测试集、训练模型、评估模型效果和生成推荐结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值