如何在Spark MatrixFactorizationModel中对所有用户产品组合进行评分



给定MatrixFactorizationModel,返回用户产品预测的完整矩阵的最有效方法是什么(在实践中,通过一些阈值进行过滤以保持稀疏性)?

通过当前的API,曾经可以将用户产品的笛卡尔乘积传递给预测函数,但在我看来,这将做很多额外的处理。

访问私有userFeatures和productFeatures是正确的方法吗?如果是,是否有一种好的方法可以利用框架的其他方面以有效的方式分发这种计算?具体来说,有没有一种简单的方法可以比"手动"乘以所有对userFeature、productFeature做得更好?

Spark 1.1有一个recommendProducts方法,可以映射到每个用户ID。这总比什么都没有好,但并没有真正优化为向所有用户推荐。

我会仔细检查你是否真的想为每个人提出建议;从规模上看,这本质上是一个巨大而缓慢的操作。考虑仅为最近处于活动状态的用户进行预测。

否则,是的,你最好的选择是创建自己的方法。特征RDD的笛卡尔连接可能太慢了,因为它要打乱这么多特征向量的副本。选择用户/产品功能集中较大的一个,并进行映射。在每个工人中,在每个工人的内存中保存其他产品/用户功能集。如果这不可行,您可以使其更加复杂,并多次映射内存中较小RDD的子集。

从Spark 2.2开始,recommendProductsForUsers(num)将是方法。

为所有用户推荐数量最多的产品。每个用户返回的推荐数可能小于"num"。

https://spark.apache.org/docs/2.2.0/api/python/pyspark.mllib.html

最新更新