物品到物品Amazon协作过滤

时间:2015-04-23 17:58:12

标签: algorithm similarity recommendation-engine collaborative-filtering

我正在尝试完全理解项目到项目亚马逊的算法,将其应用到我的系统,以推荐用户可能喜欢的项目,匹配用户喜欢的先前项目。

到目前为止,我已阅读过这些内容:Amazon paperitem-to-item presentationitem-based algorithms。我也找到了这个question,但之后我就更加困惑了。

我能说的是,我需要按照以下步骤获取推荐项目列表:

  1. 让我的数据设置为用户喜欢的项目(我设置了喜欢= 1而不喜欢= 0)。
  2. 使用Pearson相关分数(这是怎么做的?我找到了公式,但有没有例子?)。
  3. 那我该怎么办?
  4. 所以我提出了这个问题:

    1. 项目到项目和基于项目的过滤有什么区别?两种算法都一样吗?
    2. 用喜欢与否取代排名得分是否正确?
    3. 使用物品到物品算法是对的,还是有其他更适合我的案例?
    4. 有关此主题的任何信息都将不胜感激。

1 个答案:

答案 0 :(得分:4)

很棒的问题。

考虑一下你的数据。你可能有一元(消耗或空),二元(喜欢和不喜欢),三元(喜欢,不喜欢,未知/ null),或连续(空和一些数字刻度),甚至有序(空和一些有序刻度) 。不同的算法可以更好地处理不同的数据类型。

项目项协同过滤(也称为基于项目)最适合数字或序数标度。如果您只有一元数据,二进制数据或三元数据,那么使用关联规则挖掘等数据挖掘算法可能会更好。

给定用户矩阵及其项目评级,您可以计算每个项目与其他项目的相似度。矩阵操作和计算内置于许多库中:例如,在Python中尝试scipy和numpy。您可以迭代项目并使用内置矩阵计算来完成https://en.wikipedia.org/wiki/Cosine_similarity中的大部分工作。或者下载像Mahout或Lenskit这样的框架,它可以为您完成此任务。

现在你有一个每个项目与其他项目相似的矩阵,你可能想为用户U建议项目。所以看看她的项目历史。对于每个历史项目I,对于数据集ID中的每个项目,将I与ID的相似度添加到候选项目分数列表中。当您浏览完所有历史记录项目后,按分数降序对候选项目列表进行排序,并推荐排名靠前的项目。

要回答剩下的问题:连续或有序的比例将为您提供最佳的协作过滤结果。不要使用"喜欢"与#34; unliked"如果您有更好的数据,请进行扩展。

矩阵分解算法表现良好,如果您没有多少用户而且您的评级矩阵没有很多更新,您还可以使用用户 - 用户协作过滤。首先尝试项目项:它是一个很好的通用推荐算法。