您描述的不是很清楚。我猜您是想要基于物品的推荐,就像亚马逊所做的那样?
两个物品之间的相似度可以用各种方法确定,但常见的方法是使用我们先前描述的余弦测量,其中每个向量对应于一个物品而不是客户,向量的M
维对应于购买该物品的客户。
![enter image description here](https://istack.dev59.com/owBNG.webp)
这个算法需要进行大量的离线处理来准备最相似的物品。一旦完成,响应类似物品查询的速度非常快。
编辑
一旦您知道每个物品的前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号项目作为最佳匹配项。直觉是我们累积相似性贡献并比较它们的聚合贡献。