PCA算法的数学知识---特征值分解和奇异值分解
PCA 算法的数学知识---特征值分解和奇异值分解: 1)特征值:
如果说一个向量v 是方阵X 的特征向量,将一定可以表示成下面的形式:
Xv =λv
这时候λ就被称为特征向量v 对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: X =Q ∑Q -1
其中Q 是这个矩阵X 的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。
首先,要明确的是,乘以一个矩阵其实就是一个线性变换,而且将一个矩阵乘以一个向量后得到的向量,其实就相当于对这个向量进行了线性变换。如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。通过特征值分解得到的前N 个特征向量,就对应了这个矩阵最主要的N 个变化方向。我们利用这前N 个变化方向,就可以近似这个矩阵(变换)。也就是:提取这个矩阵最重要的特征。
总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性
的奇异值之和的99%以上了。也就是说,我们也可以用前r 大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
X n *p ≈U n *r ∑r *r V T
r *p
r 是一个远小于n 、p 的数,右边的三个矩阵相乘的结果将会是一个接近于X 的矩阵,在这儿,r 越接近于p ,则相乘的结果越接近于X 。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵X ,我们如果想要压缩空间来表示原矩阵X ,我们存下这里的三个矩阵:U 、Σ、V 就好了。 奇异值与主成分分析(PCA ):
PCA 的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N 维空间中,我们可以找到N 个这样的坐标轴,我们取前r 个去近似这个空间,这样就从一个N 维的空间压缩到r 维的空间了,但是我们选择的r 个坐标轴能够使得空间的压缩使得数据的损失最小。
假设矩阵每一行表示一个样本,每一列表示一个特征,用矩阵的语言来表示,对一个n* p的矩阵X 进行坐标轴的变化,P 就是一个变换的矩阵,从一个p 维的空间变换到另一个p 维的空间,在空间中就会进行一些类似于旋转、拉伸的变化。
X n *p P p *p = X n *p
而将一个n * p的矩阵X 变换成一个n* r的矩阵,这样就会使得本来有p 个特征的样本,变成了有r 个特征了(r
X n *p P p *r = X n *r
但是这个跟奇异值分解(SVD )什么关系呢?之前谈到,SVD 得出的奇异向量也是从奇异值由大到小排列的,按PCA 的观点来看,就是方差最大的坐标轴就是第一个奇异向量,方差次大的坐标轴就是第二个奇异向量…我们回忆一下之前得到的SVD 式子:
X n *p ≈U n *r ∑r *r V r T *p
在矩阵的两边同时乘上一个矩阵V ,由于V 是一个正交的矩阵,所以V 转置乘以V 得到单位阵I ,所以可以化成后面的式子 X n *p V p *r ≈U n *r ∑r *r V r T *p V p *r
X n *p V p *r ≈U n *r ∑r *r
将后面的式子与X * P那个n * p的矩阵变换为n * r的矩阵的式子对照看看,在这里,其实V 就是P ,也就是一个变化的向量,即一组新的坐标基,也叫主成分矩阵,而U n *r ∑r *r 相当于原数据在新坐标基下的
坐标,叫做得分矩阵。这里是将一个n * p的矩阵压缩到一个n * r的矩阵,也就是对列进行压缩。
如果我们想对行进行压缩(在PCA 的观点下,对行进行压缩可以理解为,将一些相似的样本合并在一起,或者将一些没有太大价值的样本去掉)怎么办呢?同样我们写出一个通用的行压缩例子:
P r *n X n *p =X r *p
这样就从一个n 行的矩阵压缩到一个r 行的矩阵了,对SVD 来说也是一样的,我们对SVD 分解的式子两边乘以U 的转置U' U r T *n X n *p ≈∑r *r V r T *p
这样我们就得到了对行进行压缩的式子。可以看出,其实PCA 几乎可以说是对SVD 的一个包装,如果我们实现了SVD ,那也就实现了PCA 了,而且更好的地方是,有了SVD ,我们就可以得到两个方向的PCA ,如果我们对X T X 进行特征值的分解,只能得到一个方向的PCA 。