关于机器学习:机器学习算法KNNK近邻算法

287次阅读

共计 3154 个字符,预计需要花费 8 分钟才能阅读完成。

导读

本文将介绍机器学习中的 K- 最近邻算法K-Nearest Neighbors 是一种机器学习技术和算法,可用于回归和分类工作。

1. 简介

k- 最近邻算法,也称为 kNNk-NN,是一种非参数、有监督的学习分类器,它应用邻近度对单个数据点的分组进行分类或预测。尽管它能够用于回归问题,但它通常用作分类算法,假如能够在彼此左近找到类似点。

对于分类问题,依据比重调配类别标签,即应用在给定数据点四周最多示意的标签。尽管这在技术上被认为是 plurality voting(少数表决),但majority vote 一词在书面语中更罕用。这些术语之间的区别在于,majority voting在技术上须要超过 50%,这次要实用于只有两个类别的状况。当您有多个类别时 – 例如四个类别,您不肯定须要 50% 能力对一个类别做出论断;您能够调配一个占比超过 25% 的类别标签。Wisconsin-Madison 大学用了一个例子很好地总结了这一点。

kNN diagram” title=”kNN diagram”>

回归问题应用与分类问题相似的概念,但在这种状况下,取 k 个最近邻的 平均值 来对分类进行预测。次要区别是分类用于离散值,而回归用于间断值。然而,在进行分类之前,必须定义间隔。欧几里得间隔 是最罕用的,咱们将在上面深入研究。

值得注意的是,kNN 算法也是 lazy learning 模型家族的一部分,这意味着所有计算都产生在进行分类或预测时。因为它 重大依赖内存 来存储其所有训练数据,因而也称为基于实例或基于内存的学习办法。

Evelyn Fix 和 Joseph Hodges 在 1951 年的这篇论文中提出了围绕 kNN 模型的最后想法,而 Thomas Cover 在他的钻研中扩大了他们的概念,“Nearest Neighbor Pattern Classification”。尽管它不像以前那么受欢迎,但因为其简略性和准确性,它依然是人们在数据迷信中学习的首批算法之一。然而,随着数据集的增长,kNN 变得越来越低效,影响了模型的整体性能。它通常用于简略的 举荐零碎、模式识别、数据挖掘、金融市场预测、入侵检测 等。

2. 间隔度量

kNN间隔指标计算

回顾一下,k- 最近邻算法的指标是辨认给定查问点的最近邻,以便咱们能够为该点调配一个类标签。为了做到这一点,kNN 有几个要求:

  • 确定间隔度量

为了确定哪些数据点最靠近给定查问点,须要计算查问点与其余数据点之间的间隔。这些间隔度量有助于造成决策边界,将查问点划分为不同的区域。您通常会看到应用 Voronoi 图可视化的决策边界。

尽管您能够抉择多种间隔度量,但本文仅涵盖以下内容:

欧几里得间隔(p=2):这是最罕用的间隔度量,仅限于实值(real-valued)向量。应用上面的公式,它测量查问点和被测量的另一个点之间的直线。

曼哈顿间隔(p=1):这也是另一种风行的间隔度量,它测量两点之间的绝对值。它也被称为出租车(taxicab)间隔或城市街区(city block)间隔,因为它通常用网格可视化,阐明人们如何通过城市街道从一个地址导航到另一个地址。

闵可夫斯基(Minkowski)间隔:该间隔度量是欧几里得和曼哈顿间隔度量的狭义模式。上面公式中的参数 p 容许创立其余间隔度量。当 p 等于 2 时,这个公式示意欧几里得间隔,p 等于 1 示意曼哈顿间隔。

汉明(Hamming)间隔:这种技术通常与布尔或字符串向量一起应用,辨认向量不匹配的点。因而,它也被称为重叠度量。能够用以下公式示意:

例如,如果您有以下字符串,Hamming 间隔将为 2,因为只有两个值不同。

3. K

k-NN 算法中的 k 值定义了将查看多少个街坊以确定查问点的分类。例如,如果 k=1,实例将被调配到与其单个最近邻雷同的类。定义 k 是一种均衡行为,因为不同的值可能会导致过拟合或欠拟合。较低的 k 值可能具备较高的方差,但较低的偏差,较大的 k 值可能导致较高的偏差和较低的方差。k 的抉择将很大水平上取决于输出数据,因为有许多异样值或噪声的数据可能会在 k 值较高时体现更好。总之,倡议 k 应用奇数以防止分类歧义,穿插验证策略能够帮忙您为数据集抉择最佳 k。

4. Operates

KNN 算法在执行时经验了三个次要阶段:

  1. 将 K 设置为选定的街坊数。
  2. 计算测试数据与数据集之间的间隔。
  3. 对计算的间隔进行排序。
  4. 获取前 K 个条目标标签。
  5. 返回无关测试示例的预测后果。

心愿深入研究,能够通过应用 Pythonscikit-learn 来理解无关 k-NN 算法的更多信息。以下代码是如何应用 kNN 模型创立和预测的示例:

from sklearn.neighbors import KNeighborsClassifier

model_name =‘K-Nearest Neighbor Classifier’`kNN`Classifier = KNeighborsClassifier(n_neighbors = 5, metric =‘minkowski’, p=2)

`kNN`_model = Pipeline(steps=[(‘preprocessor’, preprocessorForFeatures), (‘classifier’, `kNN`Classifier)])

`kNN`_model.fit(X_train, y_train)

y_pred = `kNN`_model.predict(X_test)

5. 利用

k-NN 算法已在各种问题中失去利用,次要是在分类中。其中一些用例包含:

  • 数据预处理

数据集常常有缺失值,但 kNN 算法能够在缺失数据插补的过程中预计这些值。

  • 举荐问题

应用来自网站的 clickstream(点击流)数据,kNN 算法已用于向用户提供无关其余内容的主动举荐。这项钻研表明,用户被调配到特定组,并依据该组的用户行为,为他们提供举荐。然而,思考到 kNN 的利用规模,这种办法对于较大的数据集可能不是最优的。

  • 金融

它还用于各种金融和经济用例。例如,一篇论文展现了如何在信用数据上应用 kNN 能够帮忙银行评估向组织或集体提供贷款的危险。它用于确定贷款申请人的信用情况。

  • 生命衰弱

kNN 还利用于医疗保健行业,预测心脏病发生和前列腺癌的危险。该算法通过计算基因的表白来工作。

  • 模式识别

kNN 还有助于识别模式,例如文本和数字分类。这对于辨认在表格或邮寄信封上的手写数字特地有帮忙。

6. 优缺点

就像任何机器学习算法一样,k-NN 也有其长处和毛病。依据理论状况,它可能是也可能不是最优的抉择。

6.1. 劣势

  • 易于实现

鉴于算法的简略性和准确性,它是新数据科学家将学习的首批分类器之一。

  • 适应性强

随着新训练样本的增加,算法会依据任何新数据进行调整,因为所有训练数据都存储在内存中。

  • 超参数少:

kNN 只须要一个 k 值和一个间隔度量,与其余机器学习算法相比,参数是很少的。

6.2. 有余

  • 数据规模

因为 kNN 是一种惰性算法,与其余分类器相比,它占用了更多的内存和数据存储。从工夫和金钱的角度来看,这可能是低廉的。更多的内存和存储将减少业务开销,而更多的数据可能须要更长的工夫来计算。尽管曾经创立了不同的数据结构(例如 Ball-Tree)来解决计算效率低下的问题,但依据业务问题,采纳其余的分类器可能更好。

  • 维度

kNN 算法往往会成为维度劫难的受害者,这意味着它在高维数据输出时体现不佳。这有时也称为峰值景象,在算法达到最佳特色数量后,额定的特色会减少分类谬误的数量,尤其是当样本尺寸更小。

  • 过拟合

因为“curse of dimensionality”(维度劫难),kNN 更容易呈现过拟合。尽管利用特征选择和降维技术能够避免这种状况产生,但 k 的值也会影响模型的行为。较低的 k 值可能会适度拟合数据,而较高的 k 值往往会“平滑”预测值,因为它是对更大区域或邻域的值进行均匀。然而,k 值太高,模型可能会欠拟合。

本文由 mdnice 多平台公布

正文完
 0