0

我有一个包含许多用户(超过 1000 万)的列表,每个用户都由一个用户 ID 表示,后跟 10 个浮点数表示他们的偏好。我想使用基于 mapreduce 的余弦相似度有效地计算用户相似度矩阵。但是,由于值是浮点数,因此在 mapreduce 框架中很难确定键。有什么建议么?

4

1 回答 1

2

我认为最简单的解决方案是Mahout库。Mahout 中有几个 map-reduce 相似性矩阵作业可能适用于您的用例。

第一个是 Mahout ItemSimilarityJob,它是其推荐系统库的一部分。该工作的具体信息可以在这里找到。您只需要以所需格式提供输入数据并选择您的VectorSimilarityMeasure(对于您的情况将是 SIMILARITY_COSINE)以及任何其他优化。由于您正在寻找基于十个浮点值的偏好向量来计算用户-用户相似度,您可以做的是为向量的索引分配一个简单的 1 到 10 数字散列并生成一个简单的 .csv 文件vectorIndex、userID、decimalValue 作为 Mahout 项目相似性作业的输入(userID 是数字 Int 或 Long 值)。结果输出应该是用户ID、用户ID、相似度的制表符分隔的文本文件。

第二种解决方案可能是 MahoutRowSimilarityJob包含在其数学库中。我自己从未使用过它,但可以在此处之前的 stackoverflow 线程中找到一些信息。而不是 .csv 作为输入,您需要将输入数据转换为DistributedRowMatrix,用户 ID 是矩阵的行。我相信,输出也将是一个DistributedRowMatrix包含您正在寻找的用户-用户相似性数据的序列文件。

我想哪种解决方案更好取决于您喜欢哪种输入/输出格式。一切顺利。

于 2013-12-24T11:55:35.067 回答