【问题标题】:Spark MLLib Collaborative Filtering with new userSpark MLLib 与新用户的协同过滤
【发布时间】:2015-05-23 11:30:42
【问题描述】:

我正在尝试在 Spark 中实现的协作过滤算法,但遇到了以下问题:

假设我用以下数据训练一个模型:

u1|p1|3
u1|p2|3
u2|p1|2
u2|p2|3

现在如果我用以下数据测试它:

u1|p1|1
u3|p1|2
u3|p2|3

我从未看到用户“u3”的任何评分,大概是因为该用户没有出现在训练数据中。这是因为冷启动问题吗?我的印象是这个问题只适用于新产品。在这种情况下,我会期待对“u3”的预测,因为训练数据中的“u1”和“u2”具有与“u3”相似的评级信息。这是基于模型和基于内存的协同过滤的区别吗?

【问题讨论】:

  • 您是否能够将用户和产品作为非整数进行训练?当我尝试以这种格式训练时,我收到错误说明:Rating, (int(self.user), int(self.product), float(self.rating))
  • 看起来我们遇到了类似的问题:如何在不重新训练整个模型的情况下预测新用户?

标签: apache-spark apache-spark-mllib collaborative-filtering


【解决方案1】:

我假设您在谈论 ALS 算法?

'u3' 不是您的训练集,因此您的模型对该用户一无所知。唯一能做的就是返回所有用户的平均评分。

查看 Spark 1.3.0 Scala 代码:当您调用 predict() 时,ALS.train() 返回的 MatrixFactorizationModel 尝试在特征向量中查找用户和产品。当我尝试预测未知用户的评分时,我得到了NoSuchElementException。就是这样实现的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-09-05
  • 2016-12-30
  • 2017-11-09
  • 2015-11-28
  • 1970-01-01
  • 2017-10-21
  • 2015-03-17
  • 2015-02-08
相关资源
最近更新 更多