algorithm - K最近邻与基于用户的最近邻

标签 algorithm

我正在阅读推荐系统 wikipedia关于“算法”的部分似乎表明 K 最近邻和基于协同过滤的基于用户的算法是两个不同的东西。它是否正确?以我的理解,他们不是一样的吗?如果不是,它们之间有什么区别?谢谢。

最佳答案

不完全是。它们很相似(它们有相同的想法),但它们之间有几个主要区别。事实上,维基百科上的文章只描述了实现推荐系统的两种最不同的方法,但是有更多的方法同时使用了这两种方法的想法。

这就是我对维基百科文章的理解。

第一种方法(KNN/profiles 相似度)

首先,KNN 不是第一种方法的主要特征。它只是一种在整个集合中寻找最近项的算法,因此它也可以用于协同过滤。最重要的思想在于一个术语“相似性”。要向有问题的用户推荐一些东西,您需要从他附近的人那里找到具有相似个人资料的人。例如,你想在 Facebook 上为用户 John 做推荐。您查看他的 Facebook 个人资料,然后查看他 friend 的个人资料。您找到 10 个具有相似个人资料的人并检查他们喜欢什么。如果 10 个具有相似概况的人中有 8 个喜欢新电影,约翰很可能也会喜欢它。

所以,这里有两点很重要:

  • 您查看用户的社区
  • 您衡量他们个人资料相似度

维基百科文章没有涉及如何找到相似性度量的问题,但是有很多方法,包括在个人资料文本中搜索常用术语,找到最好的 friend (我在他们之间的消息数,连接图分析等)和许多其他人。

第二种方法(协同过滤)

在第二种方法中,您不需要分析社区并找到相似的配置文件,但您需要收集用户的选择。让我们记忆一下 Facebook 用户 John 的例子。想象一下,我们可以获得所有 Facebook 用户的所有“喜欢”,包括 John 的用户。有了它们,您可以构建非常大的相关矩阵,其中行是用户 ID,列是他们可能“喜欢”的所有可能项目。如果实际“喜欢”了一个项目,则当前用户和当前项目的单元格设置为 1,否则为 0。

有了这样的矩阵(构建的或抽象的),您可以使用 association mining找到最强大的协会。比如,喜欢《加勒比海盗2》的10000人也喜欢《加勒比海盗3》,但其中只有500人喜欢《电锯惊魂》。所以我们可以假设 2 集“海盗”之间的关联要强得多。请注意,我们既没有分析用户,也没有分析电影本身(我们没有考虑电影名称、情节、 Actor 或类似的东西——只有“喜欢”)。这是协同过滤相对于基于相似性的方法的主要优势。

最后,要向我们的用户 John 推荐电影,您只需遍历他的“喜欢”并找到与当前项目关联最强的其他项目。

所以,这里要点是:

  • 您不使用邻居,而是所有用户的完整数据库
  • 您使用人们的选择并找到关联

这两种方法各有优缺点。第一种方法基于人与人之间的某种联系(例如 Facebook 上的 friend ),很难用于像亚马逊这样的服务。同时,第二种方法基于所有用户的平均偏好,因此对于偏好差异很大的系统来说不是好的选择。

关于algorithm - K最近邻与基于用户的最近邻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742706/

相关文章:

algorithm - apache spark 上的不相交集

algorithm - 傅里叶除法算法背后的逻辑是什么?

python - 精确变化算法

java - 寻找组合位的算法的奇怪行为

performance - 用于跟踪过去 X 小时数据的数据结构

algorithm - 计算二叉树中叶子数的并行算法

algorithm - 给定有一个负边 (u,v) 的有向加权图,找到最短路径 (s,t)

c# - 连接组件标记算法有问题

c++ - 遍历 multiset 元素的所有组合

c++ - 冒泡排序擅长什么?