使用MapReduce计算余弦相似度



我正在尝试使用MapReduce的余弦相似性进行基于项目的推荐。

这是输入集。

项目Idx_1,用户Idx_1项目Idx_1,用户Idx_2项目Idx_2,用户Idx_1项目Idx_3,用户Idx_3。。。

如何使用这些输入数据进行设计?

要使用余弦相似性,我想输入应该如下,

(没有偏好,所以数据可能是0或1)itemIdx_1,[userIdx_1:1,userIdx_2:1,userIdx_3:0]itemIdx_2,[userIdx_1:0,userIdx_2:1,userIdx_3:0]项目Idx_3,[用户Idx_1:0,用户Idx_2:0,用户IDx_3:1]。。。

但是如何使用MapReduce比较每一行?

请帮忙。我已经受够了一个星期了。。

item1表示一个项目,我们可以使用向量[user1,user2,user3…userN]来识别它。item1和item2的余弦相似性是

sum(item1*item2)/ sqrt(sum(item1*item1))* sqrt(sum(item2*item2)) 

您可以将此sqrt(sum(item1*item1))添加到item1行;我将其添加到项目行作为D.
注意:矢量项是稀疏的。

我用三个步骤来做到这一点:

  1. 计算每个项目的sqrt(sum(item*item))
  2. 按用户ID映射。通过这种方式,我们得到每个用户的选择(相同的选择在相同的reduce函数中)。例如

    userid    itemid     rating  (D) 
    223  2344 4
    223  2324 5
    223  3444 3
    

    然后为每个用户组合每两个项目。然后,我们每两个项目就得到一个用户的列表。例如

    itemid1 itemid2  rating1 rating2 (D1) (D2)  
    2344  2324 4 5  
    ........
    
  3. (非常简单)计算itemid1和itemid2的评分;使用sum(item1*item2),我们已经知道了sqrt(sum(item1*item1))sqrt(sum(item2*item2)),所以我们得到了余弦相似度。

相关内容

  • 没有找到相关文章

最新更新