网上有很多关于PCA的文章,这是自己从《模式分类》上的理解和记录。
这里的许多证明过程忽略。
(现在的博客贴公式貌似只能上传图片?比较麻烦啊)
主成分分析是一种特征空间降维的办法,其做法比较简单,但缺点也是比较明显的,这里结合人脸识别的特征提取来说明。
首先我们的训练样本是这样的,是一个M * N 的矩阵,M表示原始图的特征,这里的做法是把整个人脸图像的图片灰度值串成一列。
N就表示训练样本的数量了,这样就是每一列一个样本。
主成分分析,故名思义就是要找出一些能代表整个特征空间的特征,那么怎么样定义能”代表“呢,我们希望这个代表与各个
样本的距离平方之和越小越好,这里定义一个平方误差准则函数J(x). J ( x0 ) = sigma ( k=1,n ) || x0 - xk || ^2. 而最直接的想法是均值
点m。它能最小化这个误差函数。
如果我们用各个样本投影到通过m的一条直线的方程 xk = m + ak * e (e表示通过样本均值点直线上的单位向量),其中ak为
一个实数的标量,表示直线上某个点离开点m 的距离,然后通过最小化平方误差准则函数,可以得到 ak的值,ak = e' ( xk - m ) ,
e' 表示 e 的转置。
那么如何确定e 的方向呢,这个问题的求解过程引入了”散布矩阵“,或者叫”离散度矩阵“。
S = sigma ( k = 1,n ) ( xk - m ) ( xk - m )'
这个事实上是样本协方差矩阵的 n - 1 倍。通过最小化平方误差函数的计算,投影直线e的方向为S的特征值最大的特征向量
的方向!推广到d' 维空间,我们可以选取前d' 个最大特征值的特征向量作为主成分作投影,d' 的选择可以通过经验实验取得,然后就
可以通过线性变量将训练样本变成较小的维度 X * Y. ( Y 为由前d' 个最大特征值对应的特征向量组成的变换矩阵)
但我们发现一个图片这样串起来的特征数组成的散布矩阵太大了,这样根本无法计算。于是我们可以通过间接计算的方式考
虑, S = XX' , 我们通过间接求 X' X 的特征值和特征向量。因为 X' X * e2 = D2 * e2 . 将此式两边乘上X,即 X X' X * e2 = D2 * Xe2.
(D为特征值),与原来求 X X' 的特征向量相比 X X' * e1 = D1 * e1 ,可得出 e1 = Xe2 , D1 = D2。 因此,我们求出X' X的特征值和特
征向量,就可以求出原式的特征值和特征向量了。接着,就可以用原来的方法来解决。
这个方法的缺点也非常明显,如果训练集很大的话,也是难以求解的,从人脸识别的角度来说,这样的特征选择方式也无法
突出人脸的特征,一般情况下还需要加上Fisher的方法来解(另一篇再述)。