基于协同过滤算法的电影推荐系统
目录
- 前言
- R语言 电影推荐系统
- 案例及代码
- 数据准备
- 数据预处理
- 建立模型
前言
电影推荐系统是数学建模培训中一次例题,网上对相同类型的模型已有答案,但相关代码跑起来仍然存在些许bug,本文基于同类型的基础上能帮助后来的学习者。
电影推荐系统即通过用户的历史观影记录,结合相同爱好用户集群,在海量的影视资源中精确对每一位用户推荐电影。本文调用R语言Recommenderlab包做电影推荐系统。
R语言 电影推荐系统
实际上,在R语言的Recommenderlab保中,对电影进行推荐,是对用户没有看过的电影做一个预测评分,通过TOP-N部电影,选取所需要的电影数量推荐表。
案例及代码
数据准备
电影数据来源于http://grouplens.org/datasets/movielens/ 网站,本文分析的数据是ml-latest-small中Ratings.csv文件,总共有100,836个评分,来自610用户对9724部电影评分。
首先安装R语言的程序包:做推荐系统的Recommenderlab包,画图的ggplot2包,数据处理的reshape包。
需要注意的是Recommenderlab针对RealRatingMatrix数据类型,总共提供了6种模型:基于项目协同过滤(IBCF), 主成分分析(PCA), 基于流行度推荐(POPULAR),随机推荐(RANDOM),奇异值分解(SVD),基于用户协同过滤算法(UBCF)。
我在这里只用了三种,感兴趣的可以将6种都比较一下,然后选取误差值最小的作为最优解。
数据预处理
调用程序包,读取数据ratings.csv,
library(recommenderlab)
library(reshape)
library(ggplot2)
mydata<-read.csv("C:\\Users\\HP\\Desktop\\ratings.csv",header = FALSE,stringsAsFactors = TRUE)
数据总共4列,usersId,MoviesId,ratings还有timestamp,timestamp是一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。
这是百度百科的含义,简单来讲就是把年月日的计日方式变成了十进制数据,这里提供一个网站进行转义https://tool.lu/timestamp
时间列是我们不需要的,剔除,还剩三列。
mydata<-mydata[,-4] #剔除时间戳列
看一下前6行的评分
head(mydata)
V1 V2 V3
1 1 1 4.0
2 5 1 4.0
3 7 1 4.5
4 15 1 2.5
5 17 1 4.5
6 18 1 3.5
看一下评分(rating)的总体占比情况
prop.table(table(mydata[, 3]))
summary(mydata[, 3])
0.5 1 1.5 2 2.5 3 3.5
0.01358642 0.02787695 0.01776151 0.07488397 0.05503987 0.19880797 0.13027093 4 4.5 5
0.26595660 0.08480106 0.13101472 Min. 1st Qu. Median Mean 3rd Qu. Max. 0.500 3.000 3.500 3.502 4.000 5.000
数字太多了,看看饼图
gplot(mydata,x=V3,aes(x=factor(1),fill=factor(V3)))
+geom_bar(width = 1)+coord_polar(theta="y")‘
+ggtitle("评分分布图")
+labs(x="",y="")+guides(fill=guide_legend(title = '评分分数'))
图中可以看出来,打1、2分的人很少,3,4分的占了6成左右。
建立模型
调用reshape包的cast()函数将数据转换为usersId为行,moviesId为列的矩阵,删除第一列数据序号列,这个时候的数据包含两种类型:cast_df,data.frame,其中cast_df是不能直接转换为matrix的,因此需要去掉这个类属性,只保留data.frame 也就是数据框
注意转换后是一个610*9724的超大矩阵,导致数据源评分矩阵是一个非常稀疏、含有许多空缺值的矩阵但并不影响我们的后续操作。为了让数据成为Recommenderlab包能够处理的类型,转换为RealRatingMatrix。
mydata<-cast(mydata,V1~V2,value="V3",fun.aggregate=mean) #生成一个以v1为行,v2为列的矩阵,使用v3进行填充
mydata<-mydata[,-1] #第一列数字为序列,可以删除
class(mydata)
class(mydata)<-"data.frame" #只选取data.frame
mydata<-as.matrix(mydata)
mydata<-as(mydata,"realRatingMatrix")
mydata
给生成的矩阵的列命名"M_moviesId"表示电影编号,调用Recommenderlab的UBCF(基于用户的协同过滤算法)模型
补个知识点:协同过滤主要分为两个步骤,首先依据目标用户的已知电影评分找到与目标用户观影风格相似的用户群,然后计算该用户群对其他电影的评分,并作为目标用户的预测评分,协同过滤算法的具体细节请参考文献。
colnames(mydata)<-paste0("M",1:9726,sep="")
mydata.model <- Recommender( mydata[1:610], method = "UBCF")
数据处理完毕,接来下是进行预测,以编号为233的用户为例,预测他对前6部电影的评分(看过的电影不会再预测,显示为NA)
mydata.predict <- predict(mydata.model,mydata[414], type="ratings")
as(mydata.predict,"matrix")[1,1:6]M1 M2 M3 M4 M5 M6 NA 3.282566 3.263601 3.308725 3.332142 3.308725
现在你可以命令R给编号为233的用户推荐5部预测评分高的电影表
mydata.predict2 <- predict( mydata.model, mydata[233], n=5) #n指推荐电影数量
as(mydata.predict2,"list")$`233`
[1] "M1067" "M969" "M1218" "M977" "M2611"
到这里整个推荐系统模型已经建立好了。
基于协同过滤算法的电影推荐系统相关推荐
- java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)
项目介绍 "互联网+"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人 ...
- 基于协同过滤算法的电影推荐系统设计(二) - ALS算法详解
0 系列文章目录 0.1 基于协同过滤算法的电影推荐系统设计(一) - 项目简介 0.2 基于协同过滤算法的电影推荐系统设计(二) - 推荐系统介绍 ALS是alternating least squ ...
- 毕业设计之基于协同过滤算法的电影推荐系统设计(一) - 项目简介
由于本人今年毕业,为完成毕设特地想着实现一个简单的推荐系统设计,思来想去,小电影不就是很好的切入点嘛! 于是诞生该项目,将会一步步带着大家实现一个自己的电影推荐系统. 1 研究目标 从应用场景来看,基 ...
- 【毕业设计_课程设计】基于协同过滤算法的个性化推荐系统(源码+论文)
文章目录 0 项目说明 1 研究目的 2 研究方法 3 系统设计 3.1 前台模块 3.1.1 首页 3.1.2 个人中心 3.1.3 发布者中心 3.2 后台模块 3.2.1 首页 3.2.2 新闻 ...
- 计算机毕业设计之java+ssm基于协同过滤算法的图书推荐系统
计算机毕业设计之java+ssm基于协同过滤算法的图书推荐系统 项目介绍 "互联网:"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方 ...
- 计算机毕业设计ssm基于协同过滤算法的甜品推荐系统uhnk3系统+程序+源码+lw+远程部署
计算机毕业设计ssm基于协同过滤算法的甜品推荐系统uhnk3系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于协同过滤算法的甜品推荐系统uhnk3系统+程序+源码+lw+远程部署 本源码技术栈 ...
- (附源码)计算机毕业设计SSM基于协同过滤算法的甜品推荐系统
(附源码)计算机毕业设计SSM基于协同过滤算法的甜品推荐系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...
- “泰迪杯”挑战赛 - 基于用户协同过滤算法的电影推荐系统(附算法代码)
目录 第 1 章 绪论 1.1.研究背景 1.2.国际发展形势第 2 章 基于用户协同过滤推荐技术 第 2 章 基于用户协同过滤推荐技术 2.1 电子商务推荐系统概述 2.2 协同过滤推荐技术 第 3 ...
- 基于用户的协同过滤算法的电影推荐系统
上一篇讲解了推荐算法的分类,这里电影推荐系统具体分析一下 第一步:建立用户电影矩阵模型 如表1所示,协同过滤算法的输入数据通常表示为一个m*n的用户评价矩阵Matrix,m是用户数,n是电影数,Mat ...
最新文章
- 一篇不错的讲解Java异常的文章(转载)
- Android切换到主线程
- 复杂电路简化经典例题_【中考物理】电路简化的10大原则和7大步骤
- 云计算实战系列十二(Linux系统优化)
- [转]html控件、html服务器控件和web服务器控件的区别
- 开源中国大佬是怎么用Selenium做自动化web测试的
- JSK-9 元素移除【入门】
- 为什么用python的时候特别卡_【后端开发】python为什么会运行慢
- centos7安装python3.6独立的virtualenv环境
- node.js 爬取腾讯地图API全国行政区数据
- H5热门游戏模板案例解读:贪吃蛇玩法的新高度
- 干货分享!12款响应式的移动网站模板免费下载
- 分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示
- 采集本地HTML数据,火车采集器保存为本地word、excel、html、txt文件方法及文件模板_爬虫软件技术与爬虫软件网页数据采集器门户...
- 【安装cad后不小心卸了,再次重新安装时显示已安装。这个怎么破?】
- 计算机设备驱动程序的安装与更新,电脑系统驱动如何安装更新?
- 实现 Google 第三方授权登录
- 控制电机的几种控制电路原理图
- Java中super关键字及super()的使用
- 别瞎惊叹常识而已--5个前向实操过程分析
热门文章
- 韩信要是听了此人的建议,或许就不会死在这位女人手中了
- 外部web端访问微信小程序云数据库的几种方法
- javaweb mysql 连接池 c3p0 配置_javaWeb_JDBC_c3p0数据库连接池
- Java小白踩坑录 - Shadowing Obscuring 揭秘
- js中关于字符串操作的命令
- 好用的项目研发管理系统6个功能特征,这些企业都在用!
- 2019年涨工资指南:为什么要学AI、AI薪资水平和就业前景分析
- SAP 打开或关闭财务账期和物料账期等事物代码清单-OB52/MMPV/MMRV/OKP1/1KEF
- XSS朝花夕拾代码简单分析(XSSgame)
- 微信公众号 模板消息开发