使用spark mllib中协同过滤推荐算法ALS建立推荐模型





package com.yyds.tags.ml.rs.rddimport org.apache.spark.mllib.evaluation.RegressionMetrics
import org.apache.spark.mllib.recommendation.{ALS, MatrixFactorizationModel, Rating}
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}/*** 使用spark mllib中协同过滤推荐算法ALS建立推荐模型** a 预测用户对某个电影的评价* b 为某个用户推荐10个电影* c 为某个电影推荐10个用户*/
object SparkAlsRmdAndMovie {def main(args: Array[String]): Unit = {// 1 构建SparkContext对象val sc: SparkContext = {// 创建spark conf对象val sparkConf: SparkConf = new SparkConf().setMaster("local[4]").setAppName(this.getClass.getSimpleName.stripSuffix("$"))val context: SparkContext = SparkContext.getOrCreate(sparkConf)// 设置检查点context.setCheckpointDir("data/ckpt/als-ml-" + System.currentTimeMillis())context}// 读取电影评分数据val rawRDD: RDD[String] = sc.textFile("datas/u.data")println(s"Count = ${rawRDD.count()}")println(s"First = ${rawRDD.first()}")// 数据转换,构建RDD[Rating]val ratingRDD: RDD[Rating] = rawRDD//过滤.filter(line => null != line && line.split("\\t").length == 4).map{line =>val Array(userId,movieId,rating,_) = line.split("\\t")Rating(userId.toInt,movieId.toInt,rating.toDouble)}// 划分训练集和测试集val Array(trainRatings,testRatings) = ratingRDD.randomSplit(Array(0.8, 0.2))val alsModel: MatrixFactorizationModel = ALS.train(ratings = trainRatings,rank = 10, // 特征数iterations = 20 // 迭代次数)// 获取因子矩阵val userFeatures: RDD[(Int, Array[Double])] = alsModel.userFeatures// 获取物品因子矩阵val productFeatures: RDD[(Int, Array[Double])] = alsModel.productFeatures// TODO 模型评估val realRatingsRDD: RDD[((Int, Int), Double)] = testRatings.map {tuple =>((tuple.user, tuple.product), tuple.rating)}// 使用模型对测试数据进行预测val predictRatingsRDD: RDD[((Int, Int), Double)] = alsModel.predict(realRatingsRDD.map(_._1)).map(tuple =>((tuple.user, tuple.product), tuple.rating))// 合并预测值和真实值val predictAndRealRDD: RDD[((Int, Int), (Double, Double))] = predictRatingsRDD.join(realRatingsRDD)val metrics: RegressionMetrics = new RegressionMetrics(predictAndRealRDD.map(_._2))println(s"RMSE = ${metrics.rootMeanSquaredError}")println("----------------预测196用户对电影242的评分-----------------------")// TODO 预测val predict: Double = alsModel.predict(196, 242)println(s"预测196用户对电影242的评分: $predict")println("----------------为196用户推荐的10部电影-----------------------")// 为196用户推荐的10部电影val movies: Array[Rating] = alsModel.recommendProducts(196, 10)movies.foreach(println)println("----------------为242电影推荐的10个用户-----------------------")// 为242电影推荐的10个用户val users: Array[Rating] = alsModel.recommendUsers(242, 10)users.foreach(println)// TODO 保存和加载模型val path = "datas/als/ml-als-model-" + System.currentTimeMillis()alsModel.save(sc,path)// 加载
//    val model: MatrixFactorizationModel = MatrixFactorizationModel.load(sc, path)// 休眠Thread.sleep(10000000L)sc.stop()}}

使用spark mllib中协同过滤推荐算法ALS建立推荐模型相关推荐

  1. Spark MLlib之协同过滤

    原文:http://blog.selfup.cn/1001.html 什么是协同过滤 协同过滤(Collaborative Filtering, 简称CF),wiki上的定义是:简单来说是利用某兴趣相 ...

  2. 孙其功陪你学之——Spark MLlib之协同过滤

    转自 程序员的自我修养 – SelfUp.cn 由于在学习 spark mllib 但是如此详细的资料真的很难找,在此分享.1,220次浏览 什么是协同过滤 协同过滤(Collaborative Fi ...

  3. Spark机器学习之协同过滤算法

    Spark机器学习之协同过滤算法 一).协同过滤 1.1 概念 协同过滤是一种借助"集体计算"的途径.它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度.其内在思想是相 ...

  4. 实时推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(八)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  5. 《网络电视节目推荐系统----基于用户协同过滤与基于内容的推荐算法的后融合》

    文章目录 一.什么是推荐系统 二.产生原因 由上我们可以得知,推荐系统产生的两大原因 三.应用场景 四.推荐系统的评测方法 1. 推荐系统的三大实验方法 a. 离线实验: b. 用户调查 c. 在线实 ...

  6. Spark MLlib中支持二次训练的模型算法

    在Spark MLlib中可以做二次训练的模型 大家好,我是心情有点低落的一拳超人 今天给大家带来我整理的Spark 3.0.1 MLlib库中可以做二次训练的模型总结,首先给大家介绍一下什么是二次训 ...

  7. 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  8. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  9. 推荐策略产品经理:剖析协同过滤(千人千面推荐的核心 )

    本文为PMCAFF专栏作者凤城狂客出品 前文:剖析千人千面的大脑--推荐引擎部分,其中这篇是定位:对推荐引擎中的核心算法:协同过滤进行深挖. 首先,千人千面融合各种场景,如搜索,如feed流,如广告, ...

最新文章

  1. 20210712未来智能实验室收录资料
  2. C++学习-环境配置
  3. java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法
  4. 03-类与对象——课后动手动脑
  5. HYSBZ - 1050(旅行comf 并查集Java实现)
  6. 做.NET开发多年,公司要我转Java...
  7. SQL 语句 - Select(1): 指定表
  8. python每隔几秒执行一次_Python设置程序等待时间
  9. 默认权限umask、文件系统权限、特殊权限
  10. [Python] L1-029. 是不是太胖了-PAT团体程序设计天梯赛GPLT
  11. rails 开发随手记 9
  12. SLAM_SLAM面试专题
  13. Docker container 集装箱说明
  14. 安装python Scipy库记录
  15. linux majaro 安装 hp p1106打印机
  16. python实现组合优化
  17. 华盛顿道格拉斯县计划建立区块链创新园区
  18. php文件是不是死链,怎么判断网站的链接是不是死链接? 百度搜索标准死链官方文档...
  19. 开心赚手机网赚操作真实赚钱项目揭秘
  20. 玩转#ChatGPT之“用Chat GPT 做出行攻略”

热门文章

  1. Silvaco TCAD仿真11——BJT结构仿真
  2. GBase 8c 数据类型-日期/时间类型之日期输入
  3. opencv定位十字交叉点(python)
  4. PMbok项目管理第六版项目定义
  5. 计算机应用基础山东省,《计算机应用基础/山东省高校教改项目立项教材》低价购书_计算机与互联网_孔网...
  6. Win32 API 封装类总结
  7. 华为鸿蒙系统正式开始破冰,鸿蒙系统开始“破冰”行动,安卓措不及防,网友:华为动手了!...
  8. c语言图书管理系统(c语言图书管理系统源代码)
  9. bzoj3047:Freda的传呼机bzoj2125: 最短路
  10. 前端 | (二)各种各样的常用标签 | 尚硅谷前端html+css零基础教程2023最新