win10+Python3.7.3+OpenCV3.4.1入门学习(二十章 K近邻算法)————20.1理论基础
Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm
文章目录
- 第20章 K近邻算法
- 20.1 理论基础
第20章 K近邻算法
机器学习算法是从数据中产生模型,也就是进行学习的算法(下文也简称为算法)。我们把经验提供给算法,它就能够根据经验数据产生模型。在面对新的情况时,模型就会为我们提供判断(预测)结果。例如,我们根据“个子高、腿长、体重轻”判断一个孩子是个运动员的好苗子。把这些数据量化后交给计算机,它就会据此产生模型,在面对新情况时(判断另一个孩子能不能成为运动员),模型就会给出相应的判断。
比如,要对一组孩子进行测试,首先就要获取这组孩子的基本数据。这组数据包含身高、腿长、体重等数据,这些反映对象(也可以是事件)在某个方面的表现或者性质的事项,被称为属性或特征。而具体的值,如反映身高的“188 cm”就是特征值或属性值。这组数据的集合“(身高=188 cm,腿长=56 cm,体重=46 kg), ……,(身高=189 cm,腿长=55 cm,体重=48 kg)”,称为数据集,其中每个孩子的数据称为一个样本。
从数据中学得模型的过程称为学习(learning)或者训练(training)。在训练过程中所使用的数据称为训练数据,其中的每个样本称为训练样本,训练样本所组成的集合称为训练集。
当然,如果希望获取一个模型,除了有数据,还需要给样本贴上对应的标签(label)。例如,“((个子高、腿长、体重轻),好苗子)”。这里的“好苗子”就是标签,通常我们将拥有了标签的样本称为“样例”。
学得模型后,为了测试模型的效果,还要对其进行测试,被测试的样本称为测试样本。输入测试样本时,并不提供测试样本的标签(目标类别),而是由模型决定样本的标签(属于哪个类别)。比较测试样本预测的标签与实际样本标签之间的差别,就可以计算出模型的精确度。
大多数的机器学习算法都来源于日常生活实践。K近邻算法是最简单的机器学习算法之一,主要用于将对象划分到已知类中,在生活中被广泛使用。例如,教练要选拔一批长跑运动员,如何选拔呢?他使用的可能就是K近邻算法,会选择个子高、腿长、体重轻,膝、踝关节围度小,跟腱明显,足弓较大者作为候选人。他会觉得这样的孩子有运动员的潜质,或者说这些孩子的特征和运动员的特征很接近。
本章从理论基础、手写数字识别算法、手写数字识别实例等角度介绍K近邻算法。
20.1 理论基础
K近邻算法的本质是将指定对象根据已知特征值分类。例如,看到一对父子,一般情况下,通过判断他们的年龄,能够马上分辨出哪位是父亲,哪位是儿子。这是通过年龄属性的特征值来划分的。
上述例子是最简单的根据单个特征维度做的分类,在实际场景中,情况可能更复杂,有多个特征维度。例如,为一段运动视频分类,判断这段视频是乒乓球比赛还是足球比赛。
为了确定分类,需要定义特征。这里定义两个特征,一个是运动员“挥手”的动作,另一个是运动员“踢脚”的动作。当然,我们不能一看到“挥手”动作就将视频归类为“乒乓球比赛”,因为我们知道某些足球运动员习惯在运动场上通过挥手来跟队友进行交流。同样,我们也不能一看到“踢脚”动作就将视频归类为“足球比赛”,因为有些乒乓球运动员会通过“踢脚”动作来表达自己的感情。我们分别统计在某段特定时间内,视频中“挥手”和“踢脚”动作的次数,发现如下规律:
● 在乒乓球比赛的视频中,“挥手”的次数远多于“踢脚”的次数。
● 在足球比赛的视频中,“踢脚”的次数远多于“挥手”的次数。
根据对一组视频的分析,得到如下表所示的数据。
为了方便观察,将上述数据绘制为散点图,如下图所示。
从图中可以看到,数据点呈现聚集特征:
● 乒乓球比赛视频中的数据点聚集在x轴坐标为[3000, 5000], y轴坐标为[1,500]的区域。
● 足球比赛视频中的数据点聚集在y轴坐标为[3000, 5000], x轴坐标为[1,500]的区域。
此时,有一个视频Test,经过统计得知其中出现2000次“挥手”动作,100次“踢脚”动作。如果在图中标注其位置,可以发现视频Test的位置最近的邻居是乒乓球比赛视频,因此可判断该视频是乒乓球比赛视频。
上面的例子是一个比较极端的例子,非黑即白,而实际的分类数据中往往参数非常多,判断起来也不会如此简单。因此,为了提高算法的可靠性,在实施时会取k个近邻点,这k个点中属于哪一类的较多,然后将当前待识别点划分为哪一类。为了方便判断,k值通常取奇数,这和为了能得到明确的投票结果通常将董事会成员安排为奇数的道理是一样的。
例如,已知某知名双胞胎艺人A和B长得很像,如果要判断一张图像T上的人物到底是艺人A还是艺人B,则采用K近邻算法实现的具体步骤如下:
(1)收集艺人A和艺人B的照片各100张。
(2)确定几个用来识别人物的重要特征,并使用这些特征来标注艺人A和B的照片。例如,根据某4个特征,每张照片可以表示为[156, 34, 890, 457]这样的形式(即一个样本点)。按照上述方式,获得艺人A的100张照片的数据集FA,艺人B的100张照片的数据集FB。此时数据集FA、FB中的元素都是上述特征值的形式,每个集合中各有100个这样的特征值。简而言之,就是使用数值来表示照片,得到艺人A的数值特征集(数据集)FA、艺人B的数值特征集FB。
(3)计算待识别图像T的特征,并使用特征值表示图像T。例如,图像T的特征值TF可能为[257, 896, 236, 639]。
(4)计算图像T的特征值TF与FA、FB中各特征值之间的距离。
(5)找出产生其中k个最短距离的样本点(找出离T最近的k个邻居),统计k个样本点中属于FA和FB的样本点个数,属于哪个数据集的样本点多,就将T确定为哪个艺人的图像。例如,找到11个最近的点,在这11个点中,属于FA的样本点有7个,属于FB的样本点有4个,那么就确定这张图像T上的艺人为A;反之,如果这11个点中,有6个样本点属于FB,有5个样本点属于FA,那么就确定这张图像T上的艺人为B。
以上所述就是K近邻算法的基本思想。
win10+Python3.7.3+OpenCV3.4.1入门学习(二十章 K近邻算法)————20.1理论基础相关推荐
- win10+Python3.7.3+OpenCV3.4.1入门学习(十二 图像轮廓)————12.4 Hu矩
文章目录 12.4 Hu矩 12.4.1 Hu矩函数 12.4.2 形状匹配 Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm 12.4 Hu ...
- win10+Python3.7.3+OpenCV3.4.1入门学习(十二 图像轮廓)————12.7 利用形状场景算法比较轮廓
Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm 文章目录 12.7 利用形状场景算法比较轮廓 12.7.1 计算形状场景距离 12.7.2 ...
- win10+Python3.7.3+OpenCV3.4.1入门学习(八)————8.7 礼帽运算
Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm 礼帽运算是用原始图像减去其开运算图像的操作.礼帽运算能够获取图像的噪声信息,或者得到比原始 ...
- win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(上)
Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm 均值滤波是指用当前像素点周围N·N个像素值的均值来代替当前像素值.使用该方法遍历处理图像内 ...
- 机器学习入门 | 【01】K近邻算法
文章目录 1.K近邻算法[通过你的邻居来判断你的类别] 1.简介 2.电影案例分析 3.api的初步使用 3.1 一般的流程: 3.2 sklearn模块介绍 3.3 API的使用 3.4 距离度量 ...
- hadoop hive hbase 入门学习 (二)
hadoop 自学系列 hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...
- JBox2d入门学习二 -----我的小鸟
入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧. 贴代码,注解写的比较详细了, ...
- 机器学习入门笔记(三):K近邻算法
文章目录 一.K近邻算法的基本概念 1.1 K近邻算法实现 二.K近邻分类三要素 2.1 距离度量 2.2 K值的选择 2.2.1 基于m-fold cross validation的 K值选择 2. ...
- OpenGL入门学习[二] 绘制简单的几何图形
OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...
最新文章
- 条码扫描枪----针对MS3391扫码器的工作原理
- JSP与servlet之间的传值方式
- securecrt是什么工具_网络总出故障,这几款工具你掌握了没?!!
- iOS 生日字符串转化年龄
- 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置script元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分...
- vscode-go 插件安装
- 2021年荷兰经济发展研究报告
- vue启动报错error:cannot find module 'xxx'异常解决方法
- 刀塔自走棋上线不到十分钟就被功击,几十万玩家登录不上
- 辅流式沉淀池固体负荷计算方法_20000m3/d污水厂设计计算书
- 《SolidWorks 2014中文版完全自学手册》——1.2 SolidWorks 2014简介
- 打造淘宝极简包的轻量化框架
- 为什么要学习汇编语言?
- 20191025 前端开发日报
- 人员定位管理系统保障危化品行业安全作业
- 自定义组合键进入u-boot
- JSP中如何借助response对象实现页面跳转呢?
- Jmeter接口压力测试(先登录再测接口)
- 量化分析入门2:上证指数走势图及移动平均线
- Android移动开发:第一章Android系统概述