PCA可以用于数据降维压缩。本质上是对一组多维数据进行坐标变换,从标准坐标变换到新的坐标系下,使得主要坐标轴上的分量的方差最大化,然后把分量方差较小的轴置零,达到降维的效果。对于图像处理来说,一组相似的m×n的图像在标准坐标系下有m×n维,因此大部分维度是相关性很强的。现在要找到一个正交坐标系,使所有图像对应的向量都尽量能分解在几个主成分坐标轴上(主成分坐标轴意味着向量在上面的分量方差最大),即K-L变化中提到的“完全去除原始信号中的相关性”,等同于把相关性很强(特征值很小)的维度置零。
疑问:为什么协方差矩阵的特征向量就是使得数据方差最大化的k维理想特征?
协方差简单计算方法:先让样本矩阵中心化,即每一维度减去该维度的均值,使每一维度上的均值为0,然后直接用新得到的样本矩阵乘上它的转置,然后除以(样本个数-1)即可。本算法中也可以不除,无非是新坐标系的比例放大缩小而已,特征值和特征向量也同步变化。
每一个协方差矩阵的特征向量Vn,即新的正交坐标系下的一根轴。每个特征向量对应一个特征值,根据特征值大小对特征向量排序,形成特征矩阵V=[V1,V2,V3,…Vn],取前a个较大特征值所对应的特征向量去左乘原始数据(即生成协方差矩阵的原始矩阵):
FinalData(10*1) = DataAdjust(10*2矩阵) x 特征向量(-0.677873399, -0.735178656)T (举例)
得到新坐标系下第1维到第a维上(a远小于n)的坐标,第a+1到第n维上的坐标均置零,这样就把标准坐标系上的原始数据矩阵X(即入门帖中的DataAdjust)转化到新坐标系上的坐标,形成新的矩阵X',且将影响较小的维度(矩阵中的列)上的坐标置零,达到了数据压缩的效果。
注意:不是将较小特征值对应的特征向量置零,而是将被Va+1到Vn撸过的X'中对应的列向量置零。
滤除次要维度后如何复原图像?
只需将X'左乘图像协方差矩阵的特征矩阵的逆阵V-1,即可得到被优化的在标准坐标系下的数据矩阵X'' = V-1X'。
小技巧:图像太大协方差、特征矩阵都很难求怎么办,图像分解:图像处理中的数学原理详解
本质上PCA就是坐标变换。变换到方便操作的坐标系下,去滤除一大部分影响较小的数据。
首先将数据变换到能区分方差大小的新坐标系,将方差小的轴上的数据置零后,再恢复到标准坐标系下。要注意的是,舍去的是新坐标系下影响较小轴的坐标数据。再恢复回标准坐标系下时,每个轴上都是有数据的。一方面,可以只保存新坐标系下一小部分坐标轴上的数据,起到了压缩数据量的效果,需要用时再用特征矩阵的逆阵恢复数据即可;另一方面,滤除了新坐标系下影响较小的维度的数据,这些方差很小的分量,一般都是噪音,起到了滤噪的效果。