实验报告:用协同过滤算法对电影评分,并使用RMSE算出预测误差
实验报告
一、实验目的
1.学习利用hadoop处理大数据。
2. 通过实验加强mapreduce编程能力。
3. 在掌握协同过滤算法基础上通过mapreduce实现。
二、实验内容
1.使用给定的数据集,随机从数据集中抽取119条数据作为测试数据。
2.利用Pearson correlation作为相似度计算方法计算movie-movie相似度。
3.使用RMSE算出预测误差。
三、实验环境
centos操作系统、eclipse
四、实验原理
4.1 推荐系统分类
目前推荐系统主要分为两大类:
1、基于内容的系统。此类系统主要考查的是推荐项的性质。比如,如果优酷的某用户喜欢看武侠电影,系统就会将数据库中属于“武侠电影”类的电影推荐给该用户。(基于内容的系统需要一定的领域知识。)
2、协同过滤系统。这类系统通过计算用户或/和项之间的相似度来推荐项。与某用户相似的用户所喜欢的项会推荐给该用户。
4.2协同过滤
协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。
协同过滤可细分为以下三种:
User-based CF: 基于User的协同过滤,通过不同用户对Item的评分来评测用户之间的相似性,根据用户之间的相似性做出推荐;
Item-based CF: 基于Item的协同过滤,通过用户对不同Item的评分来评测Item之间的相似性,根据Item之间的相似性做出推荐;
Model-based CF: 以模型为基础的协同过滤(Model-based CollaborativeFiltering)是先用历史资料得到一个模型,再用此模型进行预测推荐。
与传统文本过滤相比,协同过滤有下列优点:
(1)能够过滤难以进行机器自动基于内容分析的信息。如艺术品、音乐;
(2)能够基于一些复杂的,难以表达的概念(信息质量、品位)进行过滤;
(3)推荐的新颖性。
正因为如此,协同过滤在商业应用上也取得了不错的成绩。Amazon,CDNow,MovieFinder,都采用了协同过滤的技术来提高服务质量。
缺点是:
(1)用户对商品的评价非常稀疏,这样基于用户的评价所得到的用户间的相似性可能不准确(即稀疏性问题);
(2)随着用户和商品的增多,系统的性能会越来越低;
(3)如果从来没有用户对某一商品加以评价,则这个商品就不可能被推荐(即最初评价问题)。
因此,现在的电子商务推荐系统都采用了几种技术相结合的推荐技术。
4.3基于Item的协同过滤
下面举电影评分的例子,说明基于Item的协同过滤方法,由于Pearson correlation的计算结果和对数据去中心化后算得的余弦值距离相同,所以本实验采用对数据去中心化,计算其余弦值距离作为相似度计算方法,具体方法如下:
(1)算出数据集中电影j的平均评分
(2)对用户对电影的评分去中心化
(3)从数据集中随机选择若干条数据作为测试集
(4)计算测试集电影i与数据集所有电影j的相似度
(5)求出最相似的N个电影数据
(6)根据最大相似度电影数据计算测试集中用户i对电影j的评估分
(7)计算测试集中用户i对电影j的评分与上一步算出的评估分的差异diff
(8)计算测试集的均方根误差RMSE(其中T为测试集,N为测试集总数)
五、实验过程
5.1.计算每部电影j的平均评分
Mapper的输入格式为:
(用户i,电影j及用户i对电影j评分)
Mapper的输出格式为:
(电影j,用户i对电影j评分)
Reducer的输入格式(Mapper 的计算输出)为:
(电影j,用户i对电影j评分)
Reducer的输出为:
(电影j,所有用户i对电影j的平均评分)
5.2 对用户对电影的评分去中心化
Mapper 的输入为:
(用户i,电影j及用户i对电影j评分)
(电影j,所有用户i对电影j的平均评分)
Mapper 的输出为:
(电影j,所有用户i对电影j的平均评分)
(电影j,用户i及用户i对电影j评分)
Reducer 的输入格式(Mapper 的计算输出)为:
(电影j,所有用户i对电影j的平均评分)
(电影j,用户i及用户i对电影j评分)
Reducer 的输出为:
(电影j,用户i及用户i对电影j的规范化评分)
5.3 从数据集中随机选择输出119条数据作为测试集
Mapper 的输入为:
(用户i,电影j及用户i对电影j评分)
Mapper 的输出为:
(电影j,用户i及用户i对电影j评分)(随机选择输出119条数据)
Reducer 的输入为:
(电影j,用户i及用户i对电影j评分)
Reducer 的输出为:
(电影j,用户i及用户i对电影j评分)(输出119条数据)
5.4 计算测试集电影i与数据集所有电影j的相似度
Mapper 的输入为:
(电影j,用户i及用户i对电影j的规范化评分)
Mapper 的输出为:
(<电影j,电影i>,电影j,用户i,用户i对电影j的规范化评分)
(<电影j,电影i>,电影i,用户i,用户i对电影j的规范化评分)
Reducer 的输入格式(Mapper 的计算输出)为:
(<电影j,电影i>,电影j,用户i,用户i对电影j的规范化评分)
(<电影j,电影i>,电影i,用户i,用户i对电影j的规范化评分)
Reducer 的输出为:
(<电影j,电影i>,电影j与电影i的相似度)
5.5 从上一步中求出最相似的20个电影数据
Mapper 的输入为:
(<电影j,电影i>,电影j与电影i的相似度)
Mapper 的输出为:
(0,<电影j,电影i> 电影j与电影i的相似度)
Reducer 的输入格式(Mapper 的计算输出)为:
(0,<电影j,电影i> 电影j与电影i的相似度)
Reducer 的输出为:
(电影j与电影i的相似度,<电影j,电影i>)(选择输出最大相似度的20个数据)
5.6 根据最大相似度电影数据计算测试集中用户i对电影j的评估分
Mapper 的输入为:
(用户i,电影j及用户i对电影j评分)(最大相似度的20个数据通过configration传进去)
Mapper 的输出为:
(电影j,用户i,用户i对电影j的评估分)
(这里的[电影j,用户i]为key,下同)
Reducer 的输入格式(Mapper 的计算输出)为:
(电影j,用户i,用户i对电影j的评估分)
Reducer 的输出为:
(电影j,用户i,用户i对电影j的评估分)
5.7 计算测试集中用户i对电影j的评分与上一步算出的评估分的差异diff
Mapper 的输入为:
(电影j,用户i,用户i对电影j评分)
(电影j,用户i,用户i对电影j的评估分)
Mapper 的输出为:
(<电影j,用户i>,用户i对电影j评分)
(<电影j,用户i>,用户i对电影j的评估分)
Reducer 的输入格式(Mapper 的计算输出)为:
(<电影j,用户i>,用户i对电影j评分)
(<电影j,用户i>,用户i对电影j的评估分)
Reducer 的输出为:
(<电影j,用户i>,)
5.8 计算测试集的均方根误差RMSE
Mapper 的输入为:
(<电影j,用户i>,)
Mapper 的输出为:
(diff,)
Reducer的输入格式(Mapper 的计算输出)为:
(diff,)
Reducer 的输出为:
(RMSE,)(其中T为测试集,N为测试集总数)
代码实现请查看用协同过滤算法对电影评分,并使用RMSE算出预测误差的MapReduce实现
实验报告:用协同过滤算法对电影评分,并使用RMSE算出预测误差相关推荐
- java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)
项目介绍 "互联网+"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人 ...
- 基于协同过滤算法的电影推荐系统设计(二) - ALS算法详解
0 系列文章目录 0.1 基于协同过滤算法的电影推荐系统设计(一) - 项目简介 0.2 基于协同过滤算法的电影推荐系统设计(二) - 推荐系统介绍 ALS是alternating least squ ...
- 毕业设计之基于协同过滤算法的电影推荐系统设计(一) - 项目简介
由于本人今年毕业,为完成毕设特地想着实现一个简单的推荐系统设计,思来想去,小电影不就是很好的切入点嘛! 于是诞生该项目,将会一步步带着大家实现一个自己的电影推荐系统. 1 研究目标 从应用场景来看,基 ...
- “泰迪杯”挑战赛 - 基于用户协同过滤算法的电影推荐系统(附算法代码)
目录 第 1 章 绪论 1.1.研究背景 1.2.国际发展形势第 2 章 基于用户协同过滤推荐技术 第 2 章 基于用户协同过滤推荐技术 2.1 电子商务推荐系统概述 2.2 协同过滤推荐技术 第 3 ...
- 基于协同过滤算法的电影推荐系统
目录 前言 R语言 电影推荐系统 案例及代码 数据准备 数据预处理 建立模型 前言 电影推荐系统是数学建模培训中一次例题,网上对相同类型的模型已有答案,但相关代码跑起来仍然存在些许bug,本文基于同类 ...
- 基于用户的协同过滤算法的电影推荐系统
上一篇讲解了推荐算法的分类,这里电影推荐系统具体分析一下 第一步:建立用户电影矩阵模型 如表1所示,协同过滤算法的输入数据通常表示为一个m*n的用户评价矩阵Matrix,m是用户数,n是电影数,Mat ...
- 基于python协同过滤算法的电影推荐
简介 协同过滤算法包括基于用户和基于物品的协同过滤算法. 基于用户协同过滤: "喜欢这个东西的人也喜欢--" 基于产品协同过滤: "像你一样的人也喜欢--" 设 ...
- Python基于用户协同过滤算法的电影推荐代码demo
这是上午上课时即兴发挥并现场编写的一段小代码,稍微美化一下分享. 思路:假设已有若干用户名字及其喜欢的电影清单,现有某用户,已看过并喜欢一些电影,现在想找个新电影看看,又不知道看什么好.根据已有数据, ...
- 基于用户协同过滤算法的电影打分与推荐
编写程序,生成数据模拟(也可以使用真实数据)多人对多部电影的打分(1~5分),然后根据这些数据对某用户A进行推荐. 推荐规则为:在已有数据中选择与用户A的爱好相似的用户B,然后从最相似的用户B已看过但 ...
最新文章
- OpenStack如何实现高可用集群介绍
- 去年黑客用的未知软件漏洞数量增长一倍 创下纪录
- 前端零基础教学开始第一天 01 -day
- spark on yarn 使用自定义jdk
- C语言版iso8583报文拆包组包代码
- Django数据查询方法总结
- 商品WEB开发的商品定单与存储过程的应用
- 机器学习十大经典算法之决策树
- Linux驱动编写(块设备驱动代码)
- FontExplorer X Pro for Mac字体管理软件
- 美年旅游_自由行_自由行分页PageHelper
- BZOJ 3689 异或之
- 淘宝 生成 图片二维码分享
- CSS精灵优化Retina显示屏下的网站图像
- Android后台耗电分析及优化
- 空白脂质体冻干粉制备以及荧光素修饰空白脂质体的应用
- java乘方运算符号_Java 4. 运算符号
- 计算机word资料,怎样快速找到电脑中的Word文档
- python随手记自动记账_随手记的5个常用功能,让你记账省心,高效,又安全
- 网页布局——盒子模型
热门文章
- Android之紧急拨号的处理
- 控制电路中的紧急停止按钮,该用常开点NO还是常闭点NC?
- python 面试题 博客园_常见的python面试问题1
- sas程序常用方法解析
- 【Linux】使用Google Authenticator 实现ssh登录双因素认证
- 互动媒体——自画像+简单音乐可视化
- MATLAB中画曲线网格
- 用fluent模拟内循环床气化燃烧(调试过程记录)
- js 第1步:随机生成json对象,格式为:“[[{“text“:XXXX},{“text“:XXXX}],[{“text“:XXXX},{“text“:XXXX},{“text“:XXXX}]]“
- 推荐系统——利用用户行为数据