Skip to content

Latest commit

 

History

History
136 lines (78 loc) · 8.53 KB

k-nearest-neighbors-for-machine-learning.md

File metadata and controls

136 lines (78 loc) · 8.53 KB

机器学习中的 K 最近邻

原文: https://machinelearningmastery.com/k-nearest-neighbors-for-machine-learning/

在这篇文章中,您将发现用于分类和回归的 K 最近邻(KNN)算法。阅读这篇文章后你会知道的。

  • KNN 使用的模型表示。
  • 如何使用 KNN 学习模型(暗示,不是)。
  • 如何使用 KNN 做出预测
  • KNN 的许多名称包括不同的字段如何引用它。
  • 如何准备您的数据以充分利用 KNN。
  • 在哪里可以了解有关 KNN 算法的更多信息。

这篇文章是为开发人员编写的,并没有统计或数学方面的背景。重点是算法如何工作以及如何将其用于预测性建模问题。如果您有任何疑问,请发表评论,我会尽力回答。

让我们开始吧。

K 最近邻 for Machine Learning

K 最近邻 for Machine Learning 照片由 Valentin Ottone 保留,保留一些权利。

KNN 模型表示

KNN 的模型表示是整个训练数据集。

它是如此简单。

除了存储整个数据集之外,KNN 没有其他模型,因此无需学习。

有效的实现可以使用诸如 k-d 树之类的复杂数据结构来存储数据,以在预测期间有效地查找和匹配新模式。

由于存储了整个训练数据集,因此您可能需要仔细考虑训练数据的一致性。策划它可能是一个好主意,在新数据可用时经常更新并删除错误和异常数据。

获取免费算法思维导图

Machine Learning Algorithms Mind Map

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的 60 多种算法的方便思维导图。

下载,打印并使用它。

用 KNN 做出预测

KNN 直接使用训练数据集做出预测。

通过搜索 K 个最相似的实例(邻居)的整个训练集并总结那些 K 个实例的输出变量,对新实例(x)做出预测。对于回归,这可能是平均输出变量,在分类中,这可能是模式(或最常见)类值。

为了确定训练数据集中的哪个 K 实例与新输入最相似,使用距离度量。对于实值输入变量,最常用的距离测量是欧几里德距离

欧几里德距离被计算为跨所有输入属性 j 的新点(x)和现有点(xi)之间的平方差之和的平方根。

EuclideanDistance(x,xi)= sqrt(sum((xj - xij)^ 2))

其他流行的距离措施包括:

  • 汉明距离:计算二进制向量之间的距离(更多)。
  • 曼哈顿距离:使用它们的绝对差值之和计算实际向量之间的距离。也称为城市街区距离(更多)。
  • Minkowski 距离:欧几里德和曼哈顿距离的推广(更多)。

可以使用许多其他距离测量,例如 Tanimoto, JaccardMahalanobis余弦距离。您可以根据数据属性选择最佳距离指标。如果您不确定,可以尝试不同的距离指标和不同的 K 值,并查看哪种混合产生最准确的模型。

如果输入变量在类型上相似(例如,所有测量的宽度和高度),则欧几里德是一种很好的距离测量。如果输入变量在类型上不相似(例如年龄,性别,身高等),曼哈顿距离是一个很好的衡量标准。

可以通过算法调整找到 K 的值。尝试 K 的许多不同值(例如 1 到 21 的值)并查看哪种值最适合您的问题是一个好主意。

KNN 的计算复杂度随着训练数据集的大小而增加。对于非常大的训练集,KNN 可以通过从训练数据集中取样来制作随机,从中计算 K-最相似的实例。

KNN 已经存在了很长时间,并且已经得到很好的研究。因此,不同的学科有不同的名称,例如:

  • 基于实例的学习:原始训练实例用于做出预测。因此,KNN 通常被称为基于实例的学习或基于案例的学习(其中每个训练实例是来自问题域的案例)。
  • 懒惰学习:不需要学习模型,所有工作都在请求预测时进行。因此,KNN 通常被称为懒惰学习算法。
  • 非参数:KNN 对正在解决的问题的功能形式没有做出任何假设。因此,KNN 被称为非参数机器学习算法。

KNN 可用于回归和分类问题。

KNN for Regression

当 KNN 用于回归问题时,预测基于 K-最相似实例的均值或中值。

KNN for Classification

当 KNN 用于分类时,输出可以被计算为具有来自 K-最相似实例的最高频率的类。每个实例本质上都为他们的班级投票,而得票最多的班级则作为预测。

类概率可以被计算为属于新数据实例的 K 个最相似实例的集合中的每个类的样本的归一化频率。例如,在二分类问题(类为 0 或 1)中:

p(class = 0)= count(class = 0)/(count(class = 0)+ count(class = 1))

如果您使用 K 并且您具有偶数个类(例如 2 个),则最好选择具有奇数的 K 值以避免出现平局。反之,当你有一个奇数的类时,使用偶数来表示 K.

通过将 K 扩展 1 并查看训练数据集中下一个最相似实例的类,可以一致地打破关系。

维度的诅咒

KNN 适用于少量输入变量(p),但在输入数量非常大时会遇到困难。

每个输入变量可以被认为是 p 维输入空间的维度。例如,如果您有两个输入变量 x1 和 x2,则输入空间将为 2 维。

随着维数的增加,输入空间的体积以指数速率增加。

在高维度中,可能相似的点可能具有非常大的距离。所有的点都会相互远离,我们对简单的 2 维和 3 维空间距离的直觉就会崩溃。这可能一开始感觉不直观,但这个一般性问题被称为“维度诅咒”。

为 KNN 准备最佳数据

  • 重新缩放数据:如果所有数据具有相同的比例,KNN 的表现要好得多。将数据规范化到[0,1]范围是个好主意。如果数据具有高斯分布,则标准化数据也可能是个好主意。
  • 地址缺失数据:缺少数据意味着无法计算样本之间的距离。可以排除这些样本,也可以估算缺失值。
  • 低维度:KNN 适用于低维数据。您可以在高维数据(数百或数千个输入变量)上尝试它,但要注意它可能不如其他技术那样好。 KNN 可以从减少输入特征空间维度的特征选择中受益。

进一步阅读

如果您有兴趣从零开始在 Python 中实现 KNN,请查看帖子:

以下是从预测性建模角度介绍 KNN 算法的一些优秀的机器学习文本。

  1. 应用预测性建模,第 7 章用于回归,第 13 章用于分类。
  2. 数据挖掘:实用机器学习工具和技术,第 76 和 128 页
  3. 做数据科学:从前线直接谈话,第 71 页
  4. 机器学习,第 8 章

还可以在维基百科上查看 K 最近邻

摘要

在这篇文章中,您发现了 KNN 机器学习算法。你了解到:

  • KNN 存储它用作其表示的整个训练数据集。
  • KNN 没有学习任何模型。
  • KNN 通过计算输入样本和每个训练实例之间的相似性来及时做出预测。
  • 有许多距离度量可供选择以匹配输入数据的结构。
  • 在使用 KNN 时,重缩放数据是一个好主意,例如使用规范化。

如果您对此帖子或 KNN 算法有任何疑问,请在评论中提出,我会尽力回答。