Mahout推荐算法基础

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

 

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

GenericUserBasedRecommendersql

算法:数据库

1.基于用户的类似度apache

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

特色:idea

1.易于理解rest

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

 

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  计算两个聚类中全部项距离中的最大距离

 

作个小推广:程序员常常久坐,颈椎毛病比较多,特别推荐ventry颈椎保健枕

相关文章
相关标签/搜索