模式识别从0构建—PCA

⌛️本文状态:已完结✔️

一、算法原理

1. K-L变换实现降维

PCA或K-L变换是用一种正交归一向量系表示样本。如果只选取前k个正交向量表示样本,就会达到降维的效果。PCA的推导基于最小化均方误差准则,约束是:u为单位正交向量。推导结果是,正交向量就是归一化的协方差矩阵的特征向量,对应的系数就是对应的特征值。使用PCA方法提取特征脸的步骤如下:

设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵 $C=\dfrac{1}{m}XX^T$

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)Y=PX即为降维到k维后的数据

在实际应用中,大小为:特征数x特征数的协方差矩阵计算特征值和特征向量会很不方便,因此,化简出一种简便的求解方法,即先求大小为:图片数x图片数的协方差矩阵的特征值和特征向量,再将特征向量矩阵与原始样本相乘,这样得到的新的特征向量与第一种方法求出的特征向量等价。

2. 分类算法实现人脸识别

人脸识别可以使用KNN算法,计算降维后待测样本点距训练样本点的距离,在距离最近的k个样本点中,选取出现次数最多的类别为样本点的类别。

在数据没有噪声的情况下,也可以直接计算离训练样本点的距离,直接将最近的样本点类别当做测试类别。还可以计算离各类样本点中心的距离。

也可以采取SVM、Fisher等其他分类方法完成人脸识别。

二、实验结果

使用MATLAB完成实验,源代码及数据集已上传到Github

前25张特征脸如图所示:

img

分别使用前10、100、400张特征脸对图像还原,效果如下图:

将数据集中的400张人脸以8:2的比例划分训练集和测试集,使用KNN算法对PCA降维后的人脸进行训练,测试集上的正确率为95%。

三、参考资料

  1. 发明PCA

  2. PCA人脸识别的步骤

  3. 特征脸人脸识别带简化运算解释-Python

请我喝杯咖啡吧~

支付宝
微信