我培训了一个SVD
模型来推荐基于userId
的项目。但是,有没有办法根据项目列表而不是userId
推荐项目?
例如,给定项目列表,[1,2,3,4,5]
,SVD
模型会找到最相似的项[9,10]
。我的解决方案是从输入[9,10]
中找到每个项目的类似项目,并将常用项目作为输出。
即,
[9,10,12]
和[9,10,13]
。因此常见项目为[9,10]
,但我不知道是否有更好的方法。
答案 0 :(得分:3)
对你所描述的内容不太清楚。我想你的意思是你想要基于项目的建议,比如Amazon正在做什么? 。
两者之间的相似性 项目可以通过各种方式确定,但通常的方法是 使用我们之前描述的余弦量度,其中 每个向量对应一个项而不是一个 客户,矢量的
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作为最佳匹配。直觉是我们积累相似性贡献并比较它们的聚合贡献。