【问题标题】:K nearest neighbour vs User based nearest neighbourK 最近邻与基于用户的最近邻
【发布时间】:2011-12-06 06:16:48
【问题描述】:

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

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    k-Nearest Neighbors 算法是一种更通用 算法和领域无关,而基于用户的方法是领域特定的并且可以被视为 k-Nearest Neighbors 方法的一个实例。

    在 k-Nearest Neighbors 方法中,您可以使用特定的相似性度量来确定与某个数据点 x 最接近的 k 个数据点。然后,您可以使用这个本地邻域对 x 的某些(未知)属性进行一些预测,例如它的类标签(分类)或某个属性值(回归)。数据点和 x 之间的 接近度 可以使用您定义的任何 相似度函数 来衡量(例如欧几里得距离、余弦相似度)。此外,距离x较远的点对x感兴趣值的预测影响较小。例如,通过您定义的一些加权函数,您可以对 x 附近的数据点进行加权,与它们与 x 的距离成反比。直觉是,x 的点越远,它对 x 的预测的影响就越小,因为它不太相似。最后,参数 k 决定了您希望考虑多少个数据点来构建这个本地邻域。

    基于用户的最近邻是一种来自信息检索(IR)领域的协同过滤方法。您在问题中使用“基于用户”这一事实意味着您指的是特定域,通常基于一些用户行为,例如用户评价/购买了哪些电影/产品以及什么基于此,该人可能会喜欢其他电影。在这个域中,丢失多个值的频率要高得多,例如几乎没有人评价或购买大多数产品/服务。但是,您可以实现基于用户的最近邻域算法,使其等效于 k-Nearest Neighbors 方法。再次,您可以基于一些 相似度函数 计算 x(用户)和所有其他数据点(用户)之间的相似度,并使用 加权函数。 x 和其他数据点的相似性仅在非缺失值上定义,k 可以设置为包括所有数据点(但不是必需的)。为了加快计算找到 x 的局部邻域,您可以使用诸如 Locality Sensitive Hashing 之类的技术,并仅使用 k x 中的缺失值,表明用户之前没有购买/使用过服务。如果基于 x 的局部邻域,可以预测缺失值的高值,您可以使用它向用户宣传该项目。

    简而言之,基于用户的方法只是信息检索特定领域中最常用的 k-最近邻算法的一个实例。

    【讨论】:

      【解决方案2】:

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

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

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

      首先,KNN 并不是第一种方法的主要特征。它只是一种在整个集合中查找最近项目的算法,因此它也可以用于协同过滤。最重要的想法在于术语“相似性”。要向相关用户推荐某些内容,您可以从他的社区中找到具有相似个人资料的人。例如,您想在 Facebook 上为用户 John 进行推荐。您查看他的 Facebook 个人资料,然后查看他朋友的个人资料。你找到 10 个人资料相似的人,然后检查他们喜欢什么。如果 10 个人中有 8 个人喜欢新电影,那么约翰很可能也会喜欢它。

      所以,这里有两个重点:

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

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

      第二种方法(协同过滤)

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

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

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

      所以,这里的重点是:

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

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

      【讨论】:

        【解决方案3】:

        我将举例说明两种方法:

        这两种方法之间的区别与向你的邻居询问与向你的朋友询问相比几乎相同:

        • 协同过滤的两个人之间的相似度是 按您共享的偏好定义
        • K 近邻的相似度由距离定义(但 距离可以与协同过滤相同)

        此外,在第一种情况下,您查看 K neighbourgh(这是一个固定数字),而在第二种情况下,您查看所有数据集。

        在某些情况下,可以提供比其他更好的建议:

        例如:

        如果我想买一台电视机,我问住在大房子里的朋友,他会建议我买一个大屏幕。但是住在我隔壁公寓的邻居会建议我买一个小的,因为大的不适合他的公寓。 (类似于我的)。 所以在这种情况下,我的邻居建议更好。

        如果我想买电影,我最好的朋友肯定会给我比邻居更好的建议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-12
          • 2018-04-08
          • 2014-05-14
          • 2019-01-03
          • 2013-03-21
          • 2014-05-12
          • 1970-01-01
          相关资源
          最近更新 更多