使用randomized_svd进行推荐

cru*_*fux 8 python matlab sparse-matrix pandas scikit-learn

我正在撰写文章:Maksims N. Volkovs和​​Guang Wei Yu 论文链接中有关推荐系统中二进制反馈的有效潜在模型.

它是通过使用来自协同过滤方法的邻居相似性信息,使用基于模型的方法,SVD来产生推荐.

所以基本上作者不是R(M users * N songs)像在SVD中那样分解用户评级矩阵进行推荐,而是分解用户歌曲预测矩阵S(M users * N songs)或稀疏矩阵S(M users * top-k predicted songs).

我们得到了,

Ur,$r,Vr = sklearn.utils.extmath.randomized_svd(', n_components  = 1000)
Run Code Online (Sandbox Code Playgroud)

哪里 r = SVD rank = n_components.

我们确实使用Ur和 生成预测Vr:

S(u, v) =  Ur(u, :) * Vr(v, :).T
Run Code Online (Sandbox Code Playgroud)

哪里 u = user, v = item v , T = transpose

S(M*top-k)使用协同过滤方法生成矩阵并馈送到randomized_svd

但是通过上述方法产生的预测不会产生准确性(truncated mAP@500我正在使用的性能测量,mAP = 0.01),而作者已经为相同的kaggle百万歌曲挑战数据挑战链接产生了0.14的良好mAP .

要求阅读论文并说出错误是很多,但如果有人事先知道并且可以帮助我,那将是很好的.

如果这是一个错误的论坛,问这样的Q请告诉我另一个.

小智 1

如果不审查整个项目,这是一项艰巨的任务。您可以执行以下操作... 1) 检查您是否正在预处理数据集并将其拆分为训练集和测试集,方法与本文所述相同。数据预处理和分割的差异会对模型的性能产生重大影响2)模型的性能可能对超参数的选择敏感。您可以尝试使用不同的 n_components 值进行试验,看看是否可以提高性能。

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