一种高效的协同过滤矩阵乘法与排序方法

2024-10-02 00:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个推荐系统的侧项目,并且遇到了这个C++包,它实现了并行SGD(https://github.com/cjlin1/libmf)的BPR协同过滤。该模型将P (#users * k)Q (#items * k)矩阵输出为.txt文件。我试图将它们相乘,得到估计的R,然后对每一行进行排序,得到每个客户的最高N建议。你知道吗

我使用的软件包不提供recommend_top_nAPI,因此我一直在研究一种有效的大型密集矩阵乘法解决方案,包括Spark IndexedRowMatrix和Scipy with .h5文件。你知道吗

尺寸:

P (300,000 * 32) * Q (32 * 250,000) = R (300,000 * 250,000)我将值四舍五入到可能的最小类型(int16)。所以得到的R矩阵应该在150 GB左右。我目前正在使用带有160 GBRAM(m4.10xlarge)的EC2。我将每个用户的最重要的N结果写入一个表中,以便仪表板使用,而不是作为web服务提供。你知道吗

我想知道这个案子有什么好办法?我认为最直接的方法是像Strassen算法那样划分用户或项目矩阵。但是,有没有更好的方法来更优雅、更高效地完成它,或者我应该简单地升级我的EC2?我找不到很多关于人们是如何解决这个问题的资料,而且我觉得奇怪的是,没有很多这样的实现。这让我怀疑是否有更好的解决办法。你知道吗

我的主要代码是Python,但是我很乐意使用任何语言或工具来实现这个矩阵乘法和排名。或者我甚至不应该做乘法运算,而是应该尝试使用一个不同的协作过滤包来直接预测顶级的N推荐?你知道吗


Tags: 文件项目方法用户httpsgithubcom系统

热门问题