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

时间:2014-12-17 18:20:24

标签: apache-spark mahout recommendation-engine apache-spark-mllib

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

ItemBasedRecommender.mostSimilarItems(int productid, int maxResults, Rescorer rescorer)

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

MatrixFactorizationModel.recommendProducts(int user, int num)

是否有办法在不必提供用户ID信息的情况下获得基于类似产品的推荐产品,类似于mahout执行基于项目推荐的方式。

2 个答案:

答案 0 :(得分:11)

Spark 1.2x版本不提供"基于项目相似性的推荐器"就像Mahout中的那些一样。

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

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

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

  1. 通过特征向量表示所有项目
  2. 通过计算每个项目对的相似性度量(例如余弦)来构建项目项目相似度矩阵
  3. 使用此项目相似度矩阵查找用户的类似项目
  4. 由于相似性矩阵不能很好地扩展,(想象一下,如果你有100个项目而不是10000个项目,你的相似性矩阵将如何增长),如果你计划在大量的数据上实现它,那么在DIMSUM上读取这些内容可能会有所帮助。项目:

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

答案 1 :(得分:4)

请使用Apache Spark here.查看我对项目项推荐模型的实现您可以使用在用户产品评级数据上运行MLib ALS算法时生成的productFeatures矩阵来实现此功能。 ALS算法基本上分解了两个矩阵 - 一个是userFeatures,另一个是productFeatures矩阵。您可以在productFeatures排名矩阵上运行余弦相似性,以查找项目 - 项目相似性。