实验内容
实验任务
- 利用主成分分析(PCA)降维进行人脸识别;
- 利用非负矩阵分解(NMF)对人脸进行降维;
实验目的
- 学会使用常见的单类数据降维方法处理高维数据;
- 尝试利用降维后的数据进行简单的人脸识别;
算法简介
- 主成分分析算法
PCA(Principal Component Analysis)是一种常用的数据分析方法。通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。 - 非负矩阵分解算法:
非负矩阵分解,即NMF,主要是将一个大矩阵分解成两个小矩阵,使得这两个小矩阵相乘后能够还原到大矩阵,从而达到降维的目的。
实验设计
数据降维主要是对人脸数据进行降维,分别利用PCA和NMF算法对人脸进行降维,并利用降维后的数据进行人脸重建,分析降维前和降维后的数据之间的异同,对比降维效果。
实验环境及实验数据集
- 实验环境:
本次实验主要是在Windows 10 操作系统上进行的,编程语言使用Python,版本为3.7.0,使用sublime_text作为文本编辑软件,最终完成实验。 - 数据集:
本实验主要利用以下数据集。
人脸识别数据集,包括120人不同表情和光照下的1680幅人脸图像,每人14幅。图像已经归一化,大小为50*40,图像格式为bmp。
实验过程
- PCA人脸数据降维
利用PCA对人脸进行降维的步骤如下:
1)读取图像数据
2)每列减去均值
3)计算协方差矩阵
4)计算协方差矩阵的特征值和特征向量
5)选择主成分
6)将训练集进行降维
7)显示平均脸
8)显示特征脸
9)重建人脸
10)将测试集进行降维
11)计算识别率 - NMF人脸数据降维
利用NMF对人脸进行降维的步骤如下:
1)读取图像数据
2)初始化权重和特征矩阵
3)更新权重和特征矩阵
4)利用权重和特征矩阵重建人脸
实验结果
- PCA人脸数据降维
运行Python程序PCA.py,运行结果如下:
平均脸:
设置主成分个数为30个,得到以下30张特征脸:
120个人,每人选择前两张图片作为训练集,将训练的人脸进行重建,重建之后的部分人脸如下图:
每人选择3张图片作为测试集,将测试集降维,进行人脸识别,最后得到识别率为87.22%。
- NMF人脸数据降维
运行Python程序NMF.py,每人选择两张图片,进行数据降维之后,重建的部分人脸如下(K=30):