降维技术使得我们可以用低维向量表示高维向量。PCA是降维技术的一种,它的思想是,把一个高维向量投影到低维子空间中,子空间基的选择原则是尽量使得投影前不同的向量在投影后依旧不同。接下来,我们就具体介绍PCA的工作原理。
假设有m个
Rn
空间中的向量:
a1,a2,...,am
这些向量为列组成矩阵B:
[a1a2⋯am]
另外,有 Rn 的k维子空间的一组单位正交基组成的矩阵A:
⎡⎣⎢⎢⎢⎢u1u2⋮uk⎤⎦⎥⎥⎥⎥
于是有
AB=⎡⎣⎢⎢⎢⎢u1u2⋮uk⎤⎦⎥⎥⎥⎥[a1a2⋯am]=⎡⎣⎢⎢⎢⎢u1a1u2a1⋮uka1u1a2u2a2⋮uka2⋯⋯⋱⋯u1amu2am⋮ukam⎤⎦⎥⎥⎥⎥=B′
B′ 的每一列向量只有k个元素,是 B 的每一列降维后的结果。降维就这样实现了,但是这里子空间的基是任意选择的,可能不能满足“尽量使得投影前不同的向量在投影后依旧不同”这个要求。在介绍如何选择满足这个要求的基之前,我们先来具体一下这个要求,这个要求可以分解为两点:
(1)B中不同列向量投影到A中行向量上时,应该尽量是不同的,也就是说,B中所有列向量投影到A中任意行向量后应该是尽量分散的,可以用投影后的值的方差来衡量分散程度。方差越大越分散,越小越集中,对我们来说,方差是越大越好。
(2)降维后的矩阵的不同行应该尽量独立。每一行,代表了相应属性在所有数据点中的值,也就是说,每一行代表了一个属性,不同行尽量独立,行与行之间相关性很弱,信息冗余少,表达各自的信息也会更多。可以用两行的协方差来表示两行的相关性,我们知道,当协方差大于0时,两行正相关,当协方差小于0,两行负相关,当协方差等于0时,两行独立,所以我们希望两行的协方差等于0。
子空间的什么样的基可以使得
矩阵B的协方车矩阵是这样得到的:
首先,每一行减去每一行对应的均值avg_i(这里的B展开了):
X=⎡⎣⎢⎢⎢⎢a11−avg1a21−avg2⋮an1−avgna12−avg1a22−avg2⋮an2−avgn⋯⋯⋱⋯a1m−avg1a2m−avg2⋮anm−avgn⎤⎦⎥⎥⎥⎥
X矩阵叫做B的平均偏差形式。
然后, 得到协方差矩阵
C=1mXXT=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1m∑k=1m(a1k−avg1)21m∑k=1m(a1k−avg1)(a2k−avg2)⋮1m∑k=1m(a1k−avg1)(ank−avgn)1m∑k=1m(a1k−avg1)(a2k−avg2)1m∑k=1m(a2k−avg2)2⋮1m∑k=1m(a2k−avg2)(ank−avgn)⋯⋯⋱⋯1m∑k=1m(a1k−avg1)(ank−avgn)1m∑k=1m(a2k−avg2)(ank−avgn)⋮1m∑k=1m(nnk−avgn)2⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
可以看出,协方差矩阵是一个对称矩阵,协方差矩阵的对角线元素就是B矩阵对应行的方差值,非对角线元素,比如第i行第j列元素,i != j, 就是第B矩阵第i行和第j行的协方差值。
B′ 的协方差矩阵也是一样的。按照我们的要求,如果 B′ 的协方差矩阵的非对角线元素为0,对角线元素都比较大就好了。我们马上就来推导帮我们达成这个目标的子空间基。
假设 B′ 的每一行减去相应均值的矩阵为Y, B′ 的协方差矩阵为D,我们需要的基为A, 但这里,我们假设
Y=AX
也就是说,基向量作用在原矩阵的平均偏差形式上的,而不是原矩阵上;也许我们把X看作是每一行的平均数都为0的原矩阵,Y是每一行的平均数都为0的变换后的矩阵,并且X和B,Y与 B′ 的协方差矩阵一样。
D=1mYYT=1m(AX)(AX)T=A1mXXTAT=ACAT
可以看出,如果D的非对角线元素都为0,D实际上就是C对角化的结果,而且我们知道到D的对角线元素就是C的特征值,A的每一行解释对应于D中特征值的特征向量。因为我们需要D对角线元素足够大,所以,我们只需要选择D中较大的特征值对应的特征向量作为子空间的基就好了(注意:因为C是对称矩阵,所以A的各行可以是正交的,而且可以将其单位化,这里假设我们已经对A做了这样的处理),从而得到我们需要的子空间的基A。
虽然我们推导出的A是基于B的偏差形式的,但是将它作用在B上,也能刚好达到我们想要的效果。仔细考虑一下X的形成,它其实来自于B的每一列向量减去向量
M=⎡⎣⎢⎢⎢⎢avg1avg2⋮avgn⎤⎦⎥⎥⎥⎥
也就是将B中所有列向量平移了M,并没有改变所有向量的分布情况,B和X投影到A上,都能达到“方差最大,协方差为0”的效果。
参考资料:
1.《线性代数及其应用》第3版,(美)莱(Lay,D.C.) 著,刘深泉 等译
2. 降维方法(一):PCA原理