【问题标题】:calculating cosine similarity using MapReduce使用 MapReduce 计算余弦相似度
【发布时间】:2014-10-21 16:54:40
【问题描述】:

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

这是输入集。

itemIdx_1, userIdx_1 itemIdx_1, userIdx_2 itemIdx_2, userIdx_1 itemIdx_3, userIdx_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] ItemIdx_3 , [userIdx_1:0, userIdx_2:0, userIdx_3:1] ...

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

请帮忙。我已经厌倦了大约一个星期..

【问题讨论】:

    标签: mapreduce recommendation-engine cosine-similarity


    【解决方案1】:

    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)),所以我们得到余弦相似度。

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 1970-01-01
      • 2017-07-07
      • 2018-04-11
      • 2011-07-24
      • 2022-07-07
      • 2017-02-03
      • 2013-06-24
      相关资源
      最近更新 更多