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