8

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

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

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

MatrixFactorizationModel.recommendProducts(int user, int num)

有没有一种方法可以根据类似产品获得推荐产品而无需提供用户 ID 信息,类似于 mahout 执行基于项目的推荐的方式。

4

2 回答 2

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

于 2015-04-06T07:59:19.917 回答
4

在此处查看我使用 Apache Spark 实现的 item-item 推荐模型。 您可以使用在对用户产品评级数据运行 MLib ALS 算法时生成的 productFeatures 矩阵来实现这一点。ALS 算法本质上分解了两个矩阵 - 一个是 userFeatures,另一个是 productFeatures 矩阵。您可以在 productFeatures 秩矩阵上运行余弦相似度来查找项目相似度。

于 2016-12-05T18:01:28.810 回答