我已经训练了一个SVD模型来推荐基于userId的项目。但是,是否有任何方法可以根据项目列表而不是userId推荐项目?
例如,给定一个项目列表,[1,2,3,4,5]、SVD模型会找到最相似的项[9,10]。我的解决方案是从输入[9,10]中查找每个条目的相似项,并将公共项作为输出。
那是,
[9,10,12]和[9,10,13]。所以常见的项目是[9,10],但我不知道是否有更好的方法。
发布于 2013-01-31 05:05:22
对你描述的不太清楚。我想你的意思是你想要基于项目的建议,比如亚马逊正在做什么?
两个项目之间的相似性可以通过各种方式确定,但常用的方法是使用我们前面描述的余弦度量,其中每个向量对应于一个项目,而不是一个客户,向量的
M维度对应于购买该项目的客户。

该算法需要密集的离线处理来准备最近的项目.一旦它们完成,对类似项查询的响应就会非常快。
编辑
一旦您知道了每个项目的顶级k相似项,您就可以为每个项目对(即两个相似项是如何相似的)或score(i,j)进行评分。
给出一个项目列表:[1,2,3]
首先,您将为列表中的每个项目找到顶级的k项。他们每个人都有一个分数。假设k=3
`[100,44,99]` are the top 3 items that are similar to item 1.
score(1, 100) = 0.84, score(1, 44) = 0.4, score(1, 99) = 0.33
score(2, 44 ) = 0.3, score(2, 33) = 0.2, score(2, 70) = 0.15
score(3, 99) = 0.4, score(3, 44) = 0.15, score(3, 70) = 0.01然后,将score([1-3],__)中所有项目的得分汇总起来,即:
score(100) = 0.84
score(44) = 0.4 + 0.3 + 0.13 = 0.83
score(99) = 0.33 + 0.2 = 0.53
score(33) = 0.2
score(70) = 0.15+0.01=0.16排序后,您知道自上而下项应该是:
100-> 0.84
44 -> 0.83
99 -> 0.53
33 -> 0.2
70 -> 0.16当然,在推荐项的最终列表中,您可能希望删除给定列表(用户已经拥有的项)中的任何内容。
请注意,在上面的示例中,虽然项目44以3行的形式出现,但它们的所有相似性分数都很低。我们仍然选择第100项作为最好的匹配。直觉是,我们积累相似贡献,并比较它们的累计贡献。
https://stackoverflow.com/questions/14618226
复制相似问题