摘要:
一直使用mahout的RowSimilarity来计算物品间的相似度,今晚仔细看了其实现,终于搞明白了他的计算逻辑。上篇中介绍了整个itemBaseCF的mapreducer过程,主要有三个大的步骤吧,我把他称为prepare阶段,计算相似阶段和利用相似性计算推荐阶段。prepare阶段主要完成的是矩阵转换变换以及统计一些相似及推荐时用到的一些属性。第二阶段是计算相似性:有几个数据较为重要,如下所示。norms.bin:是用来存放所有用户对一个商品的平方和,数据存储为itemA:doublenumNonZeroEntries.bin:存放itemID对应的不为零的用户评分个数maxValues 阅读全文
随笔分类 - mahout
Apache Mahout基于商品的协同过滤算法流程分析
2013-05-31 14:22 by Polarisary, 1163 阅读, 收藏,
摘要:
最近使用mahout的itemBase协同过滤算法,研究了下他的源码,记录如下,以备后忘……其算法实现大致分四个主要的部分:1.将输入数据转化成矩阵2.计算相似性3.还是转化数据格式,为计算预测、推荐做准备4.预测评分并做推荐下面分别详细介绍:PreparePreferenceMatrixJob1.1itemIDIndexinput:启动计算时指定的--input路径output:***/preparePreferenceMatrix/itemIDIndexmapper:ItemIdIndexMapper,将输入中的userID,itemID,pref分隔后,将Long型itemID转化成in 阅读全文
Mahout SlopeOne实现(一)
2013-02-06 18:37 by Polarisary, 1276 阅读, 收藏,
摘要:
SlopeOne的基本思想是用均值化的来掩盖个体的打分差异,使用加权平均估算未评分的物品的评分。今天用了大半天的时间看了下mahout中SlopeOne的实现,它是初始化时计算所有的两个物品之间的评分均值。存在内存中(map:具体是FastByIDMap),这样,当要计算某个用户对某个未评分的商品的评分时,可以直接从内存中取均值。如下:评分物品1物品2物品3用户1524用户24?5用户321?要计算用户3对物品3的评分,(((5-4)+(4-5))/2+2 + ((2-4)/1)+1)/2=1,初始化所做的是计算:物品1与物品2的评分均值((5-4)+(4-5))/2)、物品1与物品3的评分均 阅读全文