一尘不染

协作过滤:非个性化的项到项相似性

algorithm

我正在尝试按照亚马逊的“查看/购买X的客户也查看/购买Y和Z”来计算项目之间的相似度。我所见过的所有示例和参考都用于计算排名项目的项目相似度,查找用户-
用户相似度或用于根据当前用户的历史记录查找推荐项目。在考虑当前用户的偏好之前,我想从一种非针对性的方法开始。

查看Amazon.com建议白皮书,他们使用以下逻辑实现离线项相似性:

For each item in product catalog, I1 
  For each customer C who purchased I1
    For each item I2 purchased by customer C
       Record that a customer purchased I1 and I2
  For each item I2 
    Compute the similarity between I1 and I2

如果我理解正确,那么当我们进入“ I1和I2之间的计算相似性”时,我已经获得了与单个值I1(外环)一起购买的物品(I2)的列表。

该计算如何进行?

另一个想法是我想得太多了,使事情变得比我需要的困难。是否足以对与I1一起购买的I2数量进行top-n查询?

对于这种方法是否正确的建议,我也表示赞赏。我的产品数据库随时有大约15万个商品。由于我看过的大部分阅读材料都显示出用户项目相似性,甚至显示了用户与用户之间的相似性,因此我应该选择这种方式。

我过去曾使用相似性算法,但它们始终涉及排名或得分。我认为,唯一可行的方法是为未购买/购买的客户产品矩阵建立得分0/1。给定购买历史和商品尺寸,这可能会变得很大。

编辑:尽管我列出了python作为标记,但我还是希望将逻辑保留在数据库中,最好使用Oracle PL / SQL。


阅读 217

收藏
2020-07-28

共1个答案

一尘不染

O’Reilly有一本很好的。尽管白皮书可能会像这样用伪代码列出逻辑,但我认为这种方法无法很好地扩展。这些计算都是概率计算,因此贝叶斯定理之类的东西习惯于说:“给人A购买X,他们购买Z的可能性是多少?”
直接循环访问数据的工作太辛苦了。您必须为每个人完成所有步骤。

2020-07-28