Mahout推荐的简单实现

由于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

Mahout推荐的简单实现的相关文章

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情.简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口:困难是因为我们不了解算法细节,很难去根据业务的场景进行算法配置和调优. 本文将深入算法API去解释Mahout推荐算法底层的一些事. 1. Mahout推荐算法介绍 Mahoutt推荐算法,从数据处理能力上,可以划分为2类: 单机内存算法实现 基于Hadoop的分步式算法实现 1). 单机内存算法实现 单机内存算法实现:就是在单机下运行的算法

Mahout推荐算法之SlopOne

Mahout推荐算法之SlopOne 一.       算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分.如下图,估计UserB对ItemJ的偏好 图(1) 在真实情况下,该方法有如下几个问题: 1.  为什么要选择UserA计算? 2.  对大量稀疏的情况如何处理,而这种情况是最为普遍的. 图(2) Item1和item2的相似度:((5-3)+(3-4))/2=0.5 Item1和Item3的相似度:(5-2)/1=3 L

Mahout推荐算法API详解【一起学Mahout】

阅读导读: 1.mahout单机内存算法实现和分布式算法实现分别存在哪些问题? 2.算法评判标准有哪些? 3.什么会影响算法的评分? 1. Mahout推荐算法介绍 Mahout推荐算法,从数据处理能力上,可以划分为2类: 单机内存算法实现 基于Hadoop的分步式算法实现 1). 单机内存算法实现 单机内存算法实现:就是在单机下运行的算法,是由cf.taste项目实现的,像我们熟悉的UserCF,ItemCF都支持单机内存运行,并且参数可以灵活配置.单机算法的基本实例,请参考文章:用Maven

Mahout推荐算法API具体解释【一起学Mahout】

阅读导读: 1.mahout单机内存算法实现和分布式算法实现分别存在哪些问题? 2.算法评判标准有哪些? 3.什么会影响算法的评分? 1. Mahout推荐算法介绍 Mahout推荐算法,从数据处理能力上,能够划分为2类: 单机内存算法实现 基于Hadoop的分步式算法实现 1). 单机内存算法实现 单机内存算法实现:就是在单机下执行的算法,是由cf.taste项目实现的,像我们熟悉的UserCF,ItemCF都支持单机内存执行.而且參数能够灵活配置.单机算法的基本实例.请參考文章:用Maven

从源代码剖析Mahout推荐引擎

本文来自于:http://blog.fens.me/mahout-recommend-engine/ 前言 Mahout框架中cf.taste包实现了推荐算法引擎,它提供了一套完整的推荐算法工具集,同时规范了数据结构,并标准化了程序开发过程.应用推荐算法时,代码也就7-8行,简单地有点像R了.为了使用简单的目标,Mahout推荐引擎必然要做到精巧的程序设计. 本文将介绍Mahout推荐引擎的程序设计. 目录 Mahout推荐引擎概况 标准化的程序开发过程 数据模型 相似度算法工具集 近邻算法工具

[转]Mahout推荐算法API详解

Mahout推荐算法API详解 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等. 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占

mahout实现基于用户的Mahout推荐程序

/* * 这里做的是一个基于用户的Mahout推荐程序 * 这里利用已经准备好的数据. * */ package byuser; import java.io.File; import java.io.IOException; import java.util.List; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.taste.impl.model.file.FileDa

mahout推荐1

1.准备数据: intro.csv: 1,101,5.01,102,3.01,103,2.5 2,101,2.02,102,2.52,103,5.02,104,2.0 3,101,2.53,104,4.03,105,4.53,107,5.0 4,101,5.04,103,3.04,104,4.54,106,4.0 5,101,4.05,102,3.05,103,2.05,104,4.05,105,3.55,106,4.0 2.编程实现: 目的:为用户1推荐一件商品看看: package maho

mahout推荐2

设计好了一个推荐程序,如何来完成评估呢? 一般是使用一个真实数据的样例作为测试数据来仿真,来看估计值和实际值的差别,0.0意味着完美的估计,就是没有差别. 一是使用平均差值(直观,易于理解),一是使用均方根. 针对mahout推荐1的推荐程序进行评估: package mahout; import java.io.File; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.t