Mahout推荐算法基础

转载自(http://www.geek521.com/?p=1423)

Mahout推荐算法分为以下几大类

GenericUserBasedRecommender

算法:

1.基于用户的相似度

2.相近的用户定义与数量

特点:

1.易于理解

2.用户数较少时计算速度快

GenericItemBasedRecommender

算法:

1.基于item的相似度

特点:

1.item较少时就算速度更快

2.当item的外部概念易于理解和获得是非常有用

SlopeOneRecommender(itemBased)

算法:

1基于SlopeOne算法(打分差异规则)

特点

速度快

需要预先计算

当item数目十分少了也很有效

需要限制diffs的存储数目否则内存增长太快

SVDRecommender (item-based)

算法

基于支持向量机(item的特征以向量表示,每个维度的评价值)

特点

需要预计算

推荐效果佳

KnnItemBasedRecommender (item-based)

类似于GenericUserBasedRecommender 中基于相似用户的实现(基于相似的item)

与GenericItemBasedRecommender 的主要区别是权重方式计算的不同(but, the weights are not the results of some similarity metric. Instead, the algorithm calculates the optimal set of weights to use between all pairs of items=>看的费劲)

TreeClusteringRecommender

算法

基于树形聚类的推荐算法

特点

用户数目少的时候非常合适

计算速度快

需要预先计算

基于模型的推荐算法、基于满意度得推荐算法(未实现)

Mahout中的数据输入

DataModel

以下包含

GenericDataModel

数据接口类 基于内存

内部使用FastByIDMap 保存PreferenceArray,在PreferenceArray内保存用户->Item的评价值

GenericBooleanPrefDataModel.

基于内存的数据接口类

但是无用户偏好值

使用FastByIDMap<FastIDSet>为用户或者Item保存相关的Item或者用户。

FileDataModel

基于文件的数据接口内,内部使用GenericDataModel 保存实际的用户评价数据

增加了压缩文件(.zip .gz)等文件类型的支持

支持动态更新(更新文件文件名必须保存为一定的格式 例如 foo.txt.gz 后续更新文件必须为foo.1.txt.gz)

查了以下代码 好像是自定义时间间隔后可以更新,但是好像是全部更新(以后看代码)

JDBCDataModel

基于数据库的数据接口 目前已经实现MySQLJDBCDataModel(支持MySQL 5.x)可以使用MysqlDataSource生成MySQLJDBCDataModel

注:0.7版本里面没有找到MySQLJDBCDataModel类多了一个MySQLJDBCIDMigrator

不知道关系如何

PlusAnonymousUserDataModel.

用于匿名用户推荐的数据类 将全部匿名用户视为一个用户(内部包装其他的DataModel类型)

Mahout中的相似度计算

主要按照基于User,基于Item等

GenericItemSimilarity包含内部类 GenericItemSimilarity.ItemItemSimilarity

GenericUserSimilarity包含内部类 GenericUserSimilarity.UserUserSimilarity

以内存方式保存相似度计算结果 使用FastByIDMap<FastByIDMap<Double>>保存计算结果

CachingItemSimilarity

CachingUserSimilarity

以cache方式保存相似度计算结果防止每次请求是重复计算

内部使用 Cache<LongPair,Double> similarityCache保存相似度

与 GenericUserSimilarity用法和区别暂时看不懂

Mathout中实现的基于不同算法相似度度量的:

PearsonCorrelationSimilarity 皮尔逊距离

EuclideanDistanceSimilarity 欧几里德距离

CosineMeasureSimilarity   余弦距离(0.7变成了 UncenteredCosineSimilarity

SpearmanCorrelationSimilarity 斯皮尔曼等级相关

TanimotoCoefficientSimilarity 谷本相关系数

LogLikelihoodSimilarity 一般好于TanimotoCoefficientSimilarity(不懂)

CityBlockSimilarity基于曼哈顿距离

相似度使用的典型用法

UserSimilarity similarity = new CachingUserSimilarity(

new SpearmanCorrelationSimilarity(model), model);

对缺失数据的处理

PreferenceInferrer 数据丢失或者数据太少时可能用到 具体实现有 AveragingPreferenceInferrer 以平均值填充缺失数据

一般来说PreferenceInferrer除了增加计算量对推荐结果无任何影响(缺失值根据已有数据得出)所以一般只用于研究领域。

聚类的相似度

ClusterSimilarity

聚类的相似度用于两个不同的聚类之间的距离(类似坐标系内的距离)

目前聚类之间的距离计算只包含以下两个实现(暂时没有更好的实现算法)

NearestNeighborClusterSimilarity  计算两个聚类中所有项距离中的最小距离

FarthestNeighborClusterSimilarity  计算两个聚类中所有项距离中的最大距离

时间: 2024-10-09 06:51:44

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推荐算法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推荐算法编程实践

引言 Taste是曾经风靡一时的推荐算法框架,后来被并入Mahout中,Mahout的部分推荐算法基于Taste实现. 下文介绍基于Taste实现最常用的UserCF和ItemCF. 本文不涉及UserCF和ItemCF算法的介绍,这方面网上资料很多,本文仅介绍如何基于Mahout编程实现. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/39183839 步骤一:构建数据模型 UserCF和ItemCF算法的输入数据是用户

Mahout推荐算法之ItemBased

Mahout推荐之ItemBased 一.   算法原理 (一)    基本原理 如下图评分矩阵所示:行为user,列为item. 图(1) 该算法的原理: 1.  计算Item之间的相似度. 2.  对用户U做推荐 公式(一) Map tmp ; Map tmp1 ; for(item a  in userRatedItems){ rate  =userforItemRate(a) ListsimItem =getSimItem(a); For(Jin simItem){ Item b =j;

Mahout学习系列之推荐算法

参考: 从源代码剖析Mahout推荐引擎 mahout 推荐系统示例 Mahout推荐算法API详解 使用Mahout实现协同过滤 Mahout的taste推荐系统里的几种Recommender分析 前言:Mahout框架集成了大量的常用的机器学习算法,且都支持在Hadoop分布式环境下运行,很大程度上节约了数据处理的时间成本,其中的推荐算法引擎有cf.taste包实现,它提供了一套完整的推荐算法工具库,同时规范了数据结构,并标准了程序开发过程. 1:Mahout推荐算法介绍 2:Taste接口

mahout入门指南之mahout单机版推荐算法

鄙人最近在研究mahout,网上找了一些入门资料来看,发现都整理的比较乱.折腾了一番,终于搞清楚了.为了让新手们较快入门,决定总结分享一下,写此入门指南. mahout是什么? mahout是一个机器学习库,里面实现了一些算法,比如推荐算法,聚类算法. 实现方式有单机内存版,也有分布式(hadoop和spark). mahout如何快速入门? 个人觉得单机版的mahout推荐系统demo比较适合初学者.网上有一些入门资料其实也是单机版的算法,但是那些资料都要配置很多"不必要的"的环境,