python默认矩阵X每一行是一个向量,因此一共有m行个数据,对于每一个数据有统计的维度个数为列数n,因此无偏估计用的是对于某个维度的1/(m-1)来归一化得到矩阵A,然后用的是A转置矩阵乘A得到协方差矩阵,最终对协方差矩阵进行奇异值分解或者特征值分解(协方差矩阵一定的半正定的Hermite矩阵,一定可以对角化的)。
协方差矩阵计算方法 - Mr_HHH的博客 - CSDN博客blog.csdn.net一般都要用很多数据,即m要很多,相当于有一个库,然后采用PCA的流程来学习投影矩阵,再将要降维的数据采用投影矩阵进行矩阵乘来降维,类似于稀疏表示。此时右乘的是前k个主成分对应特征向量构成的n×k维矩阵,即可从原始维度n降到k。
根据SVD的原理
,由于
为方阵,
V 一定是酉矩阵(V的Hermite矩阵等于V的逆)。此时通过投影变换后在基空间中显然矩阵就是对角矩阵,也就是一个酉相似过程。进一步有
。
为什么能降维?由于特征向量构成的原始n×n矩阵 V 实际上是一种投影变换,将原始数据 A 映射到相互正交的
基空间中去(
列与列之间相互正交)。那若我们只需要
保留k个主要的投影结果,即
模最大也就是对应奇异值最大的投影方向,因此投影矩阵也只需要保留前k个主成分对应的特征向量,故
V 也只需要
n×k维即可。
这里比较容易混的是,若想采用类似于主成分分析的方法对于单张图像处理,例如去噪。这里我只有一个数据,也就是说 PCA 降维只有一个行向量,m=1(此时减均值为0,无偏估计也说不过去),此时PCA是无法使用的。那么对于这种情况,采用的就是奇异值分解(即不用PAC前面的求协方差矩阵),取前几个奇异值,再重新乘回特征向量即可。