【发布时间】:2013-12-24 19:55:35
【问题描述】:
我有一个包含许多用户(超过 1000 万)的列表,每个用户都由一个用户 ID 表示,后跟 10 个浮点数表示他们的偏好。我想使用基于 mapreduce 的余弦相似度有效地计算用户相似度矩阵。但是,由于这些值是浮点数,因此在 mapreduce 框架中很难确定键。有什么建议吗?
【问题讨论】:
标签: hadoop mapreduce cosine-similarity
我有一个包含许多用户(超过 1000 万)的列表,每个用户都由一个用户 ID 表示,后跟 10 个浮点数表示他们的偏好。我想使用基于 mapreduce 的余弦相似度有效地计算用户相似度矩阵。但是,由于这些值是浮点数,因此在 mapreduce 框架中很难确定键。有什么建议吗?
【问题讨论】:
标签: hadoop mapreduce cosine-similarity
我认为最简单的解决方案是 Mahout 库。 Mahout 中有几个 map-reduce 相似性矩阵作业可能适用于您的用例。
第一个是 Mahout 的 ItemSimilarityJob,它是其推荐系统库的一部分。该工作的具体信息可以在 here 找到。您只需要提供所需格式的输入数据并选择您的VectorSimilarityMeasure(对于您的情况是 SIMILARITY_COSINE)以及任何其他优化。由于您正在寻找基于十个浮点值的偏好向量来计算用户-用户相似度,您可以做的是为向量的索引分配一个简单的 1 到 10 数字散列并生成一个简单的 .csv 文件vectorIndex、userID、decimalValue 作为 Mahout 项目相似性作业的输入(userID 是数字 Int 或 Long 值)。结果输出应该是用户ID、用户ID、相似度的制表符分隔的文本文件。
第二种解决方案可能是 Mahout 的 RowSimilarityJob 包含在其数学库中。我自己从未使用过它,但可以在 here 和此 previous stackoverflow thread 中找到一些信息。您需要将输入数据转换为 DistributedRowMatrix,而不是 .csv 作为输入,用户 ID 是矩阵的行。我相信,输出也将是一个DistributedRowMatrix 序列文件,其中包含您正在寻找的用户-用户相似性数据。
我想哪种解决方案更好取决于您喜欢哪种输入/输出格式。一切顺利。
【讨论】: