什么是 kNN?

k 近邻定义

kNN 或 k 近邻算法是一种机器学习算法,它使用邻近度来比较一个数据点与其训练过的并记忆的一组数据,以进行预测。这种基于实例的学习赋予 kNN “懒惰学习”的称号,并使该算法能够执行分类或回归问题。kNN 基于这样的假设:相似的点可以彼此靠近 - 物以类聚。

作为一种分类算法,kNN 将一个新的数据点分配给其邻居中的多数集。作为一种回归算法,kNN 根据最接近查询点的值的平均值进行预测。

kNN 是一种监督学习算法,其中“k”表示分类或回归问题中考虑的最近邻居的数量,“NN”表示选择为 k 的最近邻居。

kNN 算法的简要历史

kNN 最初由 Evelyn Fix 和 Joseph Hodges 于 1951 年开发,当时是为美国军方进行的研究的一部分1。他们发表了一篇论文解释了判别分析,这是一种非参数分类方法。1967 年,Thomas Cover 和 Peter Hart 扩展了非参数分类方法,并发表了他们的“最近邻模式分类”论文2。近 20 年后,该算法由 James Keller 改进,他开发了一种“模糊 KNN”,它可以产生更低的错误率3

如今,kNN 算法因其对大多数领域的适应性而成为使用最广泛的算法 - 从遗传学到金融和客户服务。

kNN 如何工作?

kNN 算法作为一种监督学习算法工作,这意味着它被馈送它记忆的训练数据集。它依赖于这些标记的输入数据来学习一个函数,该函数在给定新的未标记数据时会产生适当的输出。

这使该算法能够解决分类或回归问题。虽然 kNN 的计算是在查询期间进行的,而不是在训练阶段进行的,但它对数据存储有重要的要求,因此严重依赖于内存。

对于分类问题,KNN 算法将根据多数分配一个类标签,这意味着它将使用在给定数据点周围最常出现的标签。换句话说,分类问题的输出是最近邻居的众数

区别:多数投票与多数投票

多数投票表示超过 50% 的任何东西都是多数。如果考虑两个类标签,则适用此规则。但是,如果考虑多个类标签,则适用多数投票。在这些情况下,超过 33.3% 的任何东西都足以表示多数,因此提供预测。因此,多数投票是定义 kNN 众数的更准确的术语。

如果我们要说明这种区别

二元预测

Y: 🎉🎉🎉❤️❤️❤️❤️❤️

多数投票:❤️

多数投票:❤️

多类设置

Y: ⏰⏰⏰💰💰💰🏠🏠🏠🏠

多数投票:无

多数投票:🏠

回归问题使用最近邻居的平均值来预测分类。回归问题将产生实数作为查询输出。

例如,如果您要制作图表来预测某人的体重与其身高之间的关系,则表示身高的值将是独立的,而表示体重的值将是依赖的。通过计算平均身高与体重比,您可以根据某人的身高(自变量)估计其体重(因变量)。

4 种计算 kNN 距离度量的类型

kNN 算法的关键是确定查询点与其他数据点之间的距离。确定距离度量可以创建决策边界。这些边界创建不同的数据点区域。有不同的方法用于计算距离

  • 欧几里得距离是最常见的距离度量,它测量查询点与被测量的另一个点之间的直线距离。
  • 曼哈顿距离也是一种流行的距离度量,它测量两个点之间的绝对值。它在网格上表示,通常被称为出租车几何 - 您如何从点 A(您的查询点)到点 B(被测量的点)旅行?
  • 闵可夫斯基距离是欧几里得距离和曼哈顿距离度量的推广,它可以创建其他距离度量。它是在赋范向量空间中计算的。在闵可夫斯基距离中,p 是定义计算中使用的距离类型的参数。如果 p=1,则使用曼哈顿距离。如果 p=2,则使用欧几里得距离。
  • 汉明距离,也称为重叠度量,是一种用于布尔向量或字符串向量的技术,用于识别向量不匹配的位置。换句话说,它测量两个等长字符串之间的距离。它特别适用于错误检测和纠错码。

vector-search-diagram-cropped-white-space.png

如何选择最佳的 k 值

要选择最佳的 k 值(即考虑的最近邻居数量),您必须尝试几个值,以找到产生最准确预测且错误最少的 k 值。确定最佳值是一个平衡行为。

  • 较低的 k 值会使预测不稳定。
    以这个例子为例:一个查询点被 2 个绿点和一个红三角形包围。如果 k=1,并且碰巧查询点最近的点是绿点之一,则该算法将错误地预测绿点作为查询结果。较低的 k 值具有高方差(模型过于贴近训练数据),高复杂度和低偏差(模型足够复杂以很好地拟合训练数据)。
  • 较高的 k 值是有噪声的。
    较高的 k 值将提高预测的准确性,因为有更多数字可以计算其众数或平均值。但是,如果 k 值过高,则可能会导致低方差,低复杂度和高偏差(模型不够复杂以很好地拟合训练数据)。

理想情况下,您希望找到一个介于高方差和高偏差之间的 k 值。还建议选择奇数 k 值,以避免分类分析中的平局。

正确的 k 值也与您的数据集有关。要选择该值,您可以尝试找到 N 的平方根,其中 N 是训练数据集中数据点的数量。交叉验证策略也可以帮助您选择最适合您的数据集的 k 值。

kNN 算法的优势

kNN 算法通常被描述为“最简单”的监督学习算法,这导致了它的几个优点。

  • 简单:kNN 易于实现,因为它既简单又准确。因此,它通常是数据科学家学习的第一个分类器之一。
  • 适应性:一旦新的训练样本被添加到其数据集中,kNN 算法就会调整其预测以包含新的训练数据。
  • 易于编程:kNN 只需要几个超参数——k 值和距离度量。这使得它成为一个相当简单的算法。

此外,kNN 算法不需要训练时间,因为它存储训练数据,并且它的计算能力仅在进行预测时使用。

kNN 的挑战和局限性

虽然 kNN 算法很简单,但它也具有一系列挑战和局限性,部分原因是它的简单性。

  • 难以扩展:由于 kNN 占用大量内存和数据存储,因此它带来了与存储相关的费用。这种对内存的依赖也意味着该算法在计算上很密集,这反过来又需要大量的资源。
  • 维数灾难:这指的是计算机科学中的一种现象,其中一组固定的训练示例受到越来越多的维度和这些维度中特征值的固有增加的挑战。换句话说,模型的训练数据无法跟上超空间不断变化的维度。这意味着预测变得不太准确,因为查询点与相似点之间的距离会变大——在其他维度上。
  • 过拟合:如前所述,k 的值会影响算法的行为。当 k 的值过低时,尤其会发生这种情况。较低的 k 值可能会过拟合数据,而较高的 k 值会“平滑”预测值,因为该算法在更大的区域内对值进行平均。

kNN 的主要用例

kNN 算法因其简单性和准确性而广受欢迎,它具有多种应用,尤其是在用于分类分析时。

  • 相关性排序:kNN 使用自然语言处理 (NLP) 算法来确定哪些结果与查询最相关。
  • 图像或视频的相似性搜索:图像相似性搜索使用自然语言描述从文本查询中找到匹配的图像。

blog-elastic-step-3-result-matching-images.png

  • 模式识别:kNN 可用于识别文本或数字分类中的模式。
  • 金融:在金融领域,kNN 可用于股市预测、汇率等。
  • 产品推荐和推荐引擎:想想 Netflix!“如果您喜欢这个,我们认为您也会喜欢……”任何使用该句子的网站,无论是否公开,都可能使用 kNN 算法来为其推荐引擎提供动力。
  • 医疗保健:在医学和医学研究领域,kNN 算法可用于遗传学,以计算某些基因表达的概率。这使医生能够预测癌症、心脏病或任何其他遗传疾病的可能性。
  • 数据预处理:kNN 算法可用于估计数据集中缺失的值。

使用 Elastic 进行 kNN 搜索

Elasticsearch 使您能够实现 kNN 搜索。支持两种方法:近似 kNN 和精确的暴力 kNN。您可以在相似性搜索、基于 NLP 算法的相关性排序以及产品推荐和推荐引擎的背景下使用 kNN 搜索。

使用 Elastic 实现 kNN 搜索

blog-elastic-front-end-platform.png


K 最近邻常见问题解答

何时使用 kNN?

使用 kNN 根据相似性进行预测。因此,您可以使用 kNN 在自然语言处理算法的背景下进行相关性排序,用于相似性搜索和推荐引擎,或产品推荐。请注意,当您拥有一个相对较小的数据集时,kNN 很有用。

kNN 是监督学习还是无监督学习?

kNN 是监督学习。它被提供了一组它存储的数据,并且仅在查询时处理数据。

kNN 代表什么?

kNN 代表 k 最近邻算法,其中 k 表示分析中考虑的最近邻的数量。


您接下来应该做什么

无论何时您准备就绪……以下 4 种方法可以帮助您将数据带到您的业务中

  1. 开始免费试用,看看 Elastic 如何帮助您的业务。
  2. 浏览我们的解决方案,了解 Elasticsearch 平台的工作原理以及我们的解决方案如何满足您的需求。
  3. 了解如何设置您的 Elasticsearch 集群,并通过我们 45 分钟的网络研讨会开始数据收集和摄取。
  4. 与您认识的可能喜欢阅读这篇文章的人分享。通过电子邮件、LinkedIn、Twitter 或 Facebook 与他们分享。

脚注

  1. Silverman, B.W. & Jones, M.C. (1989). E. Fix 和 J.L Hodes (1951):对非参数判别分析和密度估计的重要贡献:关于 Fix 和 Hodges (1951) 的评论。国际统计研究所 (ISI) / 国际统计评论,57(3),233–238。 https://doi.org/10.2307/1403796
  2. T. Cover 和 P. Hart,“最近邻模式分类”,IEEE 信息论学报,第 13 卷,第 1 期,第 21-27 页,1967 年 1 月,doi:10.1109/TIT.1967.1053964。 https://ieeexplore.ieee.org/document/1053964/authors#authors
  3. K 最近邻算法:分类和回归之星,数据科学史,访问时间:2023 年 10 月 23 日,https://www.historyofdatascience.com/k-nearest-neighbors-algorithm-classification-and-regression-star/