高效的矩阵乘法和协作过滤排名

时间:2019-03-21 15:45:57

标签: python matrix bigdata matrix-multiplication recommender-systems

我正在做一个推荐系统端项目,遇到了这个C ++程序包,该程序包使用并行SGD(https://github.com/cjlin1/libmf)对BPR实现了协作过滤。模型将P (#users * k)Q (#items * k)矩阵作为.txt文件输出。而且我正在尝试将它们相乘以获得估计的R,然后对每一行进行排名,以获得每个客户的最高N推荐。

我使用的软件包没有提供 recommend_top_n API ,因此我一直在研究一种高效的大型密集矩阵乘法解决方案,其中包括带有.h5的Spark IndexedRowMatrix和Scipy文件。

尺寸:

P (300,000 * 32) * Q (32 * 250,000) = R (300,000 * 250,000),然后将值四舍五入为最小的类型(int16)。因此,所得的R矩阵应在150 GB附近。我目前正在使用带有160 GB RAM(m4.10xlarge)的EC2。我正在将每个用户的最高N结果写到一个表中,供仪表盘使用,而不是作为Web服务提供。

我想知道对于这种情况有什么好的解决方案?我认为最直接的方法是像Strassen算法一样对用户或项目矩阵进行分区。但是,是否有更好的方法可以更优雅,更有效地进行操作,还是应该简单地升级EC2?我找不到很多有关人们如何解决此问题的材料,而且对于我来说,没有太多的实现方法对我来说似乎很奇怪。这让我想知道是否有更好的解决方案。

我的主要代码是Python,但是我很高兴使用任何语言或工具进行矩阵乘法和排名。还是我什至不应该做乘法,而应该尝试使用不同的协作过滤程序包来直接预测最重要的N个推荐?

0 个答案:

没有答案