实验报告:用协同过滤算法对电影评分,并使用RMSE算出预测误差
来源:互联网 发布:mx master 2s 区别 mac 编辑:程序博客网 时间:2024/05/14 23:17
实验报告
一、实验目的
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算出预测误差
- 用协同过滤算法对电影评分,并使用RMSE算出预测误差的MapReduce实现
- 基于机器学习算法对电影评分及票房预测的深度报告
- 基于改进的协同过滤算法的用户评分预测模型
- 电影评分预测
- 基于在线评分的协同过滤算法---Slope One算法
- kaggle-电影评分预测从零开始
- 基于用户的协同过滤算法实验
- 协同过滤Item-based算法实现电影推荐系统
- 基于用户的协同过滤算法的电影推荐系统
- 电影推荐之协同过滤
- 基于用户协同过滤python源码【多线程计算RMSE值】
- 一个memory-based协同过滤算法的改进(基于隐式评分)
- Youtube-利用用户的评分行为的推荐(有别于经典的协同过滤算法)
- 用eclipse跑协同过滤算法程序
- 协同过滤算法
- 协同过滤推荐算法
- 协同过滤推荐算法
- Ubuntu无法进入桌面系统怎么办
- 2路bit-map的应用:test.txt中有42亿个无符号整数,从小到大打印其中只出现过一次的数 。限制: 可用内存为1.5GB.
- 用rsync在copy时实现过滤
- 完美破解理发师悖论
- OCP-1Z0-051-2015-24题
- 实验报告:用协同过滤算法对电影评分,并使用RMSE算出预测误差
- asp.net web API 的调用返回Json值 POST方式请求
- servlet和Jsp生命周期解读
- 大学生炒股意不在暴富
- Hadoop+Spark+Hbase部署整合篇
- b/s和c/s 的区别
- 使用 ssh -R 建立反向/远程TCP端口转发代理
- ssh 代理详细解释
- 自定义标签TLD文件中,rtexprvalue属性到底什么意思