人脸识别-PCA特征脸(大BOSS)
写在前面
你好,我是禅墨!好久,不见!
在忙了好久的各科考试之后,我终于闲下来了。
自从小凯上次输给我K210之后,一心想搞我,想要报仇。
小凯:阿墨,我给你说啊,我XX不服,给你三个小时,你给我做出来一个人脸识别,识别咱两个班一共57人,正确率不能低于96%,我赌100块钱!!!你得在我的监视下完成!
禅墨:确定?我怕你后悔!
小凯:确定!后悔,不存在的!你搞吧!!!小样!
思考了片刻决定用PCA实现!
PCA特征脸
PCA原理
PCA全名为主成分分析,其主要目的就是寻找一个矩阵,然后把原来的一组带有相关性的矩阵映射到寻找到的那个矩阵中,达到降维的目的。一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。 这句话就相当于找到了一个R行N列矩阵,然后乘一个N行M列矩阵,这样就得到了一个R行M列矩阵(其中R<=N),达到降维的目的。其中M和N的含义为,M可以代表样本个数,而N代表每个样本的特征个数,所以最终结果就是把原来N个特征变为了R个特征,达到降维目的。
算法解析
1、构建一个样本集合S={T1,T2,...,TM}S =\{T_1,T_2,...,T_M\}S={T1,T2,...,TM},SSS 可以看做是一个N行M列的矩阵,也就是有M个样本,每个样本有N个特征。其中TiT_iTi是一个向量。
2、0均值化,为了便于计算方差的时候需要减去均值,所以如果本身样本是零均值的,就方便计算。
m=1M∑i=1MTim = \frac{1}{M}\sum_{i=1}^{M}T_im=M1∑i=1MTi ,这个是计算均值在python中可以使用
m = T.mean(axis = 1)
进行计算,其中axis = 1代表按行求均值。
然后A=T−mA = T -mA=T−m 这个相当于把每个样本都减去均值,这样之后就相当于做了0均值化。
3、计算投影矩阵(就是相当于上面的那个R行M列矩阵)
这个投影矩阵其实就是由A∗ATA*A^TA∗AT矩阵的特征向量构成,但是由于大多数情况A∗ATA*A^TA∗AT的维度太大(A∗ATA*