【问题标题】:Mahout: how to make recommendations for new usersMahout:如何为新用户推荐
【发布时间】:2012-10-03 04:30:42
【问题描述】:

我们计划将 Mahout 用于电影推荐系统。我们还计划 使用 SVD 进行模型构建。

当新用户到来时,我们会要求他/她对一定数量的电影(比如 10 部电影)进行评分。

问题是,为了向这个新用户推荐,我们必须重新构建整个模型。

有没有更好的方法?

谢谢

【问题讨论】:

    标签: mahout svd


    【解决方案1】:

    是的...虽然不是在 Mahout 中。那里的实现本质上是围绕数据模型的定期重新加载和重建而构建的。在某些实现中,这仍然允许您动态使用新数据,例如基于邻域的实现。我认为基于 SVD 的内存中不会这样做(不是我写的。)

    理论上,您可以从第一次点击或评分开始,通过折叠将目标项目/电影投射回用户特征空间,从而开始推荐。为了大大简化——如果你对输入 A 的秩 k 近似分解是 Ak = Uk * Sk * Vk',那么对于一个新用户 u,你需要一个新的行 Uk_u 来进行更新。你有 A_u。

    Uk = Ak * (Vk')^-1 * (Sk)^-1。好消息是右边的那两个倒数是微不足道的。 (Vk')^-1 = Vk 因为它具有正交列。 (Sk)^-1 只是取 Sk 的对角元素的倒数。

    所以 Uk_u = Ak_u * (Vk')^-1 * (Sk)^-1。你没有 Ak_u,但是,你有 A_u 大致相同,所以你使用它。

    如果您喜欢 Mahout,并且喜欢矩阵分解,我建议您考虑 ALS 算法。这是一个更简单的过程,所以更快(但使折叠变得更难——见a recent explanation I gave 的结尾)。它非常适合推荐。

    这也存在于 Mahout 中,尽管没有实现折叠。 Myrrix,这是我继续 Mahout 工作的地方,实现了所有这些。

    【讨论】:

    • 嗨,肖恩,谢谢你的好回答。实际上,您的解决方案似乎并不难实施。所以,我想知道为什么在 Mahout 中没有实现这一点,因为在商业环境中,能够在用户给出一些评分后立即向用户推荐项目非常重要。
    • 除非有人实现,否则什么都不会实现,而不是因为它不应该实现。我想还没有人想实现它。
    • 你好肖恩。您如何看待针对新用户的评分重新训练模型以了解与他相关的因素的技术。
    • 我们在邮件列表中有并行线程 - 我认为这与 fold in 相同。
    • 嗨,肖恩,这是一个相当晚的回复,希望你能看到。在你上面的回答中,你说“好消息是右边的这两个逆是微不足道的。(Vk')^-1 = Vk 因为它有正交列。”但是,Vk 不是方阵,会不会产生问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多