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>>保存计算结果
以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推荐算法基础的更多相关文章
- Mahout推荐算法API详解
转载自:http://blog.fens.me/mahout-recommendation-api/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...
- 转】Mahout推荐算法API详解
原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...
- [转]Mahout推荐算法API详解
Mahout推荐算法API详解 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeepe ...
- Mahout推荐算法之SlopOne
Mahout推荐算法之SlopOne 一. 算法原理 有别于基于用户的协同过滤和基于item的协同过滤,SlopeOne采用简单的线性模型估计用户对item的评分.如下图,估计UserB对 ...
- Mahout推荐算法API具体解释【一起学Mahout】
阅读导读: 1.mahout单机内存算法实现和分布式算法实现分别存在哪些问题? 2.算法评判标准有哪些? 3.什么会影响算法的评分? 1. Mahout推荐算法介绍 Mahout推荐算法,从数据处理能 ...
- Mahout推荐算法ItemBased
Mahout推荐的ItemBased 一. 算法原理 (一) 基本的 下面的例子,参见图评分矩阵:表现user,归类为item. 图(1) 该算法的原理: 1. 计算Item之间的相似度. ...
- Mahout推荐算法之ItemBased
Mahout推荐之ItemBased 一. 算法原理 (一) 基本原理 如下图评分矩阵所示:行为user,列为item. 图(1) 该算法的原理: 1. 计算Item之间的相似度. 2. ...
- 从源代码剖析Mahout推荐引擎
转载自:http://blog.fens.me/mahout-recommend-engine/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pi ...
- 转】从源代码剖析Mahout推荐引擎
原博文出自于: http://blog.fens.me/mahout-recommend-engine/ 感谢! 从源代码剖析Mahout推荐引擎 Hadoop家族系列文章,主要介绍Hadoop家族产 ...
随机推荐
- CSS笔记(九)轮廓
参考:http://www.w3school.com.cn/css/css_outline.asp CSS 边框属性 "CSS" 列中的数字指示哪个 CSS 版本定义了该属性. 属 ...
- C#正则表达式编程(四):正则表达式
正则表达式提供了功能强大.灵活而又高效的方法来处理文本.正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式:提取.编辑.替换或删除文本子字符串:或将提取的字符串添加到集合以生成 ...
- Json-lib使用 转载
1.从Object到String 要先用Object对象构造一个JSONObject或者JSONArray对象,然后调用它的toString()方法即可 (1)示例一 1 Book book=new ...
- 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题
方法一: html: <div id="all1"> <div id="left1">1</div> <div id= ...
- Oracle分析函数的项目实践实例
SELECT * FROM SSE2_FLOW_EXPENSE T1 JOIN (SELECT SFEL.*, ROW_NUMBER() OVER(PARATITION BY SFEL.FE_EXPE ...
- Python学习笔记1—模块
模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11 (module11是module的子模块) 例: ...
- (一)MII/MDIO接口详解
本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在10/100模式下和1000M模式下的设计方法. ...
- Android的启动模式(上)
1. 基本介绍 大家平时只要懂一点Android知识的话,都一定会知道,一个应用的组成,往往包含了许多的activity组件,每个activity都应该围绕用户的特定动作进行跳转设计.比如说,一个电话 ...
- hdu 4521 小明系列问题——小明序列(线段树 or DP)
题目链接:hdu 4521 本是 dp 的变形,却能用线段树,感觉好强大. 由于 n 有 10^5,用普通的 dp,算法时间复杂度为 O(n2),肯定会超时.所以用线段树进行优化.线段树维护的是区间内 ...
- 闲谈--心态 (zhuan)
http://blog.csdn.net/marksinoberg/article/details/53261034 ***************************************** ...