Mahout推荐算法基础

Mahout主要推荐算法

 

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

GenericUserBasedRecommender

算法:

1.基于用户的相似度

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

特点:

1.易于理解

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

 

GenericItemBasedRecommender

算法:

1.基于item的相似度

特点:

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

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

 

SlopeOneRecommenderitemBased

算法:

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

 

Mahout推荐其他相关数据结构

 

偏好:

推荐算法的基础

Preference

用户偏好接口

具体实现

GenericPreference包含用户idlongItem idlong偏好值float

BooleanPreference 包含用户Id Itemid

 

偏好数组

PreferenceArray

Preference 数组 但是以更节约内存的方式表达(只保留一个UseID或者ItemID

包含以下实现

BooleanItemPreferenceArray保存一个ItemID和一个UserID数组

BooleanUserPreferenceArray保存一个UserID和一个ItemID数组

GenericItemPreferenceArray保存一个ItemID和一个UserID数组和一个偏好值数组(与UserID按顺序一一对应)

GenericUserPreferenceArray保存一个ItemID和一个UserID数组和一个偏好值数组(与ItemID按顺序一一对应)

 

邻居

Neighborhood

基于用户推荐时 考虑到计算量和排除不相干人物影响等方面因素一般只考虑与推荐用户相似程度在一定范围内的用户的影响

包含以下实现

NearestNUserNeighborhood:将相似用户排序取最相关的前n个用户

ThresholdUserNeighborhood:基于用户相似程度门限,只有用户相似程度在一定门限上的用户参与推荐计算

CachingUserNeighborhood:同前 相似用户缓存防止重复计算

 

推荐测试相关

以下接口为测试推荐系统使用,一般需要自己实现

DataModelBuilder 创建数据接口 输入测试数据

RecommenderBuilder 创建推荐系统

RecommenderEvaluator 推荐效果评价

可以参考

examples\src\main\java\org\apache\mahout\cf 源码目录下的实现

 

SlopeOne算法中的评分偏差

DiffStorage

Slopeone算法使用的评分偏差接口

包含以下实现

MemoryDiffStorage 基于内存保存偏差

FileDiffStorage 基于文件保存偏差

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值