通过具有Logistic损失函数的矩阵分解进行协同过滤


9

考虑协作过滤问题。我们有#users * #items个大小的矩阵如果用户i喜欢项目j,则如果用户i不喜欢项目j,则,并且如果没有关于(i,j)对的数据。我们希望为将来的用户项对预测。中号中号一世Ĵ=1个中号一世Ĵ=0中号一世Ĵ=中号一世Ĵ

标准协作过滤方法是将M表示为2个矩阵乘积,从而ü×V||中号-ü×V||2 是最小的(例如,最小化已知元素的均方误差 中号)。

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


1
在这种情况下,这很有意义,但是大多数情况下M_i,j可以是一个等级,在这种情况下,MSE更为有用。我会说MSE更为笼统。
2013年

Answers:


9

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

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


1
L(R | X,Y,β)= Prod(p(lui | xu,yi,βu,βi)^α.r_ui*(1 − p(lui | xu,yi,βu,βi))^ (1- α.r_ui) A看了一下您的代码,您确实使用了1 +α.r_uil64:A =(self.counts + self.ones)* A github.com/MrChrisJohnson/logistic-mf/blob/master/ …因此,我想念什么吗?亲切的问候
fstrub 2015年

我看了你发表的论文。这是非常有趣的,因为尚未积极研究具有逻辑回归的矩阵分解。无论如何,我对您的损失函数(2)有点困惑,L(R | X,Y,β)= Prod(p(lui | xu,yi,βu,βi)^α.r_ui*(1 − p(lui | | xu,yi,βu,βi))关于(3),我认为存在错字错误L(R | X,Y,β)= Prod(p(lui | xu,yi,βu,βi)^α .r_ui *(1 − p(lui | xu,yi,βu,βi))^ (1 +α.r_ui)但是,实际上我还是有些困惑,的确,我本来希望像伯努利这样的定律如
fstrub

也许我在这个主题上还很晚。有人有机会在音乐推荐的背景下而不是在产品推荐的经典背景下尝试这种算法?谢谢。
Marco Fumagalli

3

您会在该主题上找到的大多数论文都将涉及等级为[0,5]的矩阵。例如,在Netflix奖中,矩阵的离散等级从1到5(+缺失值)。这就是为什么平方误差是分布最广泛的成本函数的原因。可以看到其他一些错误度量,例如Kullback-Leibler散度。

标准矩阵分解可能发生的另一个问题是矩阵UV的某些元素可能为(尤其是在第一步中)。这就是为什么您不将对数损失用作成本函数的原因。

但是,如果您正在谈论非负矩阵分解,则应该能够将对数损失用作成本函数。您的情况与Logistic回归类似,在这种情况下,对数损失用作成本函数:您的观察值为0到1,并且您预测的数字(概率)在0到1之间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.