由于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以及需要的推荐数,能够综合考虑当前用户喜欢的商品,然后给出一个推荐列表。
时间: 2024-10-25 11:50:32