我有一个包含许多用户(超过1000万)的列表,每个用户由一个userid表示,后跟10个表示他们偏好的浮点数。我想利用基于mapreduce的余弦相似度来高效地计算用户相似度矩阵。但是,由于这些值是浮点数,因此很难在mapreduce框架中确定键。有什么建议吗?
1sbrub3j1#
我认为最简单的解决方案是mahout图书馆。mahout中有几个map-reduce相似性矩阵作业可能适用于您的用例。第一个是mahout的 ItemSimilarityJob 这是它的推荐系统库的一部分。该工作的具体信息可在此处找到。您只需提供所需格式的输入数据并选择 VectorSimilarityMeasure (对于您的情况,这将是相似性余弦)以及任何额外的优化。由于您希望基于10个浮点值的首选向量来计算用户相似度,因此您可以为向量的索引分配一个简单的1到10个数字散列,并生成一个简单的.csv文件vectorindex,userid,作为mahout项相似性作业的输入的小数值(userid是数值int或long值)。结果输出应该是一个由userid、userid和similarity组成的制表符分隔的文本文件。第二个解决方案可能是mahout的 RowSimilarityJob 包含在数学库中。我自己从来没有用过,但有些信息可以在这里找到在这个以前的stackoverflow线程**。您需要将输入数据转换为.csv,而不是.csv作为输入 DistributedRowMatrix ,用户标识是矩阵的行。我相信,产出也将是一个巨大的挑战 DistributedRowMatrix 包含正在查找的用户相似性数据的序列文件。我想哪种解决方案更好取决于您喜欢哪种输入/输出格式。祝你一切顺利。
ItemSimilarityJob
VectorSimilarityMeasure
RowSimilarityJob
DistributedRowMatrix
1条答案
按热度按时间1sbrub3j1#
我认为最简单的解决方案是mahout图书馆。mahout中有几个map-reduce相似性矩阵作业可能适用于您的用例。
第一个是mahout的
ItemSimilarityJob
这是它的推荐系统库的一部分。该工作的具体信息可在此处找到。您只需提供所需格式的输入数据并选择VectorSimilarityMeasure
(对于您的情况,这将是相似性余弦)以及任何额外的优化。由于您希望基于10个浮点值的首选向量来计算用户相似度,因此您可以为向量的索引分配一个简单的1到10个数字散列,并生成一个简单的.csv文件vectorindex,userid,作为mahout项相似性作业的输入的小数值(userid是数值int或long值)。结果输出应该是一个由userid、userid和similarity组成的制表符分隔的文本文件。第二个解决方案可能是mahout的
RowSimilarityJob
包含在数学库中。我自己从来没有用过,但有些信息可以在这里找到在这个以前的stackoverflow线程**。您需要将输入数据转换为.csv,而不是.csv作为输入DistributedRowMatrix
,用户标识是矩阵的行。我相信,产出也将是一个巨大的挑战DistributedRowMatrix
包含正在查找的用户相似性数据的序列文件。我想哪种解决方案更好取决于您喜欢哪种输入/输出格式。祝你一切顺利。