2015-02-11 78 views
2

我很好奇基于类似推荐的算法。我的意思是人们可以“喜欢”某些东西,但他们不能“不像”某种东西。这种情况下有什么样的推荐算法。基于类似的推荐

我有一个想法,但我不认为它的可扩展性。我的想法是创建一个图表,其中每个可爱的项目对于每个其他喜欢的项目具有边缘容量,其中边缘容量是喜欢这两个项目的用户数量的共同点。然后为某个用户提供建议,可以增加图形,以便用户是源节点,并且对用户喜欢的所有项目具有无限边缘。用户不喜欢的所有项目都具有无限容量的边缘到目的节点。然后使用Ford-Fulkerson运行最大流量,并根据目的地的边缘流量对建议进行排序。然而,一想到它,一张1000个或更多的图表就会很快失去控制。

我曾经想过其他系统如协作过滤器,但我不确定他们会很好地工作,考虑到没有投票或多个喜欢的比例。因此,“不喜欢”与“尚未喜欢”无法区分。

我会很感激任何想法或资源。

+0

“看到和不喜欢”与“看不见”有很大区别。如果用户看过某件物品,您是否有数据?看到和不喜欢有时用作弱“反感” – amit 2015-02-11 06:40:21

回答

3

有一些点,你可以使用:

  1. 有“见过,不喜欢”到“没有看到”有很大的区别。通常,“看到和不喜欢”被用作弱的“不喜欢”,然后你可以使用协作过滤。
  2. 您仍然可以找到基于喜欢的“类似用户”,并基于一组类似用户(喜欢类似的东西) - 您可以推荐他们喜欢的物品。如果他们喜欢的项目集合具有较高的Jaccard similarity(例如),则可以确定两个用户“相似”,并推荐大部分“相似”用户喜欢的项目。

您可能会搜索更多选择的文献,这是过去几年www conference的热门话题,新方法总是在不断发展。

+0

我明白了。因此,使用jaccard相似度,每个建议的费用大约为O(N * M),其中N是用户数量,M是项目数量。实际上,性能会随着2 * M是喜欢的项目的平均数量或类似的东西。现在考虑可能有一百万用户和每个用户喜欢的1000个项目,我们可能需要稍快些的东西。增量方法会在每个新的“喜欢”上花费O(N)。我想这是协作过滤开始蓬勃发展的地方。有什么想法吗? – Chet 2015-02-11 19:36:44