浅谈模式识别中的特征提取

这两天一直在看深度学习的东西,看的头晕脑胀,不过晕乎归晕乎,感觉对模式识别中的特征提取有了更深一点的小理解,暂时记载下来。

  突然觉得,模式识别的所有问题都绕不过两个关键门槛,第一是分类器,第二便是特征提取。而且几乎所有模式识别方面的研究都是在优化这两个问题,要么是造一个更牛的分类器,要么是找出一些表现力更高的特征形式。

  然而这个问题再最近几年变得不那么明朗了,分类器的研究不用多说,从刚开始的K近邻分类器,贝叶斯分类器,到曾经风靡一时的SVM,再到目前处在浪潮之巅的DeepLearning(谷歌大脑主要就是用的这个,与其说是分类器,这应该更倾向于特征提取),分类器越来越复杂,性能越来越高。特征提取呢,大致也是如此。但存在这样一个问题,就是对经典的模式分类问题,比如指纹识别,文字识别等等,有规矩可循,特征提取自然举足轻重(角点,拐点之类的);但对于那些更抽象、更智能、更拟人的模式分类问题,比如美丽度识别、警觉度识别、表情识别等等,我们用什么特征来描述它们呢?特征提取充当什么样的角色?

  其实对于没搞过模式识别或者是模式识别的初学者来说,这的确值得思考。做惯了传统的识别,再去研究美丽度、表情、警觉度这些抽象的东西,确实有点不适应。究其原因,就是找不到实实在在的东西去描述美丽度、表情、警觉度这些抽象的概念,提不到特征,分类识别自然也就无从谈起。

  难道抽象形式的分类问题无从解决了吗?这个命题显然是错的,但提不到特征怎么解决呢?这就是问题的关键,不是提不到特征,只是提取不到客观的、可见的、可衡量的特征。按照稀疏表示人脸识别的先驱Ma Yi的观点:“图像本身是图像内容信息表示最冗余、也是最全面的存在”,也就是说,图像本身就是特征的存在。换句话说,感觉实在提取不到特征了,那就千拳归一路,把图像本身直接送给分类器去吧。

  用分类器直接处理图像本身,看似鲁莽,其实蕴藏着真正至简的大道理。每种特征都有自身的局限性,都是有意突出图像某些方面的特征,简化甚至忽略别的方面的特征,导致的最终结果就是信息的丢失。Gabor特征搞人脸识别效果好,但它直接忽略了整体的亮度特征,那白人和黑人怎么办?所以只要能提去出具体的、客观实在的特征,就不可避免的存在着信息的丢失,那些丢失的次要信息,对于某些问题的影响可以忽略(如指纹识别、文字识别),但对有些主观问题的影响却是不可估量的。总之,这种机械的选择特征来替代原图像,是机器的思维方式,不是人的思维方式。

  当今对于那些无法用具体特征描述的分类问题,存在两种主流的处理方式,要么干脆直接把图像送给分类器去,这是稀疏表示问题(Ma Yi在文章《Robust Face Recognition via Sparse Representation》中证实稀疏表示分类器的人脸识别性能对特征选择的依赖程度很小);要么然机器自己去学习该用那些特征,机器根据样本自己决定特征的取舍,这更是一种类人的智能化的做法,这也就衍生出了当今如火如荼的东西:深度学习(Deep Learning),名噪一时的谷歌大脑就是这样弄出来的。换句话说,如果不能判断解决一个识别问题应该用哪些特征,那就让机器自己去找好了。就好像支持向量机一样,既然人工找不到最优的分类超平面,就让机器自己去映射,自己去找。恰巧的是,人的大脑也是这么干的。

  总之,在当今这个面向数据的年代,特征选择这个任务越来越不适合人工来做了,典型费力不讨好的工作,让机器自己去找,更符合人的思维。但特征提取是不存在了吗?不是的,因为Deep Learning就是在提特征,只不过让机器自己来做。

源地址:http://blog.csdn.net/u013088062/article/details/45952613

时间: 2024-10-21 10:09:52

浅谈模式识别中的特征提取的相关文章

浅谈数据库系统中的cache(转)

http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转) Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出 的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache,本文后续的论述中,统一

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈oracle中rowid和rownum

[ 概要 ] 刚刚接触oracle的同学可能常常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有很大的帮助, 下面偶就抛砖引玉, 简单地谈谈他们之间的区别吧. [ 比较 ] rowid和rownum都是oracle中的伪列, 但他们还是存在本质区别: rowid: 是物理地址, 用于定位数据表中数据的位置, 它是唯一的且不会改变. rownum: 是根据查询的结果集给每行分配的一个逻辑编号, 查询结果不同, rownum自然不同. 对于同一条记录, 查询条件不同,

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

C++ 浅谈C++中指针和引用

浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单

( 转)浅谈QT中窗口刷新事件

浅谈QT中窗口刷新事件 [日期:2011-06-25] 来源:Linux社区  作者:袁硕 [字体:大 中 小] 经过一个星期的项目初步开发,写此文就开发时遇到的一些常见问题,给出些资料和自己的观点,希望能给其他的初学者或者参赛的选手一点帮助,当然,也算是一种抛砖引玉,大家有什么好的技巧经验什么的,也能多多分享,借助这次比赛,我们共同进步~ 如果大家都是跟我一样,刚刚开始接触QT,开始开发QT的程序,肯定也会有很多不习惯的地方,今天我重点想谈的就是这么一个不习惯的地方——QT中窗口刷新事件. 对

浅谈Linux中的信号机制(二)

首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Linux内核源码评头论足.以后的路还很长,我还是一步一个脚印的慢慢走着吧,Linux内核这座山,我才刚刚抵达山脚下. 好了,言归正传,我接着昨天写下去.如有错误还请各位看官指正,先此谢过. 上篇末尾,我们看到了这样的现象:send进程总共发送了500次SIGINT信号给rcv进程,但是实际过程中rcv只接受/处理了1

浅谈Java中的对象和引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: "按照通

浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初