AI 入门 101

什么是KNN(K-Nearest Neighbors)?

mm

什么是KNN(K-Nearest Neighbors)?

KNN是一种机器学习技术和算法,可以用于回归和分类任务KNN检查目标数据点周围的选定数量的数据点的标签,以便对该数据点所属的类别做出预测。 KNN是一个概念上简单却非常强大的算法,因此它是最流行的机器学习算法之一。让我们深入了解KNN算法的工作原理。了解KNN的工作原理将使您能够理解KNN的最佳和最差用例。

KNN的概述

图片:Antti Ajanki AnAj via Wikimedia Commons,CC BY SA 3.0(https://commons.wikimedia.org/wiki/File:KnnClassification.svg)

让我们在2D平面上可视化一个数据集。想象一堆数据点散布在图表上,形成小的集群。 KNN检查数据点的分布,并根据模型的参数,将数据点分成组。这些组被分配一个标签。 KNN模型的主要假设是,相邻的数据点/实例是高度相似的,而如果一个数据点远离另一个组,则它与这些数据点不相似。

KNN模型使用图上两点之间的距离来计算相似度。两点之间的距离越大,它们就越不相似。有多种方法可以计算两点之间的距离,但最常用的距离度量是欧几里得距离(两点之间的直线距离)。

KNN是一种监督学习算法,这意味着数据集中的示例必须有标签。关于KNN还有两件重要的事情需要知道。首先,KNN是一种非参数算法。这意味着在使用模型时,不对数据集做出任何假设。相反,模型完全由提供的数据构建。其次,在使用KNN时,不会将数据集分成训练和测试集。 KNN不对训练和测试集进行概括,因此所有训练数据也用于模型进行预测时。

KNN算法的工作原理

KNN算法在执行时经过三个主要阶段:

  1. 将K设置为所选的邻居数量。
  2. 计算提供的/测试示例和数据集示例之间的距离。
  3. 对计算的距离进行排序。
  4. 获取前K个条目的标签。
  5. 对测试示例返回一个预测。

在第一步中,用户选择K,并告诉算法在对目标示例进行判断时应考虑多少个邻居(多少个周围的数据点)。在第二步中,请注意模型检查目标示例和数据集中的每个示例之间的距离。距离被添加到一个列表中并进行排序。之后,排序后的列表被检查,并返回前K个元素的标签。换句话说,如果K设置为5,模型检查目标数据点最接近的5个数据点的标签。当对目标数据点进行预测时,任务是回归还是分类是很重要的。对于回归任务,使用前K个标签的平均值,而对于分类任务,使用前K个标签的模式。使用KNN模型时,所使用的确切数学运算取决于所选择的距离度量。如果您想了解更多关于如何计算这些度量的信息,您可以阅读有关一些最常见的距离度量的内容,例如欧几里得距离曼哈顿距离明可夫斯基距离

K的值为什么重要

使用KNN的主要限制是可能选择了不正确的K值(要考虑的邻居数量)。如果发生这种情况,返回的预测可能会有很大差异。使用KNN算法时,选择正确的K值非常重要。您希望选择一个K值,使模型能够对未见数据进行预测的能力最大化,同时减少错误的数量。

图片:Agor153 via Wikimedia Commons,CC BY SA 3.0(https://en.wikipedia.org/wiki/File:Map1NN.png)

K的较低值意味着KNN的预测不太稳定和可靠。为了理解为什么会这样,请考虑一个场景,我们有7个邻居围绕一个目标数据点。假设KNN模型使用K值2(我们要求它查看两个最接近的邻居来进行预测)。如果大多数邻居(7个中的5个)属于蓝色类别,但两个最接近的邻居恰好是红色,则模型将预测查询示例为红色。尽管模型的猜测,在这种情况下,蓝色将是一个更好的猜测。

如果是这种情况,为什么不选择最高的K值?这是因为告诉模型考虑太多邻居也会降低准确性。随着KNN模型考虑的半径增加,它最终会开始考虑更接近其他组的数据点,而不是目标数据点,误分类就会开始发生。例如,即使最初选择的点位于红色区域之一,如果K设置得太高,模型也会到其他区域考虑点。当使用KNN模型时,会尝试不同的K值,以查看哪个值给模型带来了最佳性能。

KNN的优缺点

让我们来看看KNN模型的一些优缺点。

优点:

KNN可以用于回归和分类任务,这与其他一些监督学习算法不同。

KNN非常准确,使用简单。它易于解释、理解和实现。

KNN不对数据做出任何假设,这意味着它可以用于广泛的问题。

缺点:

KNN存储大部分或所有数据,这意味着模型需要大量内存,并且计算成本高。大量数据集也可能导致预测需要很长时间。

KNN对数据集的规模非常敏感,并且容易被不相关的特征干扰,尤其是与其他模型相比。

KNN的总结

KNN是最简单的机器学习算法之一。尽管KNN的概念很简单,但它也是一个强大的算法,在大多数问题上都能提供相当高的准确性。当您使用KNN时,请确保尝试不同的K值,以找到提供最高准确性的数字。

博客作者和程序员,专攻 Machine Learning Deep Learning 领域。Daniel 希望帮助他人利用 AI 的力量为社会做好事。