协同过滤的矩阵分解——新用户和项目?

Posted

技术标签:

【中文标题】协同过滤的矩阵分解——新用户和项目?【英文标题】:Matrix factorization for collaborative filtering - new users and items? 【发布时间】:2012-09-27 20:35:17 【问题描述】:

我一直在阅读有关使用矩阵分解进行协同过滤的文章,但我似乎找不到处理向系统添加新用户或项目或让用户评价新项目的示例。在这些情况下,需要重新计算项目-用户矩阵和分解,对吗?这如何在大量用户和物品的情况下表现良好?有办法解决吗?

谢谢

【问题讨论】:

“在线协同过滤”和随机梯度下降可能有助于您的搜索。我没有使用以下内容,它是 java,但您可能想查看 github.com/MrChrisJohnson/CollabStream 作为可能满足您需求的项目示例。 查看此处了解可能的解决方案:***.com/questions/41537470/… 【参考方案1】:

您的问题有两个部分:(A) 如何处理新用户和新项目,以及 (B) 如何处理新交互(例如评分、点击等)。

(A) 处理新用户和新项目基本上有两种不同的策略(无论我们使用矩阵分解还是其他方式):

    从用户(人口统计、调查)或项目(价格、流派、文字描述、类别)属性估计用户/项目特征 主动学习:向与系统交互的所有用户展示新项目,或向系统的新用户展示某些项目,以平衡个人用户体验和系统获得的信息。

学术文献中有很多关于这两个问题的论文。

(B) 这确实没有问题——矩阵分解模型的增量更新不会产生高计算成本。例如看这篇论文:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.165.8010&rep=rep1&type=pdf

MyMediaLite 库(免责声明:我是主要作者)支持多种矩阵分解方法的增量更新:http://ismll.de/mymedialite

【讨论】:

如果您使用诸如增量 svd 之类的分解算法并因此“完成”用户 x 项目矩阵并且在以下情况下出现新客户 1)他们有一些评级或 2)他们没有评级如何您会在不重新运行整个 svd 的情况下对它们进行“评分”吗?在场景 1 下,您是否可以回退到对“已完成”矩阵执行 SVD(不是增量,而是标准 svd),然后使用相似性度量来查看他们最接近哪些用户,并使用已完成矩阵中的条目来提出建议? 如果您不介意,再问一个问题,因为您似乎是该领域的专家:增量 SVD (Simon Funk) 能否用于二进制数据(客户是否购买)或是否需要使用其他东西吗?谢谢!

以上是关于协同过滤的矩阵分解——新用户和项目?的主要内容,如果未能解决你的问题,请参考以下文章

19推荐系统2矩阵分解算法——协同过滤的进化

矩阵分解在协同过滤推荐算法中的应用

矩阵分解在协同过滤推荐算法中的应用

python机器学习:推荐系统实现(以矩阵分解来协同过滤)

推荐系统中的矩阵分解演变方式

简单的基于矩阵分解的推荐算法-PMF, NMF