开源推荐系统Mahout介绍

677 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

1、前言

现在开源的推荐系统有很多很多,但大部分都是基于Python、C++的,同时门槛很高,应用到项目里很困难,要费大的精力。Mahout是一个纯Java编写包含协同过滤推荐算法的开源项目,非常适合初学者,或者紧急需求的项目来使用。(PS:本CV战士就是突然接到了要做一个简单的推荐系统的需求,开始恶补推荐系统,最后发现Mahout简直是初学小白的福音。)

2、Mahout简介

Mahout是Apache旗下一个基于Java编写的开源项目,提供一些可扩展的机器学习领域经典算法的实现,包括聚类、分类、推荐过滤等。本篇主要为大家介绍下推荐部分。

Mahout封装的推荐算法主要有:

image.png

3、主要类

  • Preference类: 表示每个用户或者物品的属性, 比如1,101,5.0 表示ID为1的用户对ID为101的物品进行了评分,评分为5.0;

  • DataModel类: 表示所有的数据集合, 即Preference的聚合。DataModel可以从文件或者数据库中读取(PS:仅支持MySQL,其他数据库u要自己继承接口实现);

  • Similarity类: 表示所有Preference之间的相似度, 所有的用户或者物品都通过Similarty建立起了联系;

  • Neighberhood类:邻域,记录每个用户或者物品相似的物品集, 方便后期调用;

  • Recommender类: 推荐算法, 整个推荐系统的核心(PS:也可以自己实现);

代码结构如下:

image.png

Recommender接口主要方法:
1、recommend(long userID, int howMany):给userID推荐howMany个物品
2、recommend(long userID, int howMany, IDRescorer rescorer):给userID推荐howMany个物品,同时可以根据rescorer对推荐结果重新排序。
3、estimatePreference(long userID, long itemID): 当打分为空时,估计用户对物品的打分
4、setPreference(long userID, long itemID, float value): 对用户,物品,分值进行赋值
5、removePreference(long userID, long itemID): 删除用户对物品的打分
6、getDataModel(): 获取推荐数据

4、示例

public class HelloMahout {

 public static void main(String[] args) {

  try {
   String path = HelloMahout.class.getClassLoader().getResource("data/info.csv").getPath();
   //将数据加载到内存中
   DataModel model = new FileDataModel(new File(path));
   //计算相似度,相似度算法有很多种,欧几里得、皮尔逊等。
   UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model);
   //设置邻域数量
   UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(3,userSimilarity, model);
   //使用基于用户的协同过滤推荐
   Recommender recommender = new GenericUserBasedRecommender(model,userNeighborhood, userSimilarity);
   //获取推荐结果
   List<RecommendedItem> recommend = recommender.recommend(1, 5);
   for (RecommendedItem item : recommend) {
    logger.info(item);
   }
  } catch (Exception e) {
   logger.error(e.getMessage() , e );
  }
 }
 
}

5、最后

可以看到使用Mahout做推荐系统,入门真的非常简单。但同时,缺点也很明显,对于推荐算法的实现细节不了解,针对业务改动起来也很复杂。最后,在学习Mahout时,其作者写的《Mahout实战》令我受益匪浅,这里也一并分享给大家。
链接:pan.baidu.com/s/1aqC2OHXH… 提取码:4x5c

好了、本期就先介绍到这里,有什么需要交流的,大家可以随时私信我。😊