【问题标题】:How to handle new data for recommendation system?如何处理推荐系统的新数据?
【发布时间】:2012-09-10 02:48:22
【问题描述】:

这是一个理论问题。假设我已经实现了两种类型的协同过滤:基于用户的 CF 和基于项目的 CF(形式为Slope One)。

我有一个很好的数据集供这些算法运行。但接下来我想做两件事:

  1. 我想为数据集添加一个新评级。
  2. 我想修改现有评级。

我的算法应该如何处理这些变化(不做很多不必要的工作)?谁能帮我解决这个问题?

【问题讨论】:

    标签: recommendation-engine prediction collaborative-filtering online-algorithm


    【解决方案1】:

    对于这两种情况,策略非常相似:

    基于用户的 CF:

    • 更新受影响用户的所有相似度(即相似度矩阵中的一行和一列)
    • 如果您的邻居是预先计算的,请为受影响的用户计算邻居(对于完整的更新,您可能需要重新计算所有邻居,但我会坚持使用近似解)

    一号坡:

    • 更新频率(仅在“添加”情况下)和受影响项目的差异矩阵条目(同样,一行和一列)

    备注:如果你的“相似度”不对称,则需要更新一行一列。如果它是对称的,则更新一行会自动导致相应列的更新。 对于 Slope-One,矩阵是对称的(频率)和倾斜对称的(差异),所以如果您处理,您还需要更新一行或一列,并免费获取另一行(如果您的矩阵存储像这样工作)。

    如果您想查看如何实现此功能的示例,请查看 MyMediaLite(免责声明:我是主要作者):https://github.com/zenogantner/MyMediaLite/blob/master/src/MyMediaLite/RatingPrediction/ItemKNN.cs 有趣的代码在方法 RetrainItem() 中,它是从 AddRatings() 和 UpdateRatings() 调用的。

    【讨论】:

      【解决方案2】:

      一般的东西叫做在线算法

      可以仅使用新数据“在线”更新(同时保持可用),而不是重新训练整个预测器。

      如果您在 Google 上搜索“在线坡度一预测器”,您应该能够从文献中找到一些相关的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-28
        • 2013-02-28
        • 2013-08-16
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        相关资源
        最近更新 更多