电影推荐系统-基于spark

基于ml-100k电影数据集的推荐系统

数据集下载:https://grouplens.org/datasets/movielens/

数据集如下:
这里写图片描述

在这里我用的python3.6和python的pyspark包进行实现的。
当然我们也可以启动hadoop,把数据文件放在hdfs上,代码也可以读取分布式文件。
算法:ALS算法,

from pyspark import  SparkContext

# step1:准备数据
sc = SparkContext()
global Path
print('运行在:'+sc.master[0:5],'上')
if sc.master[0:5]=="local":
    # Path="file:/home/hadoop/spark/sparkwork1/"
    Path='data/'
else:
    Path="hdfs://master:9000/user/hduser/"
rawUserData = sc.textFile(Path+"/ml-100k/u.data")
print(rawUserData.count()) #打印数据的行数
print(rawUserData.first()) #first data(userID projectID evaluate Date)
# 准备Als训练数据 导入Rating模块
from pyspark.mllib.recommendation import Rating
rawRatings = rawUserData.map(lambda line:line.split("\t")[:3]) # 只要前三列,并通过\t分割
print(rawRatings.take(5))
# 查看RDD数目
ratingsRDD = rawRatings.map(lambda x:(x[0],x[1],x[2])) # ALS训练数据是RDD类型,所以转换数据未RDD
print(ratingsRDD.take(5)) # 查看前5行
print(ratingsRDD.count()) # 查看数量

# 查看不重复用户数
numUsers = ratingsRDD.map(lambda x:x[0]).distinct().count()
print(numUsers) # 943个用户
# 查看不重复电影数
numMovies = ratingsRDD.map(lambda x:x[1]).distinct().count()
print('不重复电影数',numMovies)

# step2:训练模型
from pyspark.mllib.recommendation import ALS
# ALS训练,采用显示评分
model = ALS.train(ratingsRDD,10,10,0.01) #参数:数据RDD 中间矩阵大小 迭代次数 学习率
print('模型为:',model)

# step3:使用模型进行推荐
print('用户id是100的推荐的5个电影',model.recommendProducts(100,5)) # 参数: 推荐用户id 推荐数目 返回:列表(包括用户id 产品id 评分)
# 查看针对用户推荐产品的评分
print('给用户100推荐1141的评分为:',model.predict(100,1141))
# 针对电影推荐给用户
model.recommendUsers(product=200,num=5)

# step4:显示推荐电影名称
itemRDD = sc.textFile(Path+"/ml-100k/u.item")
print('显示一共有多少电影',itemRDD.count()) # 一共1682个电影
# 创建"电影ID与名称"的字典
movieTitle = itemRDD.map(lambda line:line.split('|')).map(lambda a:(float(a[0]),a[1])).collectAsMap() # 创建一个字典,先划分数据变成RDD类型,然后转换成字典,键是id,值是电影名字
#显示字典的前5项
print('字典:',movieTitle)
# 查询电影名称
print(movieTitle[5])
# 显示前5条推荐电影的名称
recommendP = model.recommendProducts(100,5) # 返回参数 第二个是产品
for p,rec in enumerate(recommendP):
    print('对用户'+str(p)+' 推荐电影'+str(movieTitle[rec.product])+' 推荐评分'+str(rec.rating))

结果:
这里写图片描述

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Spark电影推荐系统是使用Spark框架来构建和训练的推荐系统,它可以根据用户的历史行为和电影的属性,为用户推荐可能感兴趣的电影。下面是一个简单的步骤来构建基于Spark电影推荐系统: 1. 数据准备:收集电影数据集,包括用户行为数据和电影属性数据。用户行为数据可以包括用户对电影的评分、观看历史、收藏等信息,电影属性数据可以包括电影的类型、导演、演员等信息。 2. 数据预处理:使用Spark的DataFrame API加载和处理数据。对于用户行为数据,可以进行数据清洗、去重、转换等操作;对于电影属性数据,可以进行特征提取、编码等操作。 3. 特征工程:将用户行为数据和电影属性数据转换为特征向量。可以使用特征提取方法如TF-IDF、Word2Vec等,将电影和用户表示为稠密向量。 4. 模型训练:使用Spark的机器学习库(如MLlib)训练推荐模型。常用的推荐模型包括协同过滤、基于内容的推荐、矩阵分解等。可以使用交叉验证和超参数调优来选择最佳模型。 5. 推荐生成:使用训练好的模型对新用户进行推荐。可以根据用户的特征向量和电影的特征向量计算用户与电影之间的相似度,并为用户推荐相似度高的电影。 6. 评估和优化:通过离线评估指标(如准确率、召回率等)来评估推荐系统的性能,并进行优化。可以尝试不同的模型算法、特征工程方法和参数设置来提高推荐效果。 请注意,以上只是一个基本的框架,实际构建电影推荐系统还需要根据具体需求和数据进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值