`

hadoop-mahout 核心算法总结

阅读更多

其实大家都知道hadoop为我们提供了一个大的框架,真正的算法还是要程序员自己去实现,所以了解hadoop大概架构之后就要了解一些基本的算法。

mahout--可以理解为hadoop的驾驶员。学习它一定要从《mahout in action》入手,在此我记录下一些学习的笔记仅供参考。

 

第一节:基于用户的推荐算法

GenericUserBasedRecommender 算法原理

官方解释:

for every other user w 
  compute a similarity s between u and w 
  retain the top users, ranked by similarity, as a “neighborhood” n 
for every item i that some user in n has a preference for,  
      but that u has no preference for yet 
  for every other user v in n that has a preference for i 
    compute a similarity s between u and v 
    incorporate v's preference for i, weighted by s, into a running average  

一:所有用户与用户U做相似性计算,计算出其邻居集合 n

 

二:循环所有的商品,计算出邻居集合n有兴趣且用户U没有兴趣的商品集合items

三:循环items和邻居集合n,计算出邻居和用户u 的相似度s集合

四:返回s集合并根据相似度排序。
 

 

similarity 几个主要算法

在此只做主要介绍,感兴趣的朋友可以研究下具体公式

  1、皮尔逊相关系数

        用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。两个变量相关性越高,则系数趋近于1,两个变量相互独立,则系数为0,两系数对立,则系数趋近于0。我们看下书本上的例子:

 

 从上图可以看出 user1 和 user4的相关性 比 user1 和user5的相关性高,这似乎有一些counterintuitive。

 还有user1和user3是没有相关系数的,这是因为算法程序的规则。

还有一种情况下相关性是不计算的,如果一个user 对所有的item 的perference value相同。

书中介绍这种算法不好不坏,仅仅让你理解一下它的工作原理就好了。

 

 2、欧几里德距离算法

      该算法是基于两个user之间的distance,想象用户的坐标就是用户的preference values,距离越小,则说明用户相似度越高。该算法返回值为 1/(1+d),所以当算法返回值为1时,表示两用户相似度完全相等。看下书本上的例子



 可以看出该算法和皮尔逊系数有相同的问题,users 1 and 4 have a higher similarity than users 1 and 5.

 

3、余弦测量相似度算法

     余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。我们需要立即的就是余弦值在-1到1之间,角度越小(相似度越高)越趋近于1。

 4、

其余更多算法请参考  http://www.cnblogs.com/shipengzhi/articles/2540382.html

 

 第二节:基于物品的推荐算法

GenericItemBasedRecommender 算法原理

for every item i that u has no preference for yet 
  for every item j that u has a preference for 
    compute a similarity s between i and j 
    add u's preference for j, weighted by s, to a running average  
return the top items, ranked by weighted average 
 

 一:循环所有用户没有偏好的物品  i

 二:循环所有用户有偏好的物品  j

 三:计算i和j的相似度 s

 四:为物品j赋予 相似度

 五:返回所有物品按权重排序

 

相似度相关算法例如

public Recommender buildRecommender(DataModel model)  
    throws TasteException { 
  ItemSimilarity similarity = new PearsonCorrelationSimilarity(model); 
  return new GenericItemBasedRecommender(model, similarity); 
} 

    可以看到这里PearsonCorrelationSimilarity 仍然可以使用,因为它实现了ItemSimilarity接口,ItemSimilarity接口完全类似UserSimilarity。

    GenericItemBasedRecommender构建比GenericUserBasedRecommender简单,它只需要一个数据模型datamodel,一个相似度算法,而不需要ItemNeighborhood,因为在算法的一开始,用户就已经表达了自己的偏好,这就类似于ItemNeighborhood。

    在物品较用户少的情况下,基于物品的推荐算法将运行的更快

 

 第三节:Slope-one 推荐算法

 

对于上面的数据,首先计算每个item之间的相似性,形成item-item之间的相似度关系。相似度的计算过程不是采用余弦相似度公式等方法,而是根据用户中共同评分的item的差值进行计算的。

 

相似度计算

例如,item 1与item 2的相似度为 (2+(-1))/2=0.5。但是item 2与item 1之间的相似度为-0.5,整个相似度矩阵不是对称矩阵。而是反对称矩阵。为了后续更新方便,可以将分子与分母分别存储,用的时候再计算相似度。同样的方法,可以计算item1与item 3之间的相似度3。

 

预测评分

预测的时候,简单的加权是对两个item共同评分的数量,例如item1与item2有2个user共同评分了,则权重是2,同样的item1与item3的权重是1。

Lucy对item 1的预测评分公式如下:

((2+0.5)*2+(3+5)*1)/(2+1)=4.33

在mahout中有这个方法的实现。
 

 第三节:协同过滤之同现矩阵

测试数据集:small.csv


1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0
3,101,2.0
3,104,4.0
3,105,4.5
3,107,5.0
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0

1). 建立物品的同现矩阵
按用户分组,找到每个用户所选的物品,单独出现计数及两两一组计数。


      [101] [102] [103] [104] [105] [106] [107]
[101]   5     3     4     4     2     2     1
[102]   3     3     3     2     1     1     0
[103]   4     3     4     3     1     2     0
[104]   4     2     3     4     2     2     1
[105]   2     1     1     2     2     1     1
[106]   2     1     2     2     1     2     0
[107]   1     0     0     1     1     0     1

2). 建立用户对物品的评分矩阵
按用户分组,找到每个用户所选的物品及评分

       U3
[101] 2.0
[102] 0.0
[103] 0.0
[104] 4.0
[105] 4.5
[106] 0.0
[107] 5.0

3). 矩阵计算推荐结果
同现矩阵*评分矩阵=推荐结果

alogrithm_1



  
  
  • 大小: 15.1 KB
  • 大小: 17 KB
  • 大小: 23.8 KB
分享到:
评论
1 楼 di1984HIT 2015-05-04  
学习了。 

相关推荐

    Mahout in action 中文版 高清 完整

    Mahout作为Apache的开源机器学习项目,把推荐系统、分类和聚类等领域的核心算法浓缩到了可扩展的现成的库中。使用Mahout,你可以立即在自己的项目中应用亚马逊、Netflix及其他互联网公司所采用的机器学习技术。, ...

    Hadoop实战(第2版)

    ·85个实战和测试技术 ·真实的场景,实用的解决方案 ·如何整合MapReduce和R前言 致谢关于本书 第1 部分 背景和基本原理1 跳跃中的Hadoop1.1 什么是Hadoop 1.1.1 Hadoop 的核心组件1.1.2 Hadoop 生态圈...

    Hadoop从业者为什么需要Spark?

    5,Mahout前一阶段表示从现在起他们将不再接受任何形式的以MapReduce形式实现的算法,另外一方面,Mahout宣布新的算法基于Spark; 6,Cloudera的机器学习框架Oryx的执行引擎也将由Hadoop的MapReduce替换成Spark; ...

    Hadoop海量网络数据处理平台的关键技术

    4.提出了一种基于节点动态性能推断的任务分配算法海量网络数据的处理分析是海量网络数据处理平台最为核心的功能,数据处理的效率关系到整个海量网络数据处理平台的性能,因此对于该平台数据处理性能的优化是本文需要...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    1.1.1 Hadoop 的核心组件 1.1.2 Hadoop 生态圈 1.1.3 物理架构 1.1.4 谁在使用Hadoop 1.1.5 Hadoop 的局限性 1.2 运行Hadoop 1.2.1 下载并安装Hadoop 1.2.2 Hadoop 的配置 1.2.3 CLI ...

    project-rhino:增强了针对Apache Hadoop生态系统的数据保护

    犀牛计划 随着Hadoop扩展到新市场并看到新的用例面临安全性和合规性挑战,必须在所有Hadoop项目和...Mahout:机器学习和数据挖掘算法库 Flume:收集和导入日志和事件数据 Sqoop:从关系数据库导入数据 这些核心组件以及

    你需要Spark的10个理由

    Mahout前一阶段表示从现在起他们将不再接受任何形式的以MapReduce形式实现的算法,另外一方面,Mahout宣布新的算法基于Spark,同时,这几年来,Hadoop的改进基本停留在代码层次,也就是修修补补的事情,这就导致了...

    基于spark、mahout和spring boot构建的智能推荐系统.zip

    快速:Apache Spark以内存计算为核心。 通用 :一站式解决各个问题,ADHOC SQL查询,流计算,数据挖掘,图计算完整的生态圈。只要掌握Spark,就能够为大多数的企业的大数据应用场景提供明显的加速。存储层:HDFS作为...

    百度云盘 pdf《大数据架构和算法实现之路:电商系统的技术实战》百度云盘-带标签目录

    10.6 Mahout 中的推荐算法…….. ... .... 313 10.7 电商常见的推荐系统方案……… 314 10.7.1 电商常见的推荐系统 方案……………………….. 314 10.7.2 相似度的计算 …………….. 317 10.7.3 协同过滤…………...

    bigdata-2:大数据 二

    跑在hadoop平台上的测试代码,和实际运行在平台上的代码有些不同核心功能部分代码的数据准备是利用Nutch 爬取 网易门户网站中各个分类的内容,根据内容进行分词(利用Lucene,配置庖丁解牛包的配置文件)然后利用...

    大数据分析平台.docx

    基于Hadoop来实现的经典算法,拿这个作为数据分析的核心算法集来参考还是很好的。 大数据分析平台全文共4页,当前为第2页。 大数据分析平台全文共4页,当前为第2页。 如此一个决策支持系统要怎么展现呢?其实这个和...

Global site tag (gtag.js) - Google Analytics