首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用svd根据项目推荐项目

如何使用svd根据项目推荐项目
EN

Stack Overflow用户
提问于 2013-01-31 03:59:25
回答 1查看 829关注 0票数 4

我已经训练了一个SVD模型来推荐基于userId的项目。但是,是否有任何方法可以根据项目列表而不是userId推荐项目?

例如,给定一个项目列表,[1,2,3,4,5]SVD模型会找到最相似的项[9,10]。我的解决方案是从输入[9,10]中查找每个条目的相似项,并将公共项作为输出。

那是,

  • 与第1项相似的项目是[9,10,12]
  • 与第2项相似的项目是[9,10,13]

所以常见的项目是[9,10],但我不知道是否有更好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-31 05:05:22

对你描述的不太清楚。我想你的意思是你想要基于项目的建议,比如亚马逊正在做什么?

两个项目之间的相似性可以通过各种方式确定,但常用的方法是使用我们前面描述的余弦度量,其中每个向量对应于一个项目,而不是一个客户,向量的M维度对应于购买该项目的客户。

该算法需要密集的离线处理来准备最近的项目.一旦它们完成,对类似项查询的响应就会非常快。

编辑

一旦您知道了每个项目的顶级k相似项,您就可以为每个项目对(即两个相似项是如何相似的)或score(i,j)进行评分。

给出一个项目列表:[1,2,3]

首先,您将为列表中的每个项目找到顶级的k项。他们每个人都有一个分数。假设k=3

代码语言:javascript
复制
`[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],__)中所有项目的得分汇总起来,即:

代码语言:javascript
复制
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

排序后,您知道自上而下项应该是:

代码语言:javascript
复制
100-> 0.84
44 -> 0.83
99 -> 0.53
33 -> 0.2
70 -> 0.16

当然,在推荐项的最终列表中,您可能希望删除给定列表(用户已经拥有的项)中的任何内容。

请注意,在上面的示例中,虽然项目44以3行的形式出现,但它们的所有相似性分数都很低。我们仍然选择第100项作为最好的匹配。直觉是,我们积累相似贡献,并比较它们的累计贡献。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14618226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档