实验报告:用协同过滤算法对电影评分,并使用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实现

0 0
原创粉丝点击