首页 > 其他 > 详细

Mahout推荐的简单实现

时间:2015-09-20 07:00:12      阅读:225      评论:0      收藏:0      [点我收藏+]

由于course project需要,我最近看了一下Mahout的推荐实现。最初看到的是这篇文章。里面的代码毫无问题,不过引包的时候错误重重。因此重新写一下,希望能帮助到有同样问题的同学。废话不多说,上代码:

public static void main(String[] args) throws Exception {
		
	System.out.println("1");
	File f = new File("C:/Users/Administrator/Desktop/test.txt");
	System.out.println("2");

	//导入数据,计算相似度
	DataModel model = new FileDataModel(f);
	UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
	//根据数据与相似度,再计算K紧邻
	UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,
				similarity, model);
	//根据以上三个数据建立推荐引擎			
	Recommender recommender = new GenericUserBasedRecommender(model,
				neighborhood, similarity);
	//直接调用引擎,为用户1推荐两个ItemID。			
	List<RecommendedItem> recommendations = recommender.recommend(1, 2);
	
	for (RecommendedItem recommendation : recommendations) {
			System.out.println(recommendation);
		}
	}


代码上来看,跟那位同学的完全一样,我就直接粘贴过来的。引入的包与结果如下:

技术分享

技术分享


既然我们已经知道了如何搭建最简单的Mahout推荐模型,那现在我们就来稍微详细地了解一下Mahout吧。Mahout属于Hadoop家族,给我的理解,只要能够使用MapReduce这种功能就算是Hadoop家族。Mahout能做三种事:聚类,分类以及推荐。我们使用的推荐功能,能够以两种策略推荐。假设说我们想给Amazon上的用户Tom推荐一些商品,UserCF就是找出与Tom的口味相似的用户,看看他们都喜欢什么,然后将这些东西推荐给Tom。ItemCF就是先看看Tom喜欢什么,然后看看对于这些东西有没有相似的物品能够推荐。

技术分享

这张图很好地解释了刚刚写的代码中各个步骤之间的依赖关系。我是从Mahout学习路线里面找到的。ItemCF的代码如下。输入的是某个商品的id,得到的是跟这个商品类似的id。

//1.导入数据
DataModel dm = new FileDataModel(new File("data/user_preferences.csv"));
//2.计算物品之间的相似度
ItemSimilarity sim = new LogLikelihoodSimilarity(dm);
//3.构建ItemBase的推荐引擎
GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);
//4.得到推荐列表
List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemID, size);
for (RecommendedItem recommendation : recommendations) {
			System.out.println(recommendation);
		}
DataModel dm = new FileDataModel(f);
		ItemSimilarity sim = new LogLikelihoodSimilarity(dm);
		Recommender recommender = new GenericItemBasedRecommender(dm, sim);
		Recommender cachingRecommender=new CachingRecommender(recommender);
		List<RecommendedItem> recommendations = cachingRecommender.recommend(1, 7);
		for (RecommendedItem recommendation : recommendations) {
			System.out.println(recommendation);
		}

这段代码输入的是user的ID以及需要的推荐数,能够综合考虑当前用户喜欢的商品,然后给出一个推荐列表。























本文出自 “指尖轻飞” 博客,谢绝转载!

Mahout推荐的简单实现

原文:http://mengcao.blog.51cto.com/9395052/1696438

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!