实际中最好的做法是选择一个合适的,使得的协方差矩阵(covariance matrix)能够被对角化(diagonalized)。这是符合直观的因为这样子所有的covariance都被消除了(比如可能本来有很多noise)而留下的就是最能体现信息量的方差本身。具体的做法则是,注意到也是对称正定矩阵所以我们可以做特征值分解(eigen-decomposition)得到,其中是对角矩阵(对角元是特征值),的每列是相应的特征向量。我们令便能得到我们的principal components。因为用这样的,我们就有(注意因为是正交阵,所以):
即我们可以将对角化。
而SVD来源于另外的一套数学概念,不过我们将要说明这套概念和PCA是内在关联的。不同于特征值分解,SVD(奇异值分解)可以作用于任何形状的矩阵。于是我们则定义对的SVD为,其中是两个正交阵而是对角阵(对角元是的奇异值,即singular values)。我们由此也可以看到SVD比特征值分解要强得多的泛用性,这也是它广泛被用于数值计算的原因。
那么它与PCA的关系呢?我们考虑的SVD表示方式:,所以到这里答案就很明显了,我们只需要取另一个投影矩阵就可以将对角化,即的列是principal components。顺便,我们得到了一个副产品奇异值和特征值的关系:,其中是和相应的特征值和奇异值。因此,我们得到了SVD是PCA的另一种algebraic formulation。而这也提供了另外一种算法来计算PCA,实际上,平时我就是用SVD定义的这套算法来做PCA的。因为很方便,计算一次就可以了。
额外补充一点,经常我们希望用PCA对进行压缩,比如只保留维度的数据,这个时候我们只需要仅保留的前列(前个principal components),记作,然后就是我们所要的压缩后的数据。
对于pca问题其实是如下优化问题:
由于,可以知道V为正交矩阵, 因为从几何上可以知道,要想得到最大的方差,Y的协方差矩阵必为对角矩阵,即,由矩阵分析知识,V必为的特征向量。