点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

简介

KNN算法,即K近邻算法是一种监督学习算法,本质上是要在给定的训练样本中找到与某一个测试样本A最近的K个实例,然后统计k个实例中所属类别计数最多的那个类,就是A的类别。 
从上面一句话中可以看出,KNN的原理非常简单粗暴,而且是一种“在线”的学习方式,即每一次分类都需要遍历所有的训练样本,此外KNN算法还有几个要素:K,距离,分类决策规则。

要素

对于KNN而言有三个要素:

1.K的选择: 

K值是KNN算法中为数不多的超参数之一,K值的选择也直接影响着模型的性能。 
如果我们把k值设置的比较小,那么意味着我们期望个到一个更复杂和更精确的模型,同时更加容易过拟合; 
相反,如果K值越大,模型机会越简单,一个很极端的例子就是如果将K值设置的与训练样本数量相等,即K=N,那么无论是什么类别的测试样本最后的测试结果都会是测试样本中数量最多的那个类。

2.距离的度量: 

距离的度量描述了测试样本与训练样本的临近程度,这个临近程度就是K个样本选择的依据,在KNN算法中,如果特征是连续的,那么距离函数一般用曼哈顿距离(L1距离)或欧氏距离(L2距离),如果特征是离散的,一般选用汉明距离。 
曼哈顿距离在KNN中其实就是样本特征每一个维度上的差值的和: 
 
欧氏距离在KNN中其实就是样本特征每一个维度上的差值的平方和开根号: 
 
汉明距离: 

3.分类决策规则:

通过上面提到的K与距离两个概念,我们就能选择出K个与测试样例最近的训练样本,如何根据这K个样本决定测试样例的类别就是KNN的分类决策规则,在KNN中最常用的就是多数表决规则。但是该规则严重依赖于训练样本的数目,我们后面会提到。

图像分类问题

那么KNN算法如何应用到图像分类问题中,其实问题也就是如何评价一张待分类的图像A与P个训练样本图像中间的距离呢? 
其中关键的问题就是图像的特征选择成什么,把问题往更大的方面考虑下,对于图像而言,(传统)机器学习与深度学习的一个很大区别是后者的自动特征抽取,所以深度学习的问世在一定程度上改变了人们对图像处理问题的侧重点,从特征描述到网络结构。所以在下面我们可以不严格的分为两类考虑,直接使用图像与使用一种图像特征提取方法。

1.直接分类 
所谓的直接分类本质上是将图像的每个像素点的像素值作为特征,那么此时两种图像的距离(假设使用L1)就是每个对应位置的像素点的像素值差值的绝对值的和。 
 
那么两张图的L1距离为 371。

2.对特征分类 
然后很多时候我们不会直接使用像素值作为图像的特征来使用,因为它并不能从本质上反映了人对图像的认知,比如我们将一张图稍稍向一个方向平移一段距离,在人眼看来他们应该是一类,甚至就是同一张,但是如果用像素值计算距离的话,距离确很大。 
所以在更多的时候,要计算距离的对象是一些描述子生成的特征,举个例子,HOG+SVM的方法在行人检测中有很好的效果,而SVM的作用也是个分类器,如果换成KNN的话也是可行的(可行指的是原理上可行,效果如何并未考证),所以此时KNN计算的对象其实是HOG生成的描述子,而不再是图像的像素。

但是很不幸的是,KNN在图像问题中几乎不会使用,这个观点来源于斯坦福CS231n,它的原话是 K-Nearest Neighbor on images never used.

原因有两个: 
1.很差的测试效率; 
2.整个图像水平的距离度量可能非常不直观。 
如说第二个原因可以靠着一些特征描述子来解决的话,那么第一个问题就是KNN算法的硬伤,在机器学习中其实我们对测试阶段的时间容忍要远远高于训练阶段,因为最终使用模型解决问题时足够快就可以了,CNN普遍是这样。但是这个问题在KNN中就会无限的暴露出来,“在线”学习的方式决定了样本量越大,分类过程就会越慢。

总结

1.对于样本不平均问题,KNN相比于其他监督学习算法容忍度更差。 
2.KNN的计算量和数据存储量都很大。 
3.但是KNN的思想简单,在某些方便可以带来很高的准确率,比如在经典的手写数字识别问题上,KNN的准确率可以排在第二位。 
4.KNN是一种在线的学习方式,效率低,而且样本量越大效率就越低。

针对于以上问题,各种改进的算法主要在两个方向上对KNN作出改进,第一个是如何解决样本不平衡问题,第二个是如何提高分类效率。

转自:https://zhangxu.blog.csdn.net/article/details/77915298

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

KNN学习之图像分类与KNN原理相关推荐

  1. 【深度学习】图像分类之KNN算法

    文章目录 前言 一.CIFAR-10 数据集简介 二.Nearest Neighbor Classifier(最近邻分类器) L1距离(曼哈顿距离) L2距离(欧氏距离) 三.k - Nearest ...

  2. 学习KNN(一) 图像分类与KNN原理

    学习KNN(一) 图像分类与KNN原理 学习KNN(二)KNN算法手写数字识别的OpenCV实现 学习KNN(三)KNN+HOG实现手写数字识别 简介 KNN算法,即K近邻算法是一种监督学习算法,本质 ...

  3. 深度学习与计算机视觉(一)图像分类与KNN

    1.图像分类与KNN 1.1 图像分类 1.1.2 图像识别的难点:类内形变+类间相似** 1.1.3 图像识别的途径 1.1.4 机器学习解决图像分类的流程 1.2 最近邻分类器(Nearest N ...

  4. knn计算机在图片中的应用,图像分类和kNN

    http://blog.csdn.net/kangroger/article/details/52338344 图像分类 图像分类是把一副图像赋予一个标签的,标签范围已知.图像分类问题是计算机视觉的核 ...

  5. [Python图像处理] 三十九.Python图像分类万字详解(贝叶斯图像分类、KNN图像分类、DNN图像分类)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  6. 【Machine Learning】KNN学习算法与C语言实现

    KNN学习(K-Nearest Neighbor algorithm,K最邻近方法)是一种统计分类器,属于惰性学习,对包容型数据的特征变量筛选尤其有效.KNN的基本思想是:输入没有标签即未经分类的新数 ...

  7. 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解

    KNN算法识别数字 一.KNN原理 1.1 KNN原理介绍 1.2 KNN的关键参数 二.KNN算法识别手写数字 2.1 训练过程代码详解 2.2 预测分类的实现过程 三.KNN算法识别印刷数字 2. ...

  8. 《机器学习实战》kNN学习笔记

    <机器学习实战>kNN学习笔记 文章目录 <机器学习实战>kNN学习笔记 概述 优缺点 k-近邻算法的一般流程 简单案例kNN.py 在约会网站上使用k-近邻算法 归一化特征值 ...

  9. 视觉机器学习20讲-MATLAB源码示例(2)-KNN学习算法

    视觉机器学习20讲-MATLAB源码示例(2)-KNN学习算法 1. KNN学习算法 2. Matlab仿真 3. 仿真结果 4. 小结 1. KNN学习算法 KNN(K-Nearest Neighb ...

最新文章

  1. 面向对象三大特性之一:多态(C++)
  2. 用友3.0谋局“新两化” 融合创新迸发新动能
  3. 我记录网站综合系统 -- 技术原理解析[0:简介(代序) 1.7Beta源代码下载开始]...
  4. 设计模式(九)——适配器模式
  5. xampp for mac mysql_xampp for mac下载-Xampp Mac版下载 V7.3.2-PC6苹果网
  6. 将PHP文件生成静态文件源码
  7. Linux阻塞和同步机制
  8. centos7下docker设置阿里云镜像(自定义阿里云镜像)
  9. 第十节 4基于ashx方式的ASP.Net开发
  10. Android DLNA
  11. apropos linux
  12. JVM监控及诊断工具GUI篇之Arthas(三):class、classloader相关指令
  13. 整好用版NI Circuit Design Suite Power Pro 11.0
  14. 动态规划解决完全背包问题(cpp)
  15. android dfu升级
  16. 计算机与3d打印导板,计算机导航系统、3D打印截骨导板与传统器械对全膝关节置换术手术时间和下肢力线恢复的影响...
  17. Android酷炫音乐律动动效部署到Maven仓库
  18. 嘟噜噜的难受伴快乐的一天。
  19. Python猴子摘香蕉问题
  20. 与IBM谈判搁浅 Sun及其CEO前景存疑

热门文章

  1. 情感识别难?图神经网络创新方法大幅提高性能
  2. 今晚8点直播 | 微软亚洲研究院副院长刘铁岩:机器学习技术前沿与未来展望
  3. AI一分钟 | 李开复:AI创业公司估值今年会降20%~30%;谷歌让搜索结果加载速度提升两倍...
  4. Google设想将《黑镜》情节变为现实,但要你的隐私作交换
  5. 百度燎原计划2018强势回归 开放深度学习工程师评价标准
  6. 那些jdk中坑你没商量的方法
  7. OMG:为什么用了索引,查询还是慢?
  8. 为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow?
  9. 如何在Java代码中去掉烦人的“!=null”
  10. 大白话带你认识Kafka