你描述的不是很清楚。我猜你的意思是你想要基于项目的推荐,就像亚马逊正在做的那样?.
可以通过多种方式确定两个商品之间的相似度,但常用的方法是使用我们前面描述的余弦测度,其中每个向量对应一个商品而不是客户,向量的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 作为最佳匹配。直觉是我们累积相似性贡献并比较它们的聚合贡献。