PCA方法是数据降维的重要手段之一,方法比较简单,就是将样本数据求一个维度的协方差矩阵,然后求解这个协方差矩阵的特征值和对应的特征向量,将这些特征向量按照对应的特征值从大到小排列,组成新的矩阵,被称为特征向量矩阵,也可以称为投影矩阵,然后用改投影矩阵将样本数据转换。取前K维数据即可,实现对数据的降维。
假设样本数据有r维(组成一个r维向量),共有n个样本。组成r*n矩阵A,矩阵每一列是一个样本,行是各个不同的特征维度。求解协方差矩阵S=AAT(最好先将A进行每个维度上的数据进行中心化A→C再求协方差矩阵S=CCT),S是r*r的方阵,用X(j)表示样本数据的第j维数据,则求解协方差矩阵
其中表示两个维度之间的协方差
很显然S是个对称矩阵,求解S的特征向量以及对应的特征值,按照特征值大小依次排列特征向量,将这些特征向量(列向量)组成一个矩阵,被称为转换矩阵或者投影矩阵。如果只取前K列特征向量组成的矩阵P,再把原样本数据用投影矩阵转换到新的坐标空间A’=PTA,可以实现数据的降维。
1.为什么要用协方差矩阵来做呢?
PCA为什么要用协方差矩阵的特征向量矩阵来做投影矩阵呢?这样做出来的投影矩阵一定能保证样本数据投影到另一个坐标系后,前几个坐标的值保证是最大特征?
原因很简单,假设是已经中心化过(PCA要求数据中心化)的数据矩阵,而SVD不需要这么做。
2.为什么PCA可以通过分解协方差矩阵计算,也可以通过分解内积矩阵计算?”
原因很简单,假设是已经中心化过(PCA要求数据中心化)的数据矩阵,每列都是一个样本,那么协方差矩阵是
,而PCA的目标函数是
就是要求的投影矩阵,一般可以通过求
的特征向量求解。
令 (SVD分解),则有
(可以看出
就是特征向量),因此可以知道
,用求得的这个投影矩阵对
做投影得到低维的矩阵
,也就是常用的PCA降维过程。
易知 ,又有
,所以,我们可以对
这个内积矩阵求特征向量
和特征值
就可以得到
。
所以,分解协方差矩阵 或 内积矩阵 都可以求解PCA
降维的目的就是“降噪”和“去冗余”。“降噪”的目的就是使保留下来的维度间的相关性尽可能小,而“去冗余”的目的就是使保留下来的维度含有的“能量”即方差尽可能大。那首先的首先,我们得需要知道各维度间的相关性以及个维度上的方差啊!那有什么数据结构能同时表现不同维度间的相关性以及各个维度上的方差呢?自然是协方差矩阵!
协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的方差(即能量),其他元素是两两维度间的协方差(即相关性)。我们要的东西协方差矩阵都有了。
(奇异值分解)
矩阵经过SVD分解后生成三个矩阵,这块就不细说了,下面主要来分析两者之间的异同点(严格的说是SVD和特征值分解之间的异同):同:1、SVD中的对焦矩阵中的值(奇异值)就是协方差矩阵特征分解的特征值的平方根(因此SVD运算速度更快),2、可以找到一个标准正交矩阵,将特征值分解写成SVD的形式,类似P-1P(AAT)PTP= P-1ΛP 即S=AAT= P-1ΛP, :异:1、SVD不用计算协方差这一步,直接对矩阵C进行奇异值分解,而PCA需要通过计算协方差矩阵,然后在进行特征值分解。2、特征值分解只能对方阵进行分解,而SVD都可以。