Spark MLlib系列(二):基于协同过滤的电影推荐系统
来源:互联网 发布:投影仪怎么安装软件 编辑:程序博客网 时间:2024/05/16 11:06
前言
随着大数据时代的到来,数据当中挖取金子的工作越来越有吸引力。利用Spark在内存迭代运算、机器学习领域强悍性能的优势,使用spark处理数据挖掘问题就显得很有实际价值。这篇文章给大家分享一个spark MLlib 的推荐实战例子。我将会分享怎样用spark MLlib做一个电影评分的推荐系统。使用到的算法是user-based协同过滤。如果对Spark MLlib不太了解的,请阅读我的上一篇博客。
推荐系统的对比
应该说,自从Amazone公布了协同过滤算法后,在推荐系统领域,它就占据了很重要的地位。不像传统的内容推荐,协同过滤不需要考虑物品的属性问题,用户的行为,行业问题等,只需要建立用户与物品的关联关系即可,可以物品之间更多的内在关系,类似于经典的啤酒与尿不湿的营销案例。所以,讲到推荐必须要首先分享协同过滤。
Spark MLlib中的协同过滤
协同过滤常被应用于推荐系统。这些技术旨在补充用户-商品关联矩阵中所缺失的部分。MLlib当前支持基于模型的协同过滤,其中用户和商品通过一小组隐语义因子进行表达,并且这些因子也用于预测缺失的元素。为此,我们实现了交替最小二乘法(ALS) 来学习这些隐性语义因子。在 MLlib 中的实现有如下的参数:
numBlocks 是用于并行化计算的分块个数 (设置为-1为自动配置)。
rank 是模型中隐语义因子的个数。
iterations 是迭代的次数。
lambda 是ALS的正则化参数。
implicitPrefs 决定了是用显性反馈ALS的版本还是用适用隐性反馈数据集的版本。
alpha 是一个针对于隐性反馈 ALS 版本的参数,这个参数决定了偏好行为强度的基准。
rank 是模型中隐语义因子的个数。
iterations 是迭代的次数。
lambda 是ALS的正则化参数。
implicitPrefs 决定了是用显性反馈ALS的版本还是用适用隐性反馈数据集的版本。
alpha 是一个针对于隐性反馈 ALS 版本的参数,这个参数决定了偏好行为强度的基准。
隐性反馈 vs 显性反馈
基于矩阵分解的协同过滤的标准方法一般将用户商品矩阵中的元素作为用户对商品的显性偏好。
在许多的现实生活中的很多场景中,我们常常只能接触到隐性的反馈(例如游览,点击,购买,喜欢,分享等等)在 MLlib 中所用到的处理这种数据的方法来源于文献: Collaborative Filtering for Implicit Feedback Datasets。 本质上,这个方法将数据作为二元偏好值和偏好强度的一个结合,而不是对评分矩阵直接进行建模。因此,评价就不是与用户对商品的显性评分而是和所观察到的用户偏好强度关联了起来。然后,这个模型将尝试找到隐语义因子来预估一个用户对一个商品的偏好。
目前可用的协同过滤的算法:
- ALS
数据准备
数据准备,MoiveLens的数据集,有100k到10m的数据都有。我们这里选择100k的数据。
对下载的数据解压之后,会出现很多文件,我们需要使用u.data和u.user文件。详细的数据说明可以参见README。
u.data是用户对电影评分的数据,也是训练集。数据分别表示userId,moiveId,评分rate,时间戳。如下图所示
u.user是用户的个人信息数据,用以推荐使用,分别表示userId,age,sex,job,zip code。我们只使用userId即可。如下图所示
实现的功能
这里有10w条用户对电影的评分,从1-5分,1分表示差劲,5分表示非常好看。根据用户对电影的喜好,给用户推荐可能感兴趣的电影。
实现思路
代码实现如下:
1、加载u.data数据到rating RDD中
2、对rating RDD的数据进行分解,只需要userId,moiveId,rating
3、使用rating RDD训练ALS模型
4、使用ALS模型为u.user中的用户进行电影推荐,数据保存到HBase中
5、评估模型的均方差
代码
运行
1、在scala IDE(或者eclipse安装scala插件)运行:
设置工程名,main类等
设置运行参数
--rank 10 --numIterations 40 --lambda 0.01 --userDataInput D:\\ml_data\\data_col\\ml-100k\\ml-100k\\u.user D:\\ml_data\\data_col\\ml-100k\\ml-100k\\u.data
/bin/spark-submit --jars hbase-client-0.98.0.2.1.5.0-695-hadoop2.jar,hbase-common-0.98.0.2.1.5.0-695-hadoop2.jar,hbase-protocol-0.98.0.2.1.5.0-695-hadoop2.jar,htrace-core-2.04.jar,protobuf-java-2.5.0.jar --master yarn-cluster --class com.ml.recommender.MoiveRecommender moive.jar
--rank 10 --numIterations 40 --lambda 0.01 --userDataInput hdfs:/spark_test/u.user hdfs:/spark_test/u.data
注意:
--jars表示项目需要的依赖包
moive.jar表示项目打包的名称
运行结果
均方差如下所示
0 0
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- 基于Spark MLlib平台和基于模型的协同过滤算法的电影推荐系统(二)代码实现
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- 基于Spark MLlib平台和基于模型的协同过滤算法的电影推荐系统(一) 协同过滤算法概述&&基于模型的协同过滤的算法思想(算法模型和结构待补充)
- 基于Spark MLlib平台和基于模型的协同过滤算法的电影推荐系统(三) 作业里的拓展
- 基于Spark Mllib,SparkSQL的电影推荐系统
- <转>基于Spark Mllib,SparkSQL的电影推荐系统
- 基于Spark Mllib,SparkSQL的电影推荐系统
- 基于Spark Mllib,SparkSQL的电影推荐系统
- 黑马程序员——JAVA面向对象的特性:封装,继承,多态
- 九度oj 1067
- android中的与GPS定位的API
- 测试管理之我见
- HDOJ 2544 最短路 (最短路 Dijkstra && SPFA && Floyd)
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- Java or Android 知识点书签
- Working with DbGeography, Points and Polygons in .NET
- 图解Java多态内存分配以及多态中成员方法的特点
- PeekMessage完美解决MFC主界面无响应
- caffe 使用CUDA NSight 集成开发工具调试
- session、cooket详解
- 方法
- 一个人的旅行 2066 (Dijkstra)