【问题标题】:Computing similarity score for all user pairs计算所有用户对的相似度得分
【发布时间】:2015-10-26 02:16:36
【问题描述】:
我有一个包含 200,000 个用户、25000 个项目和 500 万个评分的数据集。我必须计算所有可能的用户对的相似度得分(通过使用余弦或皮尔逊相关)。我有用 c# 编写的代码,当我运行它时,我得到内存溢出错误。我几乎尝试了所有解决方案(x64 应用程序、增加的堆内存等)。我的 PC 配置是(core-i7 3.4 GHz、12 GB DDR3、2TB HDD)。
有什么资源可以帮助我完成这项任务吗?
【问题讨论】:
标签:
performance
machine-learning
similarity
recommendation-engine
【解决方案1】:
...也就是说,我将尝试回答您实际提出的问题。您未能提供代码或错误消息,所以我正在解决实际问题。
N个用户的可能对数为N(N-1)/2;对于较大的 N 值,这实际上是 N^2 / 2。对于 2E5 个用户,这得出 2E10 个可能的对:200 亿对。我想说您的最小存储空间是每个 32 位的用户 ID,加上 4 个字节用于相似性度量。每对 12 个字节,为我们提供 240Gb 的内存。
您对您的算法、数据方法或您使用的语言只字未提。如果您尝试在 RAM 中进行所有这些计算,当然您正在超出内存限制!
您已深入“大数据”领域。使用这些工具开始搜索。我不知道你的项目资源,工具推荐远远超出了 StackOverflow 的范围。
当然,如果您对算法小心谨慎,您将能够处理这个问题。您只在内存中保留裸露的用户信息,可能是用户 ID 键入的评级。计算相似度时,将其缓冲以写入磁盘。
计算相似度后是否需要进行更多处理,还是通过写入文件完成任务?如果您需要做更多工作,您可能需要一个具有良好 ETL 支持和数据访问功能的大数据工具集,以适应您未描述的所有项目方面。