如何为ALS更新Spark MatrixFactorizationModel

mni*_*off 15 machine-learning collaborative-filtering apache-spark apache-spark-mllib

我为受到https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html启发的MovieLens数据库构建了一个简单的推荐系统.

我也有像这里的显式培训的问题:Apache Spark ALS协同过滤结果.它们没有意义 使用隐式训练(在显式和隐式数据上)给出了合理的结果,但是显式训练没有.

虽然现在这对我来说还不错,但我很好奇如何更新模型.虽然我目前的解决方案就像

  1. 拥有所有用户评级
  2. 生成模型
  3. 获得用户推荐

我希望有这样的流程:

  1. 有收视率的基础
  2. 生成模型一次(可选保存并加载)
  3. 一个用户在10部随机电影上获得一些评分(不在模特中!)
  4. 使用模型和新用户评级获得推荐

因此,我必须更新我的模型,而不必完全重新计算它.有没有机会这样做?

虽然第一种方法适用于批处理(如在夜间批次中生成建议),但第二种方式对于几乎实时生成建议是有益的.

yoh*_*lej 6

编辑:以下对我有用,因为我有隐含的反馈评级,并且只对新用户的产品排名感兴趣.更多细节在这里


您实际上可以使用训练模型获得新用户的预测(不更新):

要在模型中获得用户的预测,可以使用其潜在表示(大小为f(因子数)的向量u),乘以产品潜在因子矩阵(由所有产品的潜在表示形成的矩阵,一堆大小为f)的矢量,并给出每个产品的分数.对于新用户,问题在于您无法访问其潜在表示(您只能获得大小为M(不同产品数量)的完整表示,但您可以使用相似度函数来计算类似的潜在表示通过将乘以产品矩阵的转置来表示此新用户.

即如果你的用户潜在矩阵是u而你的产品潜在矩阵是v,对于模型中的用户i,你可以通过这样做得到分数:u_i*v对于新用户,你没有潜在的表示,所以要充分利用表示full_u和do:full_u*v ^ t*v这将近似新用户的潜在因素,并应给出合理的建议(如果模型已经为现有用户提供了合理的建议)

为了回答训练问题,这允许您为新用户计算预测,而无需对模型进行大量计算,而现在您只能进行一次.因此,您可以在晚上进行批处理,并且仍然可以在白天对新用户进行预测.

注意:MLLIB允许您访问矩阵u和v


Che*_*het 1

看来您想做某种在线学习。这就是您在接收数据时实际上更新模型的概念。Spark MLLib 的流式机器学习选项有限。有一个流式线性回归和一个流式 K-Means

许多机器学习问题都可以通过批量解决方案很好地解决,也许每隔几个小时或几天重新训练一次模型。可能有解决这个问题的策略。

一种选择可能是集成模型,您可以将 ALS 的结果与另一个模型相结合,帮助预测未看过的电影。

如果您希望看到很多以前没看过的电影,那么协同过滤可能无法满足您的要求。如果这些新电影根本不在模型中,模型就无法知道观看这些电影的其他人喜欢什么。

更好的选择可能是采取不同的策略,尝试对电影进行某种潜在语义分析,并建立电影的模型概念(如类型、主题等......),这样新电影就具有各种属性并适合到现有模型中,评级会影响这些属性相互作用的强度。


归档时间:

查看次数:

2806 次

最近记录:

8 年,8 月 前