4

我已经训练了一个SVD模型来推荐基于userId. 但是,有没有办法根据项目列表而不是推荐项目userId

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

那是,

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

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

4

1 回答 1

3

你描述的不是很清楚。我猜你的意思是你想要基于项目的推荐,就像亚马逊正在做的那样?.

可以通过多种方式确定两个商品之间的相似度,但常用的方法是使用我们前面描述的余弦测度,其中每个向量对应一个商品而不是客户,向量的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 作为最佳匹配。直觉是我们累积相似性贡献并比较它们的聚合贡献。

于 2013-01-31T05:05:22.097 回答