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

Mahout的一些推荐算法相关推荐

  1. mahout java api_Mahout推荐算法API详解

    前言 用Mahout来构建推荐系统,是一件既简单又困难的事情.简单是因为Mahout完整地封装了"协同过滤"算法,并实现了并行化,提供非常简单的API接口:困难是因为我们不了解算法 ...

  2. 推荐算法---FM,协同过滤

    文章目录 目录 1.FM算法产生背景 2.FM算法模型 3.FM算法VS其他算法 4.推荐算法总结 目录 1.FM算法产生背景 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接 ...

  3. Apache Mahout中推荐算法Slope one源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 关于推荐引擎 如今的互联网中,无论是电子商务还是社交网络,对数据挖掘的需求都越来越大了,而推荐引擎正是数据挖掘完美体现:通过分 ...

  4. Mahout推荐算法API详解

    Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, ...

  5. 协同过滤算法_基于Mahout的协同过滤推荐算法

    1协同过滤 基于物品的协同过滤 对物品进行相似度计算,然后再进行推荐. 基于用户的协同过滤 基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢,并对这些喜好进行度量和打分.根据不 ...

  6. mahout实现协同过滤推荐算法

    前述 mahout支持分类.聚类.推荐等多种功能,这里不展开阐述,只描述协同过滤的使用. 不明白协同过滤是如何计算的同学可以参考这篇文章,通俗易懂. 点击这里 maven依赖 <!-- mhou ...

  7. mahout 推荐算法 java_Mahout推荐算法API详解

    前言 用Mahout来构建推荐系统,是一件既简单又困难的事情.简单是因为Mahout完整地封装了"协同过滤"算法,并实现了并行化,提供非常简单的API接口:困难是因为我们不了解算法 ...

  8. 基于Mahout实现协同过滤推荐算法的电影推荐系统

    1 Mahout介绍 Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更 ...

  9. Mahout之——Mahout推荐算法API详解

    前言 用Mahout来构建推荐系统,是一件既简单又困难的事情.简单是因为Mahout完整地封装了"协同过滤"算法,并实现了并行化,提供非常简单的API接口:困难是因为我们不了解算法 ...

最新文章

  1. Apache htaccess 重写假设文件存在!
  2. poj1730Pollard分解
  3. LPC55S69 MicroPython模组和库函数
  4. JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】
  5. 精读《REST,GraphQL,Webhooks gRPC 如何选型》
  6. 使用JavaScript解答2018第九届蓝桥杯C/C++省赛A组试题
  7. Blockquotes,引用,html里面,经常用到的一个!
  8. 多种时间格式字符串转换为Date对象
  9. 读书笔记2013第3本:《无价》
  10. Linux安装JDK(rpm)
  11. 【es】ELASTICSEARCH之自定义JAVA代码的安全策略管理
  12. Android Device Monitor 文件管理的常见问题
  13. Excel中数据截取
  14. 搜索优化之四叉树算法(三)
  15. Java Excel导出(包含图片) —— Easypoi
  16. 期刊评价查询+机器人领域期刊排名
  17. Android性能优化方案
  18. 网络线综合布线接地注意事项
  19. HTML5+CSS大作业——个人博客-功能齐全(48页) html大学生网站开发实践作业
  20. 【算法】第三届全国大学生算法设计与编程挑战赛(冬季赛)

热门文章

  1. 去中心化数据库Bluzelle公布2021年路线图,将于2月3日上线主网
  2. TokenInsight:BTC新增流量稳定,但泡沫指数已超17年峰值
  3. SAP License:BCS进阶第五篇-BCS合并现金流量表的实现
  4. SAP License:BCS进阶第三篇-BCS合并过程(一)
  5. 特征做得好,模型没烦恼
  6. 基于画像推荐系统设计(离线+实时)
  7. Task04:集合运算-表的加减法和join等-天池龙珠计划SQL训练营
  8. 在Excel中引用Visual Studio.NET 2008编写的COM组件
  9. adb shell top 使用
  10. centos安装配置tftp服务器