最近在重温一些经典的算法,故在此记录一下学习的心得,有理解的不到位的地方欢迎各位大佬不吝赐教。
【7.22 】【更新:PCA中的去中心化操作可以这样理解,这不是一个预处理操作,这是一个算法内所必须执行的操作】
正文:
首先,先简单说一下SVD和PCA的区别和联系:
PCA全称叫做主成分分析(pricinple conponent anlaysis),顾名思义就是分析主要的成分,但是什么叫做主要特征,什么叫做次要特征?这个也不是我们肉眼来界定的。这里面主要的思路是,可以简单的理解为经过一个线性变换将高维的一个矩阵变为一个低维的矩阵。即输入X (shape:n*d)变换矩阵A (shape:d*k)。而且我们知道矩阵的左乘和右乘所做的操作稍有不同(左乘变换行, 右乘变换列,因为这里面特征为n维,为列所在,所以我们这里用右乘的方式来表示)。则Y = XA, Y (shape:n*k), 只要k<d, 则称该线性变换起到了降维的作用。而主成分的判别标准是数据点向某一个方向投影,在这个方向上数据点的投影所构成的分布方差最大(方差最大是因为方差是用来描述一堆数据的分布聚集程度,我们一方面想通过投影的方式来降低维度(为啥投影能降低维度?因为投影转化为数学语言就是向量的内积,那么内积的结果是个数,则代表数据经过投影操作以后(内积)数据会降维)另一方面又想投影以后的数据有足够的代表性(这个通过方差来量化)。所以基于这些考虑最后PCA的过程就是:
Step1:将数据中心化(诚然,如果仅仅是用纯特征值分解Eigen-value Decomposition(EVD),是不需要提前(提前并不表示不执行)做数据中心化的,但是在算法实现中一般不会用EVD的方式来分解,原因是对于维度很高的数据来说使用EVD来做的话效率很低,所以一般在算法实现层面会使用SVD来解决PCA的计算问题。这里的数据中心化要求是为了SVD求解的结果和EVD得到的结果一致,后面会有详细解释)。则 </