模式识别算法
1. K-Nearest Neighbor
K-NN可以说是一种最直接的用来分类未知数据的方法。简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。
实际上K-NN本身的运算量是相当大的,因为数据的维数往往不止2维,而且训练数据库越大,所求的样本间距离就越多。就拿我们course project的人脸检测来说,输入向量的维数是1024维(32x32的图,当然我觉得这种方法比较silly),训练数据有上千个,所以每次求距离(这里用的是欧式距离,就是我们最常用的平方和开根号求距法) 这样每个点的归类都要花上上百万次的计算。所以现在比较常用的一种方法就是kd-tree。也就是把整个输入空间划分成很多很多小子区域,然后根据临近的原则把它们组织为树形结构。然后搜索最近K个点的时候就不用全盘比较而只要比较临近几个子区域的训练数据就行了。
当然,kd-tree有一个问题就是当输入维数跟训练数据数量很接近时就很难优化了。所以用PCA(稍后会介绍)降维大多数情况下是很有必要的
模式识别
人们在观察事物或现象的时候,常常要寻找它与其他事物或现象的不同之处,并根据一定的目的把各个相似的但又不完全相同的事物或现象组成一类。字符识别就是一个典型的例子。例如数字'4'可以有各种写法,但都属于同一类别。更为重要的是,即使对于某种写法的'4',以前虽未见过,也能把它分到'4'所属的这一类别。人脑的这种思维能力就构成了'模式'的概念。在上述例子中,模式和集合的概念是分未弄的,只要认识这个集合中的有限数量的事物或现象,就可以识别属于这个集合的任意多的事物或现象。为了强调从一些个别的事物或现象推断出事物或现象的总体,我们把这样一些个别的事物或现象叫作各个模式。也有的学者认为应该把整个的类别叫作模去,这样的'模式'是一种抽象化的概念,如'房屋'等都是'模式',而把具体的对象叫作'房屋'这类模式中的一个样本。这种名词上的不同含义是容易从上下文中弄淸楚的。
模式识别研究主要集中在两方面,一是研究生物体(包括人)是如何感知对象的,属于认识科学的范畴,二是在给定的任务下,如何用计算机实现模式识别的理论和方法。前者是生理学家、心理学家、生物学家和神经生理学家的研究内容,后者通过数学家、信息学专家和计算机科学工作者近几十年来的努力,已经取得了系统的研究成果。
应用计算机对一组事件或过程进行辨识和分类,所识别的事件或过程可以是文字、声音、图像等具体对象,也可以是状态、程度等抽象对象。这些对象与数字形式的信息相区别,称为模式信息。
模式识别所分类的类别数目由特定的识别问题决定。有时,开始时无法得知实际的类别数,需要识别系统反复观测被识别对象以后确定。
模式识别与统计学、心理学、语言学、 计算机科学 、生物学、控制论等都有关系。它与 人工智能 、 图像处理 的研究有交叉关系。例如自适应或自组织的模式识别系统包含了人工智能的学习机制;人工智能研究的景物理解、自然语言理解也包含模式识别问题。又如模式识别中的预处理和特征抽取环节应用图像处理的技术;图像处理中的图像分析也应用模式识别的技术。