使用随机SVD进行推荐

35
我正在翻译一篇关于IT技术的论文:《Effective Latent Models for Binary Feedback in Recommender Systems》,作者是 Maksims N. Volkovs 和 Guang Wei Yu。
该论文介绍了一种基于模型的方法,使用协同过滤方法中邻居相似度信息的SVD来生成推荐。
基本上,作者不像我们在推荐系统中使用SVD时分解用户评分矩阵R(M users * N songs),而是建议分解用户歌曲预测矩阵S(M users * N songs)或稀疏矩阵S(M users * top-k predicted songs)
因此,我们得到:
Ur,$r,Vr = sklearn.utils.extmath.randomized_svd(', n_components  = 1000)

其中 r = SVD等级 = n_components。

我们使用 UrVr 生成预测:

S(u, v) =  Ur(u, :) * Vr(v, :).T

其中 u = 用户, v = 物品v , T = 转置

我使用协同过滤方法生成了S(M*top-k)矩阵,并将其输入到randomized_svd中。

然而,上述方法生成的预测结果并不准确(截断 mAP@500,我使用的性能评估指标,mAP = 0.01),而作者对相同的kaggle百万歌曲挑战数据产生了良好的mAP达到了0.14。

要求读完论文并指出问题是很多的,但如果有人有先前的知识并能帮助我,那就太好了。


25
我建议你去Datascience Stack Exchange问这个问题,那里有很多推荐系统相关的问题,大多数人都有不错的线性代数背景。 - Jan van der Vegt
5
更适合于交叉验证(Stack Exchange)。 - joelostblom
1个回答

1

如果没有查看您的整个项目,这将是一个棘手的问题。以下是您可以做的几件事情... 1)检查是否正在对数据集进行预处理,并以与论文中描述的相同方式拆分为训练和测试集。数据预处理和拆分的差异可能会对模型的性能产生重大影响。2)模型的性能可能对超参数的选择敏感。您可以尝试尝试不同的n_components值,并查看是否可以提高性能。

我总是讨厌阅读那些论文 :-) 尝试联系作者(LinkedIn或其他来源)。他们大多数时候都会回复 - 至少对我来说是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接