【学术】一文教你如何正确利用kNN进行机器学习

AiTechYun

编辑:xiaoshan

k最近邻算法(kNN)是机器学习中最简单的分类方法之一,并且是入门机器学习和分类的好方法。它基本上是通过在训练数据中找到最相似的数据点进行分类,并根据分类做出有根据的猜测。理解和实现起来非常简单,所以这种方法在很多领域都有广泛的应用,例如推荐系统语义搜索异常检测

正如我们在任何机器学习问题中所需要的一样,我们必须首先找到一种方法来将数据点表示为特征向量。特征向量是我们的数据的数学表示,由于我们的数据的期望特征可能不是固有的数值,所以可能需要预处理和特征工程来创建这些向量。给定的数据带有N个独特的特征,特征向量将是长度为N的向量,其中向量的入口I表示特征I的数据点值。因此,每个特征向量可以被认为是R ^ N中的点。

与大多数其他分类方法不同,kNN属于惰性学习,这意味着在分类之前没有明确的训练阶段。相反,任何对数据进行概括或抽象的尝试都是在分类时进行的。这意味着一旦我们有了数据,就可以立即开始分类,但这类算法存在一些固有的问题。我们必须能够将整个训练集保存在内存中,除非我们对数据集应用某种类型的简化(reduction),并且执行分类可能在计算上耗费巨大,因为算法通过每个分类的所有数据点进行解析。由于这些原因,kNN往往适用于特征不多的小型数据集。

一旦我们形成了我们的训练数据集,将其表示为M×N矩阵,其中M是数据点的数量,N是特征的数量,我们现在可以开始分类。对于每个分类查询,kNN方法的要点是:

1.计算要分类的项目与训练数据集中的每个项目之间的距离值
2.选取k个最近的数据点(k个最小距离的项目)
3.在这些数据点之间进行“多数票决” - 该池中的主要分类被确定为最终分类

在进行分类前必须做出两项重要决定。一个是将要使用的k的值; 这可以随意选择,也可以尝试交叉验证以找到最佳值。接下来最复杂的是将要使用的距离度量

有很多不同的方法来计算距离,因为它是一个相当模糊的概念,并且适当的度量总是由数据集和分类任务决定。两种最流行的方法是欧几里得距离余弦相似度

欧几里德距离可能是你最熟悉的那个; 它基本上是通过从待分类点中减去训练数据点而获得的向量的大小。

欧几里得距离的一般公式

另一个常见的度量是余弦相似度。与计算大小不同,余弦相似度利用了两个向量之间的方向差异。

余弦相似度的一般公式

选择度量标准通常会非常棘手,最好使用交叉验证来决定,除非你清楚地知道你正在使用的比其他的要好。例如,对于像词向量之类的东西,你可能想要使用余弦相似度,因为词的方向比分量值的大小更有意义。一般来说,这两种方法运行时间大致相同,并且会受到高维数据的影响。

在完成上述所有步骤并确定度量之后,kNN算法的结果是将R ^ N划分为多个部分的决策边界。每个部分(在下面明显着色)表示分类问题中的一个类。边界不需要由实际的训练样例形成 – 而是使用距离度量和可用的训练点来计算边界。通过在(小)块中获得R ^ N,我们可以计算出该区域内假设数据点的最可能类,因此我们将该块的颜色标记为该类的区域。

这个信息是开始实现这个算法所需要的,这样做应该相对简单。当然,有很多方法可以改进这个基本算法。常见的修改包括加权和特定的预处理,以减少计算和减少噪声,例如各种用于特征提取和降维的算法。此外,kNN方法也被用于回归任务,虽然不太常见,但它的操作方式与均值分类器非常相似。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2018-03-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法channel

机器学习逻辑回归:算法兑现为python代码

0 回顾 昨天推送了逻辑回归的基本原理:从逻辑回归的目标任务,到二分类模型的构建,再到如何用梯度下降求出二分类模型的权重参数。今天,我们将对这个算法兑现为代码...

36450
来自专栏磐创AI技术团队的专栏

基于Doc2vec训练句子向量

67250
来自专栏人工智能头条

机器学习实战:模型评估和优化

21050
来自专栏机器之心

入门 | 如何通过梯度检验帮助实现反向传播

14050
来自专栏专知

【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

4.9K110
来自专栏机器学习算法原理与实践

K近邻法(KNN)原理小结

    K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,...

15850
来自专栏人工智能头条

深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?

19430
来自专栏机器之心

增加检测类别?这是一份目标检测的基础指南

14550
来自专栏Python中文社区

Python机器学习算法入门之梯度下降法实现线性回归

專 欄 ❈ ZZR,Python中文社区专栏作者,OpenStack工程师,曾经的NLP研究者。主要兴趣方向:OpenStack、Python爬虫、Pytho...

36150
来自专栏Spark学习技巧

【深度学习】②--细说卷积神经网络

1. 神经网络与卷积神经网络 先来回忆一下神经网络的结构,如下图,由输入层,输出层,隐藏层组成。每一个节点之间都是全连接,即上一层的节点会链接到下一层的每一个节...

45680

扫码关注云+社区

领取腾讯云代金券