mahout推荐12-相似度方法汇总

将各个计算用户相似度的方法弄过来了,可以参考下。实际运行代码

数据文件 intro.csv内容: 直接复制就行了

1,101,5.0
1,102,3.0
1,103,2.5

2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0

3,101,2.5
3,104,4.0
3,105,4.5
3,107,5.0

4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0

5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0

代码:都带有注释的。结果就不发了。

package mahout;

import java.io.File;

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.common.Weighting;
import org.apache.mahout.cf.taste.eval.DataModelBuilder;
import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
import org.apache.mahout.cf.taste.impl.common.FastByIDMap;
import org.apache.mahout.cf.taste.impl.eval.AverageAbsoluteDifferenceRecommenderEvaluator;
import org.apache.mahout.cf.taste.impl.model.GenericBooleanPrefDataModel;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.CachingUserSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.SpearmanCorrelationSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.TanimotoCoefficientSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.PreferenceArray;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.apache.mahout.common.RandomUtils;
/**
 *
 * @author Administrator
 *
 */
public class TestRecommenderEvaluator2 {

	public static void main(String[] args) throws Exception {
		//强制每次生成相同的随机值,生成可重复的结果
		RandomUtils.useTestSeed();
		//数据装填,无偏好值的处理
		//DataModel dataModel = new GenericBooleanPrefDataModel(GenericBooleanPrefDataModel.toDataMap(new FileDataModel(new File("data/ua.base"))));
		DataModel dataModel = new FileDataModel(new File("data/intro.csv"));

		//推荐评估,使用平均值
		RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();
		//推荐评估,使用均方差
		//RecommenderEvaluator evaluator = new RMSRecommenderEvaluator();
		//用于生成推荐引擎的构建器,与上一例子实现相同
		RecommenderBuilder builder = new RecommenderBuilder() {

			public Recommender buildRecommender(DataModel model) throws TasteException {
				// TODO Auto-generated method stub
				//用户相似度,多种方法
				//皮尔逊相关系数,未引入权重,同余弦相似度
				//UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
				// 皮尔逊相关系数,引入了权重
				//UserSimilarity similarity = new PearsonCorrelationSimilarity(model,Weighting.WEIGHTED);
				// 欧式距离定义相似度
				//UserSimilarity similarity = new EuclideanDistanceSimilarity(model);
				// 斯皮尔曼相关系数
				//UserSimilarity similarity = new SpearmanCorrelationSimilarity(model);
				// 斯皮尔曼相关系数 缓存级别的
				//UserSimilarity similarity = new CachingUserSimilarity(new SpearmanCorrelationSimilarity(model), model);
				// 谷本系数(忽略偏好值的)
				// UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
				// 对数似然法
				UserSimilarity similarity = new LogLikelihoodSimilarity(model);
				//用户邻居
				UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
				//一个推荐器
				return new GenericUserBasedRecommender(model, neighborhood, similarity);
			}
		};
		/*DataModelBuilder modelBuilder = new DataModelBuilder() {

			public DataModel buildDataModel(FastByIDMap<PreferenceArray> arg0) {
				// TODO Auto-generated method stub
				return new GenericBooleanPrefDataModel(GenericBooleanPrefDataModel.toDataMap(arg0));
			}
		};*/
		//推荐程序评估值(平均差值)训练90%的数据,测试数据10%,《mahout in Action》使用的是0.7,但是出现结果为NaN
		double score = evaluator.evaluate(builder, null, dataModel, 0.9, 1.0);
		System.out.println(score);
	}
}

mahout推荐12-相似度方法汇总

时间: 2024-10-30 00:19:44

mahout推荐12-相似度方法汇总的相关文章

从源代码剖析Mahout推荐引擎

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

【转载】机器学习中的相似性度量,方法汇总对比

机器学习中的相似性度量,方法汇总对比 人工智能  林  1周前 (01-10)  876℃  0评论 作者:苍梧 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance).采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否. 本文的目的就是对常用的相似性度量作一个总结. 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏距离 6. 马

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推荐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

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

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

mahout推荐4-评估GroupLens数据集

使用GroupLens数据集ua.base 这是一个tab分割的文件,用户Id,物品Id,评分(偏好值),以及附加信息.可用吗?之前使用的是CSV格式,现在是tsv格式,可用,使用FileDataModel 对mahout推荐2中的评估程序使用这个数据集测试: package mahout; import java.io.File; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.

mahout推荐3-评估查准率和查全率

通过估计偏好值来生成推荐结果并非绝对必要.给出一个从优到劣的推荐列表对于许多场景都够用了,而不必包含估计的偏好值. 查准率:在top结果中相关结果的比例 查全率:所有相关结果,包含在top结果中的比例 对上个例子进行测试: package mahout; import java.io.File; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.taste.eval.IRSta

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

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