通过矩阵分解与逻辑损失函数进行协同过滤

机器算法验证 机器学习 推荐系统 矩阵分解
2022-03-15 11:24:22

考虑协同过滤问题。我们有矩阵M大小#users * #items。Mi,j=1如果用户 i 喜欢项目 j,Mi,j=0如果用户 i 不喜欢项目 j 并且Mi,j=?如果没有关于 (i,j) 对的数据。我们想预测Mi,j对于未来的用户,项目对。

标准协同过滤方法是将 M 表示为 2 个矩阵的乘积U×V这样||MU×V||2是最小的(例如,最小化已知元素的均方误差M)。

对我来说,逻辑损失函数似乎更合适,为什么所有算法都使用 MSE?

2个回答

在音乐推荐的背景下(使用播放次数),我们在 Spotify 使用逻辑损失进行隐式矩阵分解。我们刚刚在即将召开的 NIPS 2014 研讨会上发表了一篇关于我们方法的论文。这篇论文的标题是隐式反馈数据的逻辑矩阵分解,可以在这里找到http://stanford.edu/~rezab/nips2014workshop/submits/logmat.pdf

这篇论文的代码可以在我的 Github 上找到https://github.com/MrChrisJohnson/logistic-mf

您会在该主题上找到的大多数论文都将处理评级为 [0,5] 的矩阵。例如,在 Netflix Prize 的上下文中,矩阵具有从 1 到 5 的离散评分(+ 缺失值)。这就是为什么平方误差是最分散的成本函数。可以看到其他一些误差度量,例如 Kullback-Leibler 散度。

标准矩阵分解可能出现的另一个问题是矩阵UV的某些元素可能是负数(尤其是在第一步期间)。这就是为什么您不会在这里使用对数损失作为成本函数的原因。

但是,如果您谈论的是非负矩阵分解,您应该能够使用对数损失作为您的成本函数。您处于与 Logistic 回归类似的情况,其中 log-loss 用作成本函数:您的观察值是 0 和 1,并且您预测一个介于 0 和 1 之间的数字(概率)。