k 最近邻 (KNN) 算法是一种非参数化的监督学习分类器,它利用邻近度来对单个数据点的分组进行分类或预测。它是当今机器学习中使用得最广泛且也是最简便的分类与回归分类器之一。
虽然 KNN 算法可用于回归或分类问题,但它通常会用作分类算法,其假设为可在彼此附近找到相似点。
对于分类问题,类标签会根据多数票来分配;即,使用在给定数据点周围出现频率最高的标签。虽然此举在技术上被视为“多数投票”,但“多数票”一词在文献中却更常被使用。这些术语之间的区别在于,“多数票”在技术上要求实现大于 50% 的多数,而这主要是在只有两个类别时才有效。存在多个类时(例如有 4 个类别),则并非必须有 50% 的选票才能对一个类下结论;只要选票超过 25%,便可分配一个类别标签。威斯康星大学麦迪逊分校用此处的一个示例充分总结了这一点。
回归问题使用与分类问题类似的概念,但在此情况下,会使用 k 个最近邻的平均值来预测某一分类。此处的主要区别在于:分类被用于离散值,而回归则被用于连续值。但在进行分类之前,还须定义距离。欧几里德距离是最常用的距离,而下文将对其进行详细介绍。
此外还需注意,KNN 算法也是一系列“懒惰学习”模型的其中一部分;因此,它只存储训练数据集,而不会经历训练阶段。这也意味着,所有计算均会在进行分类或预测时进行。由于它严重依赖内存来存储所有训练数据,因此也被称为基于实例或基于内存的学习方法。
在这篇 1951 年的论文中,Evelyn Fix 和 Joseph Hodges 被认为是提出了有关 KNN 模型的最初想法,而 Thomas Cover 在他的研究“最近邻模式分类”中扩展了他们的概念。虽然它不像以前那样普及,但由于其简便性和准确性,仍是大众在数据科学领域最早学习的算法之一。但是,随着数据集的增长,KNN 变得越发低效,从而降低了整体模型性能。它通常用于简单的推荐系统、模式识别、数据挖掘、金融市场预测、入侵检测等。
概括而言,k近邻算法 (KNN) 的目标是识别给定查询点的最近邻,以便可为该点分配类标签。为此,k近邻算法 (KNN) 有几个要求:
为确定哪些数据点最接近给定查询点,则需计算查询点与其他数据点之间的距离。这些距离指标有助于形成决策边界,从而将查询点划分为不同的区域。您通常会看到用 Voronoi 图呈现的决策边界。
虽然有多种距离测量方法可供选择,但本文仅介绍以下几种:
欧几里德距离 (p=2):它是最常用的距离测量方法,且仅限于实值向量。通过使用以下公式,它可测量查询点与当前所测量的另一点之间的直线距离。
曼哈顿距离 (p=1):它是另一种常用的距离测量方法,可用于测量两点之间的绝对值。同时,它也被称为出租车距离或城市街区距离,因为它通常会使用网格来呈现,以便说明如何通过城市街道从一个地址导航到另一个地址。
闵科夫斯基距离:此距离测量方法是欧几里德距离与曼哈顿距离指标的广义形式。以下公式中的参数 p 可用于创建其他距离指标。当 p 等于 2 时,欧几里德距离可通过此公式来表示,而曼哈顿距离则由 p 等于 1 来表示。
汉明距离:此技术通常会用于布尔矢量或字符串矢量,以便识别这些矢量出现互不匹配的点。因此,它也被称为重叠指标。该指标可用以下公式来表示:
例如,如果存在以下字符串,则汉明距离为 2,因为只有其中两个值不同。
KNN 算法中的 k 值定义了会检查多少个近邻以确定特定查询点的分类。例如,如果 k=1,则会将该实例分配给与其单个最近邻相同的类。
定义 k 可作为一种平衡手段,因为不同的值可能会导致过拟合或欠拟合。较小的 k 值可能会导致较高的方差和较低的偏差,而较大的 k 值则可能会导致较高的偏差和较低的方差。k 值的选择很大程度上取决于输入数据,因为包含更多异常值或噪声的数据使用较高的 k 值可能会效果更好。总体而言,建议将 k 值设为奇数以免分类时出现平局,而交叉验证策略可帮助您为数据集选择最佳 k 值。
要想深入了解,您可以使用 Python 和 scikit-learn(也称为 sklearn)来了解有关 KNN 算法的更多信息。Watson Studio 中的教程可帮助您了解此库中的基本语法,而该库还包含其他常用库,如 NumPy、pandas 和 Matplotlib。以下示例代码演示了如何创建 KNN 模型并用其进行预测:
k近邻算法 (KNN) 已用于各种应用,其中主要是在分类领域。其中一些用例包括:
如同所有机器学习算法一样,k近邻算法 (KNN) 也有其优缺点。根据具体的项目和应用,它可能是正确的选择,也可能不是。
IBM Granite 是我们开放式、性能优异、值得信赖的 AI 模型系列,专门为企业量身定制,并经过优化,可以帮助您扩展 AI 应用程序。深入了解语言、代码、时间序列和护栏选项。
我们对 2,000 家组织进行了调查,旨在了解他们的 AI 计划,以发现哪些方法有效、哪些方法无效,以及如何才能取得领先。
深入探讨监督学习方法,如支持向量机和概率分类器。
学习基本概念并通过亲手实验、课程、指导项目、试用等方式培养您的技能。