在线客服

咨询热线

基于Ambari的协同过滤推荐算法的研究

作者:未知

  摘要:传统的协同过滤推荐((Collaborative Filtering,CF)算法是目前应用最广泛的一种推荐算法,但是由于CF存在稀疏性、冷启动等问题,所以本文提出了基于mahout的CF算法。结果表明,相比较传统的两种CF算法,使用基于mahout的CF算法能够提升推荐时间和推荐精度。
  关键词:协同过滤;mahout;推荐算法;Taste引擎
  中图分类号:TP312 文献标识码:A 文章编号:1007-9416(2019)06-0133-02
  0 引言
  目前,由百度、谷歌所推出的推荐引擎已经被广泛应用,但是推荐引擎是大众性的,不具有个性化特点。所以推荐系统就由此产生。推荐方法主要包括三种:基于内容的推荐算法、基于模型的推荐和协同过滤推荐。协同过滤方法是上述推荐方法中应用最为广泛的,但是它还是有很多问题需要解决的。如稀疏性问题(Sparsity)、可扩展性问题(Scalability)等。本文提出了基于Ambari平台的协同过滤推荐算法。基于MovieLens数据集的实验表明,本文算法很好地解决了协同过滤的问题,同时提高了推荐精度及响应时间。
  1 相关技术
  1.1 Ambari
  Ambari是Apache下的一种基于Web的工具,所以他支持Apache下的大多数服务,就本文来说,最重要的是mahout框架,mahout提供了一系列经典的机器学习算法。其中Taste引擎提供了一系列的组件,这样我们就可以使用Mahout中的Taste帮助构建推荐系统。
  1.2 协同过滤算法
  协同过滤推荐算法主要分为基于用户的协同过滤技术(user-cf)和基于项目(item-cf)的协同过滤技术。user-cf在于考虑的是用户之间的相似性。首先,识别出与目标用户具有高度相似性的邻居用户,然后向用户推荐邻居最喜欢的项目。而item-cf是从项目角度出发的,主要通过计算项目之间的相似性。
  2 构建基于Ambari的协同过滤的推荐系统
  2.1 基于mapReduce的推荐系统的设计
  推荐算法的实现分为两个步骤:
  (1)mapReduce包括map函數和reduce函数,首先,将电影原始的数据作为键值对发送到中间映射函数;
  (2)map以不同的键值对接收数据。在map任务接收到产品数据时,发出用户ID和电影信息,其中用户ID作为键,电影信息作为值。通过split、shuffle过程,每个reducer任务将接收一个用户已经观看的所有电影。然后reducer发出每个用户所带来的电影列表,从而达到为每一个用户建立一个推荐列表。
  2.2 基于mahout的推荐系统的设计
  本文采用基于用户的推荐算法,推荐系统需要应用Taste中的各个组件来实现,核心代码:
  File file = new File("e://xtj//dataset//ml-10M100K//rating.rat");
  DataModel dataModel = new GroupLensDataModel(file);
  UserSimilarity similarity = new UserSimilarity(data Model);
  UserNeighborhood userNeighborhood = new User Neighborhood(10,similarity,dataModel);
  Recommender recommender = new GenericUserBased Recommender(dataModel,userNeighborhood,similarity);
  List<Recommender> recommendedItemList = recommender.recommend(5,10);
  System.out.println("推荐");
  System.out.println("为ID=5的用户推荐10部电影");
  for(RecommendedItem recommendedItem:recommended ItemList) {
  System.out.println(recommendedItem);
  }
  本文采用基于Ambari框架下的mahout框架来实现,我们在mapReduce和mahout相比较下,证明了mahout加快了推荐的速度和精度。
  3 实验结果
  3.1 环境搭建
  实验使用的电脑是小米Air 13.3,windows10系统,处理器为:i7-7500U CPU @2.70GHZ 2.90GHZ,内存为8G,mahout版本为0.9.0。
  (1)处理数据集:实验采用公开的MovieLens1M电影数据集,该数据集有1000万多条记录,包含72000名用户对于10000多部电影的评分。该数据集中含有movies.dat,ratings.dat和tags.dat 3个文件;
  (2)然后通过java编写程序分析ratings.dat中的数据,得出基于用户的协同过滤比较适合该数据集。
  3.2 推荐策略
  在本文中,我将采取两种常用的推荐指标来评价推荐算法的好坏。一种是余弦相似度方法,另一种是平均绝对误差MAE。其中余弦相似度是空间中两个向量夹角的余弦值作为衡量两个个体间(用户或者项目)差异的大小。余弦值越接近1,就说明夹角越接近0度,也就是两个向量越相似。   相似度公式为:cos(θ)=                        (1)
  通過计算两个向量之间的夹角来衡量两个向量的相似度,角度越小说明相似度越高。而MAE的值越小,表明算法的推荐精度越高。这种方法就是衡量推荐与真实的用户之间的偏差如式(2):
  MAE=|yi-ti|                                  (2)
  其中,yi表示预测值,ti表示真实值。一般来说,平均绝对误差越小,推荐结果越准确,系统性能就越好。
  3.3 实验结果对比
  (1)从上面选取好的数据集中分别选取数据集为1000,5000,10000,20000、40000和60000作为6组实验数据,分别用余弦相似度和本文的基于mahout的方法进行MAE值比较。实验证明,数据集越稀疏,MAE值就越大,也就是表明数据越多,MAE值也就越小。也可以看出本文的方法和传统的余弦相似度的方法来比较,本文的方法更够提高推荐质量。
  (2)接下来分析相同条件下的协同过滤算法的运行时间,我们给出了hadoop和mahout条件下的运行情况。在相同数据集的情况下,基于mahout的CF算法明显比基于hadoop的CF算法快一些;而且在数据集很大的情况下,基于mahout的CF算法时间更少一些。
  4 结语
  本文介绍了传统的推荐算法算法,分析了基于Ambari下的协同过滤算法。实验表明在大规模数据的情况下,采用基于Ambari的协同过滤推荐模型可以提高推荐的效率和精度。
  参考文献
  [1] 何波,潘力.融合内容和改进协同过滤的个性化推荐算法[J].控制工程,2018,25(08):1553-1558.
  [2] 姚静静.基于协同过滤的电影推荐算法研究与实现[D].北京邮电大学,2018.
  [3] 李晓瑜.协同过滤推荐算法综述[J].商丘师范学院学报,2018,34(09):7-10.
  [4] Yejia Zeng,Zehui Qu. Trust-Based Neural Collaborative Filtering[J].Journal of Physics: Conference Series,2019,1229(1).
  Research on Collaborative Filtering Recommendation Algorithm Based on Ambari
  XU Ting-juan
  (Xi'an Polytechnic University, Xi'an Shaanxi  710048)
  Abstract:The traditional Collaborative Filtering (CF) algorithm is one of the most widely used recommendation algorithms at present. However, due to the sparsity and cold start of CF, this paper proposes a CF algorithm based on mahout. The results show that compared with the two traditional CF algorithms, the CF algorithm based on mahout can improve the recommendation time and accuracy.
  Key words:Collaborative filtering; mahout; recommendation algorithm; Taste engine
转载注明来源:https://www.xzbu.com/8/view-15008223.htm