如何在spark mllib中进行基于项目的推荐?

use*_*532 7 recommendation-engine mahout apache-spark apache-spark-mllib

在Mahout中,使用API​​方法支持基于项目的推荐:

ItemBasedRecommender.mostSimilarItems(int productid, int maxResults, Rescorer rescorer)
Run Code Online (Sandbox Code Playgroud)

但是在Spark Mllib中,似乎ALS中的API可以获取推荐的产品,但必须通过以下方式提供userid:

MatrixFactorizationModel.recommendProducts(int user, int num)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得基于类似产品的推荐产品,而无需提供用户ID信息,类似于mahout执行基于项目的推荐的方式.

Ved*_*ant 11

Spark 1.2x版本没有像Mahout中那样提供"基于项目相似性的推荐器".

但是,MLlib目前支持基于模型的协同过滤,其中用户和产品由一小组潜在因素描述{在构建用户项矩阵时理解隐式(视图,点击)和显式反馈(评级)的用例. }

MLlib使用交替最小二乘(ALS)算法[可以认为类似于SVD算法]来学习这些潜在因素.

如果您需要构建纯粹基于项目相似性的推荐器,我建议:

  1. 通过特征向量表示所有项目
  2. 通过计算每个项目对的相似性度量(例如余弦)来构建项目项目相似性矩阵
  3. 使用此项目相似性矩阵查找用户的类似项目

由于相似度矩阵不能很好地扩展,(想象一下,如果你有100个项目而不是10000个项目,你的相似性矩阵将如何增长)如果你计划在大量项目上实现它,那么在DIMSUM上读取这些内容可能会有所帮助:

https://databricks.com/blog/2014/10/20/efficient-similarity-algorithm-now-in-spark-twitter.html