首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更新用于ALS的Spark

如何更新用于ALS的Spark
EN

Stack Overflow用户
提问于 2015-05-28 14:22:14
回答 2查看 3.6K关注 0票数 15

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

我在显式训练方面也有问题:使用隐式训练的Apache协作过滤结果。他们没有道理 (在显式和内隐数据上)给出了合理的结果,但是显式训练不能。

虽然这对我来说还可以,但我很好奇如何更新一个模型。而我目前的解决方案就像

  1. 拥有所有的用户评级
  2. 生成模型
  3. 为用户提供建议

我想要这样的流动:

  1. 有评级基础的
  2. 生成一次模型(可选的保存和加载)
  3. 在10部随机电影中获得一个用户的评分(不是在模型中!)
  4. 使用模型和新的用户评等获取建议

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

虽然第一种方法有利于批处理(比如在夜间批处理中生成推荐),但第二种方法对几乎实时生成推荐很有好处。

EN

回答 2

Stack Overflow用户

发布于 2016-01-11 19:44:15

编辑:以下是我的工作,因为我有含蓄的反馈评级,并且只对一个新用户的产品排名感兴趣。更多细节这里

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

为了在模型中得到对用户的预测,您可以使用它的潜在表示(大小为f(因子数)的向量u),它乘以乘积潜在因子矩阵(由所有产品的潜在表示组成的矩阵,一组大小为f的向量),并给出每个产品的分数。对于新用户,问题是您无法访问他们的潜在表示(您只有大小M(不同产品的数量)的完整表示,但是您可以做的是使用一个相似函数来计算这个新用户的相似的潜在表示,方法是将它乘以乘积矩阵的转置。

也就是说,如果你的用户潜势矩阵是u,你的产品潜势矩阵是v,对于模型中的用户I,你会得到分数: u_i *v对于一个新用户,你没有潜在的表示,所以取完全表示full_u和do: full_u * v^t *v,这将近似于新用户的潜在因素,并且应该给出合理的建议(如果模型已经为现有用户提供了合理的建议)

为了回答培训的问题,这允许您计算新用户的预测,而不必对模型进行繁重的计算,而您现在只能偶尔做一次。因此,您可以在夜间进行批量处理,并且仍然可以在白天对新用户进行预测。

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

票数 6
EN

Stack Overflow用户

发布于 2015-11-18 06:06:17

似乎您想要做某种在线学习。这是一种概念,即在接收数据时实际上是在更新模型。星火MLLib有限的流媒体机器学习选择。有一个流线性回归和一个流K-表示

许多机器学习问题在批处理解决方案中工作得很好,也许每隔几个小时或几天再对模型进行一次再培训。可能有解决这一问题的策略。

一种选择可以是一个集合模型,在该模型中,您将ALS的结果与另一个帮助对未见电影进行预测的模型结合起来。

不过,如果你想看很多以前没看过的电影,协作过滤可能做不到你想要的。如果那些新电影根本没有出现在模型中,那么模特就不可能知道其他看过这些电影的人喜欢什么了。

一个更好的选择可能是采取一种不同的策略,对电影和电影的模型概念(比如类型、主题等)进行一些潜在的语义分析,这样新电影具有不同的属性并融入现有的模型,而评级则会影响这些属性相互作用的强度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30509335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档