2015年9月
Hadoop环境下协同过滤算法的实现
王博文
西北工业大学
摘要:协同过滤算法是推荐系统的核心技术,针对协同过滤推
荐算法在大数据规模背景下的实现问题,在分析研究Hadoop平台
和传统的协同过滤算法后,提出了一种基于共词分析法的实现方
案,将协同过滤算法在MapReduce框架下实现。
关键词:Hadoop;推荐系统;协同过滤算法
随着当今互联网的而不断发展,人们如何在繁多的信息中获
取自己需要的内容成为了一个至关重要的问题。推荐系统能够分
析用户的历史操作,建立了用户偏好模型,依靠算法计算预测用户
对未知商品的偏好权重,向用户推送一个可能令其感兴趣的商品
推荐列表。本文章将介绍基于协同过滤的推荐策略,并且提供实
现基于Hadoop的协同过滤算法的基本实现方法。
1协同过滤推荐算法
协同过滤(Collaborative Filtering, 简称 CF)是利用集体智慧的
一个典型方法。协同过滤算法主要分为基于用户的协同过滤算法
与基于项目的协同过滤算法,其实质是极为相似的。该算法通过
分析所有用户的历史行为,生成项目—用户矩阵;根据项目之间的
相似度,计算项目的最近N邻居;根据最近N邻居和被预测用户的
历史行为,预测用户对新项目的评分,并产生推荐列表。基于用户
的 CF 的基本思想相当简单,基于用户对物品的偏好找到相邻邻
居用户,然后将邻居用户喜欢的推荐给当前用户。基于物品的
CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本
身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物
品,然后根据用户的历史偏好,推荐相似的物品给他。
传统协同过滤算法的基本步骤如下:
(1)数据表述
根据不同的用户对不同项目的评分,将输入数据表述为一个
M*N的用户—项目评分矩阵R,M是用户数,N是项目数,矩阵元
素Rij表示第 i个用户对第 j个项目的评分。
图1用户-项目矩阵
(2)相似度的计算
得出目标项目的最邻近集合,即计算某项目与其它项目的相
似度,根据相似度的大小进行排序从而确定目标项目的最邻近,比
较常用的方法有以下几种:
相关系数:
(1)
其中Uij 表示对 Ii表达偏好的用户集合与对 Ij 表达偏好的用
户集合的交集;-PI ,----PJ 分别表示对 Ii,Ij 的平均偏好。
余弦相似度计算:
(2)
通过以上几种方法,我们就可以得到各项目之间的相似度,并
且依据相似度,确定其最近邻。
(3)产生推荐结果
根据目标用户的最近邻用户的所有评分项,预测其对项目 iy
的评分 pay ,其中 Ny 表示目标项目的最近邻,rai 表示目标用户
对项目 ii的评分
(3)
得出用户对所有项目的预测评分后,根据 pay 的大小排序,给
出最佳的推荐结果给用户。
但以上算法相对较复杂,实现起来也往往更加困难。因此,当
开始初步了解推荐系统时,我们更需要一个便于快速实现的推荐
系统。
2Hadoop平台
Hadoop平台是Apache基金会对于云计算创建的解决方案。
Hadoop的核心包括HDFS与MapReduce,分别是Google公司提出
的 GFS和MapReduce理论的开源实现。HDFS是分布式存储系
统,可以实现对超大文件的存储与管理。MapReduce是建立在
HDFS上的一个可用于大规模数据集并行计算的软件编程框架。
Hadoop平台的主从式架构可以运行在几十或者几百甚至更多台
计算机上,能充分利用节点扩展存储和计算资源。
MapReduce是Google提出的一个编程框架,用于大规模数据
集的并行运算。其核心作业为Map与Reduce两个阶段。Map阶
段将输入数据进行分布式处理映射成键值对<key,value>,经过一
定处理后交给Reduce阶段,然后Reduce对key值相同的value进行
处理后再输出键值作为最后的结果。
图2 MapReduce作业流程图
科 学 技 术
-- 41
科学中国人
2015年9月
3推荐系统在Hadoop平台上的实现方法
传统协同过滤算法在Hadoop平台上的局限性
相似度的计算,是整个推荐系统实现的一个核心技术,通过分
析一些传统的协同过滤算法,我们发现这些算法的往往不适合
MapReduce编程框架下的实现。
以皮尔逊算法为例,我们需要预先计算出来每一个-PI ,----PJ ,
而且计算公式相对复杂,因此要在MapReduce下实现,颇为困难。
而且,在通常的商业运行情况下,用户的数量会远远的大于项
目的数量,例如淘宝网。因此建立项目-用户矩阵往往存在着矩
阵过于庞大的问题,极大的制约了系统的性能。因此,我们需要考
虑一种更加适合的算法来实现。
共词分析方法实现基于物品的CF
算法的基本思想如下:
1)建立用户与物品的同现矩阵
同现矩阵就是通过统计两个项目共同出现在同一个元组的次
数,通过统计同现次数,表达这两个项目之间的紧密相似程度。
2)建立用户的评分矩阵
3)计算同现矩阵与评分矩阵相乘
4)将结果推荐给用户
这种推荐系统的实现算法的核心思想是 推荐结果=同现矩阵
*评分矩阵。
如下图:
图3推荐结果=同现矩阵*评分矩阵
与其他的计算相似度的算法相比,这种方法的计算复杂度明
显降低,实现起来也更加容易。尤其是在Hadoop环境下,MapRe⁃
duce编程框架非常适合大规模矩阵运算。而且,将项目-用户矩
阵改为同现矩阵,可以减小矩阵运算的规模,提高运算的速度,这
对于推荐系统来说,是极为重要的。
算法的设计与实现
以Grouplens网站下载的视频数据Movielens 1M为例,里面存
储了电影信息,评分信息以及用户信息。为了推荐给用户最迎合
他们兴趣的电影,我们需要实现这个推荐系统。
这里我们要提到Mahout,Mahout是Apache旗下的一个机器学
习与数据挖掘的框架,包括了聚类,分类,协同过滤与关联规则挖
掘等经典算法。Mahout提供了现有的算法接口,因此可以大大方
便了推荐系统的实现。
基本步骤:
第一步:读入数据,根据用户的 ID分组,从而进一步生成评分
矩阵。
Mapper函数 value:User_IDKey:Iterm_ID:Score
Reduce函数 value:User_IDKey:List<Iterm_ID:Score>
第二步:分别计算两个物品同时出现的次数,从而进一步生成
同现矩阵。
Mapper函数 value:Iterm_ID:Iterm_IDKey:1
Reduce函数 value:Iterm_ID:Iterm_IDKey:累计出现的次数
第三步:根据第一步的输出生成评分矩阵和根据第二步的输
出生成同现矩阵。
Mapper 函数 (生成同现矩阵) value:Iterm_ID:Iterm_IDKey:
num
Mapper函数(生成评分矩阵)value:Iterm_ID:Iterm_IDKey:Us⁃
er_ID:Preference
第四步:矩阵相乘,得到推荐得分,最后根据得分排序,输出。
Mapper函数(计算) value:User_IDKey:Iterm_ID:Score
Combiner函数(分数累计)value:User_IDKey:Iterm_ID:Score
Reduce函数(根据总分排序) value:User_IDKey:Iterm_ID:
Score
4结语
本文总结了一种基于Hadoop平台的协同过滤推荐算法的快
速实现方法,有助于入门机器学习和数据挖掘领域。目前大数据
行业的快速发展,为我们提供了越来越多的开发工具与手段。例
如,应用Hadoop云计算平台可以更轻松的实现并行计算,以加快
计算速度,并且还可以随着计算规模的增加,动态的扩展集群计算
能力。这都为推荐系统的更高效快速的实现,提供了条件。推荐
系统是一个拥有无限潜力与良好发展前景的领域,需要更多人来
进入这个领域,推进这个领域的发展。
参考文献:
[1]唐真.基于 hadoop的推荐系统设计与实现[D].成都:电子科
技大学,2013.
[2]桑治平,何聚厚.基于Hadoop的多特征协同过滤算法研究
[J].计算机应用研究.2014 32(12):3621-3624.
[3]郑健.基于Hadoop的协同过滤推荐系统研究与实现[D].北
京:北京邮电大学,2014.
[4]White : The Definitive Guide[M].The 3rd Edition.
USA:O’Reilly Media,2012.
[5]李伟卫.基于Hadoop平台的数据挖掘技术研究[D].西安:西
北农林大学,2013.
[6]肖强,朱庆华,郑华,吴克文.Hadoop 环境下的分布式协同
过滤算法设计与实现[J].现代图书情报技术.2013(01):83-89.
[7]杨志文,刘波.基于Hadoop平台协同过滤推荐算法[J].计算
机系统应用.2013,32(07):108-112.
-- 42