深度学习与计算机视觉[CS231N] 学习笔记(2.2):K-近邻算法(K-Nearest Neighbors)

第一个分类器算法:最近邻(Nearest Neighbor)

首先我们介绍第一个分类器算法——最近邻。这是一种十分简单且易于理解的算法,算法主要分两步:
1. 存储所有的数据集和相应的标签
2. 将数据集中与输入图片最相似的图片标签作为预测结果输出
(这里有一点没有说透,就是“相似”的定义,后文会介绍)

下面我们先来举个例子,这里使用的是CIFAR10数据集,这是一个较小的数据集,它具有10个不同的类别,5w个训练样本,以及1w个测试样本。如下图所示,当我们的分类器取得一张输入图片以后,它就会在5w张训练图片中寻找与自身最相似的图片,并将该图片的标签作为最终的预测结果进行输出。

这里写图片描述
这里,我们需要解决的一个问题就是,如何定义两种图片之间的“相似”,一个比较直接的方法就是比较两张图片之间的距离矩阵,如下所示。

这里写图片描述
最近邻方法十分简单,也易于实现,但是,它有一个致命的缺点,那就是预测时间过长。假设我们有N个样本,由于我们的训练过程只需要将这N个样本存储起来即可,而不需要做任何其它操作,所以我们的训练时间就是O(1),而对于预测过程来说,我们需要在所有的样本中找到最相似的图片,所以我们需要遍历整理数据集,那么预测的时间就是O(N)。这是该算法十分糟糕的一点,通常来说,我们希望能够快速预测,而训练时间即使较长也是可以接受的

下图展示了应用最近邻算法的一个例子,对于图中的任意一个像素点,我们计算与该像素点距离最近的样本点,并且想该像素点涂成与最近邻点一样的颜色。

K-近邻(K-Nearest Neighbors)

最近邻算法的一种扩展是K-近邻算法,与最近邻不同的是,K-近邻算法看的不单单是最相似的一张图片,它看的是最相似的K张图片,并在这K张图片中选取最多类别的标签作为预测结果,下图展示了当K=1,3,5时的K近邻算法的运算结果(K=1时就是最近邻算法)
这里写图片描述

K-近邻:“距离”的度量标准

要使用k-近邻算法,不可避免的就要选取一定的度量标准来判断什么样的两幅图片才能算作是相似的?这里,我们有两种主要的度量方法,一种与曼哈顿距离,一种是欧几里得距离。两种度量方法的定义如下所示:
这里写图片描述
在实际使用中,这两种度量方式都可以选择,但是,如果我们选取的匹配特征与坐标轴具有比较严格的依赖关系,那么我们更倾向于使用曼哈顿距离,而如果特征本身和坐标轴之间没有明显的关系,那么我们就更倾向于使用欧几里得距离。分别使用这两种度量方式的K-近邻算法的运算结果如下图所示:

这里写图片描述
为了更好的理解K近邻算法,这里有一个斯坦福大学的Demo可以供大家自己体验一下k近邻算法的实际效果,点击这里的链接即可访问:

KNN并不适用于图像分类!

虽然我们利用图像分类的例子来介绍KNN(K-Nearest Neighbor),但实际上,KNN并不适用于图像分类。其中,最主要的原因是当我们在使用KNN算法时,样本空间的数量会随着特征维度的增多呈现出指数增长的趋势,如下图所示,当我们的特征只有一维时,我们需要线性个数的样本(绿色点可以认为是训练样本,蓝色点可以认为是测试样本),当具有2维时,就需要平方个数的样本,三维时,就需要立方个数的样本,以此类推。这就说明我们当前的算法开销过大,应该选择其他方案

这里写图片描述

K-近邻算法总结

  1. 利用训练样本(已经图片信息和对应标签)构造k-近邻分类器,然后根据输入图片信息和分类器预测对应的标签
  2. k近邻算法的分类预测功能是基于最相似的几张训练样本图片的
  3. K的选取和“相似”的度量标准需要事先进行定义,而不是在学习过程中习得的(这种参数也成为超参)
  4. 评估分类器性能时,在验证集合中确定合适的参数(超参),然后在测试集上只运行一次!(将这次运行的程序准确度作为最终的结果)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值