模式识别整理
模式识别介绍
模式:指需要识别且可测量的对象的描述。
这些对象与实际的应用有关,如:字符识别的模式——每个字符图像;人脸识别的模式——每幅人脸图像。
模式识别:利用机器(计算机)模仿人脑对现实世界各种事物进行描述、分类、判断和识别的过程。
- 样本(sample):所研究对象的一个个体。
- 样本集(sample set):若干样本的集合。
- 类和类别(class):在所有样本上定义的一个子集,处于同一类的样本在我们所关心的某种性质上是不可区分的。
- 特征(feature):指用于表征样本的观测。
- 已知样本(know samples):指事先知道类别标号的样本。
- 未知样本(unknow samples):指类别标号未知但特征已知的样本。
所谓模式识别的问题,就是用计算的方法根据样本的特征将样本划分到一定的类别中去。
模式识别的目的是为了通过机器完成对事物的分类,可以归纳为基于知识的方法和基于数据的方法两大类。基于知识的方法一般是通过人的经验来进行判定,如吃肉的归为肉食动物,吃草归为草食动物,有羽毛归为鸟类等,其中吃肉、吃草、有羽毛是特征,肉食动物、草食动物、鸟类是分类。基于知识的方法的基本思想是根据人们已知的关于研究对象的知识,整理出若干描述特征与类别间关系的准则,建立一定的计算机推理系统,对未知样本通过这些知识推理来决策它的类别。
基于数据的模式识别方法不是依靠人们对所研究对象的认识来建立分类系统,通过收集一定数量的已知样本,用这些样本作为训练集来训练一定的模式识别机器,使它在训练以后能够对未知样本进行分类。它学习的目标是离散的对象类别。基于数据的模式的基础是统计模式识别,依据统计原理来建立分类器。除了统计模式识别之外还有人工神经网络和支撑向量机。
统计模式识别方法流程
统计模式识别的基本思想
上图中,G表示的是需要从对象观测得到的特征的一个过程,通过观测以后构成了一个特征向量x,y表示我们所关心的对象的类别。S表示x和y之间关系的系统,实际情况当中,我们可能并不知道S的内部机理。我们只能通过一定数量的已知样本,是已知的x和y之间的数据对,用来训练一个学习机器LM,建立一个从特征x到类别y'的数学模型,通过这个数学模型,我们就可以对未知的样本进行预测它的类别。y'是特征向量x的函数,它的函数值代表了对未知样本的类别预测。这个函数称为分类器。
模式识别的适用范畴
- 基于数据的模式识别方法适用于已知对象的某些特征与我们所感兴趣的类别性质有关,但无法确切描述这种关系的情况。
- 分类和特征之间的关系可以完全确切的描述出来,采用基于知识的方法可能更有效。
- 若二者的关系完全随机,在分类和特征之间不存在规律性的关系,即不存在规律性的练习,应用模式识别也无法得到有意义的结果。模式识别不是万能的,是有局限性的,不能解决所有情况下的识别问题。
监督模式识别与非监督模式识别
- 监督模式识别:已知类别,并且能够获得类别已知的训练样本,这种情况下建立的问题属于监督学习问题,称为监督模式识别。
- 非监督模式识别:事先并不知道类别,更没有类别已知的样本,根据样本特征降样本聚成几个类,使属于同一类的样本在一定意义上是相似的,而不同类别之间的样本有较大差异。这种学习过程称为非监督模式识别。
如这张图中,这些人应该分成几类?根据什么分类?如果要求把这些人分成两类,如何分?根据性别,是否戴眼镜?头发颜色?长相?在没有给出具体的分类要求的时候,我们给出的分类结果是不唯一的。很难判断哪种分类方案更合理。这也是非监督模式识别的特点。
模式识别应用举例
- 鱼的分类
我们假设有鲈鱼(salmon)和鲑鱼(sea bass)两种鱼,首先需要通过光学感知手段来拍摄若干样品的图像来区分鲈鱼和鲑鱼。这两种鱼存在一些物理特性上的差异,比如长度、光泽、宽度、鳍的数量和形状以及嘴的位置等等,我们可以利用这些要素来作为模式识别的特征。图像会存在一些干扰和噪声,在提取特征之前需要先将图像进行一些预处理去除噪声,同时采用分割技术将图像中的鱼和背景分割开。
- 特征提取
就是上面说的长度、光泽、宽度、鳍的数量和形状以及嘴的位置等。
- 分类判别——单一特征
先研知识:鲈鱼一般比鲑鱼长,因此可以选择长度为分类特征;长度超过阈值时判定为鲈鱼,否则判定为鲑鱼。如何确定合适的长度阈值?
上图中横坐标表示长度,纵坐标表示数量。黑色的线表示鲈鱼的直方图数据,红色的线表示鲑鱼的直方图数据。虽然一般鲈鱼比鲑鱼要长,但是通过上述的直方图,我们会发现想通过长度来区分鲈鱼和鲑鱼是不太可能的,因为在相同的长度上即有鲈鱼也有鲑鱼。我们无法只凭长度阈值将两种鱼完全区分开。
既然单一的长度特征无法区分,那我们来看一下有没有其他的单一特征可以区分这两种鱼。
上图是光泽度的直方图,大部分的鲑鱼的光泽度比鲈鱼要高一些。但是要选择一个光泽度的理想阈值将两类完全区分开,还是不可能。但是选择了一个阈值后,分错的概率比长度要小的多。
- 利用多个特征进行分类
上图是在众多的特征中选择宽度和光泽度两个特征来组合成特征向量,再由宽度和光泽度构成的二维特征空间中,对所有样本进行分类。每个样本都对应空间中的一个点,中间有一个分类线将样本分成两部分。在分类线的一侧时鲑鱼,一侧时鲈鱼,我们会发现组合特征的分类效果要优于单一特征,但是仍然存在一些错误的分类。这个分类线即可以是直线也可以是曲线。
复杂的分类算法会产生复杂的分类界面,它对于训练样本的分类效果很好,几乎对所有的训练样本都进行正确分类,但是它的推广能力很差,如果对未知样本来进行分类的时候,错误率反而会高一些。判定界面不一定需要这么复杂,即使对一些训练样本不能完美识别,但是它只要对新模式有足够的推广能力就可以接受。分类器如何产生比较简单的判别界面,使得其比直线和复杂边界更优秀?如何预测分类器对新模式的推广能力,都是模式识别要研究的问题。
线性分类器
如果能够知道样本的概率密度模型,就可以使用贝叶斯决策的方法最优的实现分类决策。但是这里有一个前提,就是我们要假设事先知道样本的概率密度函数,这并不是容易的事情,尤其在特征空间的维度很高和样本比较少的情况下更是如此。我们需要绕过概率密度函数估计这个步骤,如果能够事先知道判别函数的形式,就可以设法从数据中直接估计这种判别函数中的参数。这就是基于样本直接进行分类器设计的思想。
基于样本进行分类器设计的三要素
- 确定分类器,也就是判别函数的类型。我们要确定是线性判别函数还是非线性判别函数。
- 确定分类器的目标或准则。我们需要按照什么样的原则来设计分类器,是按照最小错误率的原则还是按照风险最小的原则。
- 设计算法利用样本数据搜索到最优的函数参数。
线性分类器虽然是最简单的分类器,但是在样本为某些分布的时候,线性判别函数可以成为最小错误率或者是最小风险意义下的最优分类器。在一般情况下,线性分类器只是次优分类器,但是就因为简单,在很多情况下效果接近最优,所以应用也是比较广泛的。在样本有限的情况下,甚至能够取得比复杂的分类器更好的效果。
多类情况下
如果有c个类,我们需要设计c个判别函数。在确定了判别函数的类型以后,采用不同的准则及不同的巡游算法,就会得到不同的线性判别方法。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Meta 将 Android 应用 Java 代码迁移到 Kotlin:零到 1000 万行
Meta 发布了一篇博客表示,正在将其 Android 应用的 Java 代码迁移到 Kotlin,并分享了这一过程中的一些经验。 该公司认为,Kotlin 是一种流行的 Android 开发语言,与 Java 相比具有一些关键优势。“因此,在我们努力使我们的开发工作流程更加高效的过程中,将 Meta 的 Android 开发转向 Kotlin 是非常合理的......Kotlin 通常被认为是一种比 Java 更好的语言,在年度 Stack Overflow 开发者调查中,它的好感度要高于 Java。” 除了受欢迎程度外,Meta 还将最新的 Kotlin 版本与 Java 11(可用于 Android 开发的最新版本)进行了比较,并得出了 Kotlin 的一些主要优势:可空性、函数式编程、更短的代码、以及领域特定语言 (DSL) / 类型安全构建器等。 Facebook 软件工程师 Omer Strulovich 指出,Meta 旗下几个流行的 Android 应用--Facebook、Instagram、Messenger、Portal 和 Quest 都已经开始从 Java 转...
- 下一篇
这TMD,就是你说的Spring IoC源码
回答: 我们为什么要学习源码? 1、知其然知其所以然 2、站在巨人的肩膀上,提高自己的编码水平 3、应付面试 1.1 Spring源码阅读小技巧 1、类层次藏得太深,不要一个类一个类的去看,遇到方法该进就大胆的进 2、更不要一行一行的去看,看核心点,有些方法并不重要,不要跟它纠缠 3、看不懂的先不看,根据语义和返回值能知道这个方法达到了啥目的即可 4、只看核心接口(下面标注了重点的地方)和核心代码,有些地方也许你使用spring以来都没触发过 5、debug跟步走,源码中给大家标注好了,见到 ”===>“ 就进去 进去之前,下一行打个断点,方便快速回到岔路口 进去之前,可以先点方法看源码,再debug跟进 6、广度优先,而非深度优先。先沿着主流程走,了解大概,再细化某些方法 7、认命。spring里多少万行的代码,一部书都写不完。只能学关键点 阅读源码目的 加深理解spring的bean加载过程 面试吹牛x 江湖传说,spring的类关系是这样的…… 1.2 IoC初始化流程与继承关系 引言 在看源码之前需要掌握Spring的继承关系和初始化 1) IoC容器初始化流程 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启