继上一篇文章对PCA分析后,这篇文章将介绍一个每提及PCA时,都会提到的名字SVD。
SVD,奇异值分解。是属于矩阵分解里面的一种方法。
在谈论SVD之前,其实有必要回忆另外的一种很常用的矩阵分解。
可以看到,对于任意的n×n的对称矩阵A,都存在 A=VDVT A = V D V T 。
那么假如矩阵A不是方针那么是否存在类似的分解呢?没错,这个就是SVD分解。
说的简单一点,就是对于任意m×n的矩阵A,可以将其分解为 A=USVT A = U S V T 。
那么U、S、V是什么呢?如何求解呢?其实思路很简单。
我们两边同时右乘一个 AT A T 在 A=USVT A = U S V T 中,可以获得:
AAT=USVTAT A A T = U S V T A T ,同时,我们有 AT=VSTUT A T = V S T U T ,带入得到
AAT=USVTVSTUT A A T = U S V T V S T U T ,在上面的定义中我们知道V和U是一个正交矩阵,也就是满足 VVT=E V V T = E 或者 VTV=E V T V = E 。
那么上式就可以简化为:
AAT=US2UT A A T = U S 2 U T 。(注意 S2 S 2 仍然是一个对角矩阵)
把这个式子对比文章开始给出的第一个结论。我们可以看到,其实U的列向量就是 AAT A A T 的特征向量。
同理,我们在 A=USVT A = U S V T 中左乘一个 AT A T ,可以得到类似结论如下:
ATA=VS2VT A T A = V S 2 V T ,也就是说V的列向量就是 ATA A T A 的特征向量。
最后只剩一个S还没求解,S很简单。S的值称为奇异值。通过上面我们知道
ATA A T A 的特征值对应的就是 S2 S 2 对角线上的值。那么S的奇异值就是 ATA A T A 特征值开方。
最后,我给出下面一些名词。
对于 A=USVT A = U S V T 中的U我们称为左奇异矩阵,V称为右奇异矩阵。
那么通过上面来看,SVD似乎没有和降维相关的东西,那么SVD到底是怎么和PCA扯上关系的呢?
在上一篇文章中,我们讨论了PCA,并且我们得出一个结论,就是求得投影矩阵P(m×k)后,将数据集X(n×m)做线性变换P可以得到降维后的结果Y(n×k)。(其中n是样本的条数,m是原始数据特征的维度,k是降维后特征的维度)
(这里特别需要注意的是,本文的行是代表样本,列是代表特征。不同的定义方式会有完全不一样的表达方式)
也就是: Y=XP(0) (0) Y = X P
如果我们对X做SVD分解,那么我们有 X=USVT(1) (1) X = U S V T
我们尝试在(1)式中乘上一个 V V ,我可以得到:
US=XV(2) (2) U S = X V
我们把(2)和(0)对比一下。我们可以发现其实应该有:
P=V(3) (3) P = V 以及 Y=US(4) (4) Y = U S
也就说,PCA中需要用到的投影矩阵P其实就是SVD里面的右奇异矩阵。
而降维后的矩阵Y就是左奇异矩阵U乘对角矩阵S。
或者说的简单一点,对数据集X做SVD就可以直接得到PCA的结果Y。
上面的分析我们知道,V的列向量其实对应着是 XTX X T X 的特征向量,而由于A的n是样本数量,m是维度的数量,所以 ATA A T A 是协方差矩阵,这么说来其实SVD求解过程本质上和PCA是一样的。
注意:理解协方差矩阵的关键就在于牢记它的计算是不同维度之间的协方差,而不是不同样本之间。拿到一个样本矩阵,最先要明确的就是一行是一个样本还是一个维度,心中明确整个计算过程就会顺流而下,这么一来就不会迷茫了。
上面我得到了两个式子,对于式子(3),其方法和我们在上一篇求PCA的思路是一致的,求X的协方差矩阵。然后得到投影矩阵P后就可以得到Y。
对于式子(4),其实是另一个角度来求降维后的矩阵Y。
Y=US(4) (4) Y = U S
上式中的U通过前面我们知道是求 XXT X X T 的特征向量得到,而 XXT X X T 是内积矩阵不同于 XTX X T X 协方差矩阵。
这意味着,对于PCA我们不是只有求协方差矩阵 XTX X T X 唯一一个选择。
(可以考虑比较特征与维度的大小来选择求哪一个矩阵的特征)
至此,简单的分析了一下SVD和PCA的关系,其实回头看,SVD其实可以用来求PCA,当然SVD 在机器学习中用于推荐系统的作用也为大家所熟知。
求pca的时候,能不能不用协方差矩阵?
强大的矩阵奇异值分解(SVD)及其应用