Spark机器学习- 推荐系统ALS

该博客介绍了如何利用Spark的ALS(Alternating Least Squares)算法构建推荐系统。首先,通过读取用户对物品的评分数据并转换为Rating对象,然后将数据集划分为训练集和测试集。接着,配置并训练ALS模型,最后评估模型的RMSE(均方根误差)。此外,还展示了如何使用模型为特定用户推荐物品,并讨论了模型的持久化。
摘要由CSDN通过智能技术生成

Spark-推荐系统ALS

1.帮助顾客快速定位需求,节省时间
2.大幅度提高销售量

协同过滤

根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然后再基于这些关联性进行推荐。
基于协同过滤的推荐可以分为三个子类:

基于用户的推荐(User-based )

基于项目的推荐(Item-based )

基于模型的推荐(Model-based )

根据所有用户对物品或者信息的偏好,发现与当前用户偏好相似的“邻居”用户群,基于周围k个邻居的历史偏好信息,为当前用户进行推荐。

案列

根据用户和用户id和评分推荐

数据集

用户id 物品id 评分
196	242	3	881250949
186	302	3	891717742
22	377	1	878887116
244	51	2	880606923
166	346	1	886397596
298	474	4	884182806
115	265	2	881171488
253	465	5	891628467
305	451	3	886324817
6	86	3	883603013
62	257	2	879372434
286	1014	5	879781125
200	222	5	876042340
210	40	3	891035994
224	29	3	888104457
303	785	3	879485318
122	387	5	879270459
194	274	2	879539794

导入数据,并将数据转换为Rating

    val parsseRating = (string:String)=>
      {
        val stringsArray = string.split("\t")
        import org.apache.spark.ml.recommendation.ALS.Rating
        Rating(stringsArray(0).toInt, stringsArray(1).toInt, stringsArray(2).toFloat)
      }

      val data = spark.read.textFile("src/main/scala1/coding-271/ch12/u.data")
        .map(parsseRating)
        . toDF("userID","itemID","rating")

获取训练集和测试集

val Array(traing,test) = data.randomSplit(Array(0.8, 0.2))

traing.show(false)

使用ALS算法进行推荐

import org.apache.spark.ml.recommendation.ALS
val als = new ALS()
  .setMaxIter(20)
  .setUserCol("userID")
  .setItemCol("itemID")
  .setRatingCol("rating")
  .setRegParam(0.01)

val model = als.fit(traing)
val predictions = model.transform(test)
predictions.show(false) //根据userId,itemID 预测rating

自定义一个用户id,商品id进行推荐

val users = spark.createDataset(Seq(196->10)).toDF("userID","itemID")
model.transform(users).show(false)

对模型进行评估

val evaluator = new RegressionEvaluator()
  .setMetricName("rmse")
  .setLabelCol("rating")
  .setPredictionCol("prediction")
val rmse = evaluator.evaluate(predictions)
println(rmse)

模型持久化

保存加载模型

//机器学习持久化
//模型保存
//model.save("./xxx")
//模型加载
//ALS.load("xx")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值