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

coh*_*hoz 7 matrix-factorization apache-spark apache-spark-mllib

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

通过当前的API,曾经可以将用户产品的笛卡尔积传递给预测函数,但在我看来,这将进行大量的额外处理.

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

Sea*_*wen 5

Spark 1.1有一个recommendProducts可以映射到每个用户ID的方法.这比没有好,但没有真正优化推荐给所有用户.

我会仔细检查你是否真的想为每个人提出建议; 在规模上,这本质上是一个很大的缓慢操作.考虑预测最近才有效的用户.

否则,是的,最好的办法是创建自己的方法.特征RDD的笛卡尔连接可能太慢了,因为它拖曳了这么多的特征向量副本.选择较大的用户/产品功能集,然后映射.在每个工作程序中,将每个工作程序中的其他产品/用户功能集保存在内存中.如果这不可行,您可以使其更复杂,并对内存中较小RDD的子集进行多次映射.