如何处理推荐系统的新数据?

时间:2012-09-17 20:44:59

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

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

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

  1. 我想为数据集添加新评级。
  2. 我想修改现有的评分。
  3. 我的算法应如何处理这些变化(不做大量不必要的工作)?任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

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

基于用户的CF:

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

坡一:

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

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

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

答案 1 :(得分:0)

一般情况称为在线算法

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

如果你谷歌搜索“在线斜率预测器”,你应该能够从文献中找到一些相关的方法。