推荐引擎(三)

Apache Mahout

Apache Software Foundation (ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序,并且,在 Mahout 的最近版本中还加入了对 Apache Hadoop 的支持,使这些算法可以更高效的运行在云计算环境中。

Apache Mahout 中协同过滤推荐实现的Taste组件图

Taste数据模型:

DataModel:DataModel是用户喜好信息的抽象接口,它的具体实现支持从指定类型的数据源抽取用户喜好信息。在Mahout0.5中,Taste 提供 JDBCDataModel 和 FileDataModel两种类的实现,分别支持从数据库和文件文件系统中读取用户的喜好信息。对于数据库的读取支持,在Mahout 0.5中只提供了对MySQL和PostgreSQL的支持,如果数据存储在其他数据库,或者是把数据导入到这两个数据库中,或者是自行编程实现相应的类。

UserSimilarit和ItemSimilarity:前者用于定义两个用户间的相似度,后者用于定义两个项目之间的相似度。Mahout支持大部分驻留的相似度或相关度计算方法,针对不同的数据源,需要合理选择相似度计算方法。

UserNeighborhood:在基于用户的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的,该组件就是用来定义与目标用户相邻的“邻居用户”。所以,该组件只有在基于用户的推荐算法中才会被使用。

Recommender:Recommender是推荐引擎的抽象接口,Taste 中的核心组件。利用该组件就可以为指定用户生成项目推荐列表。

实现推荐:Recommender

(1) User CF

基于 Mahout 实现 User CF

DataModel model = new FileDataModel(new File("preferences.dat")); 
UserSimilarity similarity = new PearsonCorrelationSimilarity(model); 
UserNeighborhood neighborhood = new NearestNUserNeighborhood(100, similarity, model); 
Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); 

(2) Item CF
基于 Mahout 实现 Item CF

DataModel model = new FileDataModel(new File("preferences.dat")); 
ItemSimilarity similarity = new PearsonCorrelationSimilarity(model); 
Recommender recommender = new GenericItemBasedRecommender(model, similarity);

(3) Slope One

User CF 和 Item CF 是最常用最容易理解的两种 CF 的推荐策略,但在大数据量时,它们的计算量会很大,从而导致推荐效率较差。Mahout 提供了一种更加轻量级的 CF 推荐策略:Slope One。

Slope One 的核心优势是在大规模的数据上,它依然能保证良好的计算速度和推荐效果。

基本原理:将用户的评分之间的关系看作简单的线性关系:Y = mX + b;当 m = 1 时就是 Slope One。


基于 Mahout 实现 Slope One:

//In-Memory Recommender 
DiffStorage diffStorage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false, Long.MAX_VALUE));
Recommender recommender = new SlopeOneRecommender(model, Weighting.UNWEIGHTED, Weighting.UNWEIGHTED, diffStorage); 
//Database-based Recommender 
AbstractJDBCDataModel model = new MySQLJDBCDataModel(); 
DiffStorage diffStorage = new MySQLJDBCDiffStorage(model); 
Recommender recommender = new SlopeOneRecommender(model, Weighting.WEIGHTED, Weighting.WEIGHTED, diffStorage); 

链接:

http://www.edu.xxt.cn/articleFront/articleDetailed.action?article.id=2964

http://www.ibm.com/developerworks/cn/java/j-lo-mahout/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值