PCA算法学习——计算特征脸及人脸识别原理

这几天在学习PCA算法(结合在人脸识别方面的应用),下面是我的笔记(有不对的地方欢迎各位指出):


相关的数学知识

特征值\特征向量

协方差矩阵


简单的算法流程

1)特征中心化,即每一维的数据都减去该维的均值;

2)(对维度)计算协方差矩阵;

3)计算协方差矩阵的特征值和特征向量;

4)选取最大的前几个特征值对应的特征向量,组成一个投影矩阵。


对算法原理的一些理解

1)计算样本维度的协方差矩阵,可得到样本各个维度的相关性(协方差矩阵的元素为随机变量的其中两个维度的协方差,对角线元素为某个维度的方差);

2)选取协方差矩阵前K个最大的特征值及对应的特征向量,可得到对样本起决定性作用最大的前K个特征(详细推导参考最大方差理论);

3)样本通过投影计算后从N维降到K维,这K维的元素大体上可代表原来的N维样本;

4)PCA人脸识别最核心的一点是将人脸从N维降到K维以后,计算每个人脸K维向量之间的距离,若小于某一阈值,可认为两个K维向量代表同一个人的脸,否则代表两个不同的人脸。


关于算法中的一些矩阵计算

1)假设样本的个数(图片的数量)为M,每个样本的维度(每张图片的像素总数)为N,则样本数据矩阵为一个M*N的矩阵(这里以每行存储一个样本为例);

2)样本数据矩阵中的每一列对应每个样本的一个维度;

3)计算协方差矩阵,是对样本的每个维度(数据样本矩阵中的每个列向量)进行计算,得到的协方差矩阵是一个N*N的矩阵;

4)计算并得到协方差矩阵的特征值,选取前K个最大的特征值,其对应的特征向量(这里视为列向量)组成一个N*K投影矩阵的矩阵;

5)将样本投影到特征向量空间,即将样本(列)向量转置,左乘投影矩阵;将样本从特征向量空间反投影回原本的样本空间(即重建),则将样本的投影(列)向量,右乘投影矩阵。


代码

我写了一段代码,计算PCA得到的特征人脸,传送门:https://github.com/Hunger720/PCA_Demo

1)opencv将PCA封装成了一个类,只需要输入样本数据矩阵,即可通过接口得到特征值、特征向量,十分方便;

2)调用上述PCA类需要注意一些数据类型的要求。


参考资料

主成分分析(Principal components analysis)-最大方差解释

对于概率论数字特征的理解

主成分分析(PCA)原理详解

机器学习(五)PCA数据降维

http://blog.csdn.net/haitao111313/article/details/7765023

http://blog.sina.com.cn/s/blog_60a0e97e01017o5x.html

PCA

http://blog.csdn.net/silence1214/article/details/8051473

http://www.cnblogs.com/tornadomeet/archive/2012/09/06/2673104.html

你可能感兴趣的:(Computer,Vision)