PCA(主成分分析)极简推导&理解 · 一 · 数据视角
鸽了一周,是时候开始写东西了。
期中考试考完才写,这是一种报复社会的行为(确信)。
建议大家阅读时多想象图像/画图,对理解很有帮助。
写这个好累啊!!!
一.降维近似数据
提示:这是未中心化的非标准版本。为了便于理解我们从这里出发。最终真正的PCA一定要中心化!!!至于中心化在干什么,后面会讲哒~
1.初步探索
想象你有一堆数据 $$ \vec{x_1}, \vec{x_2}, ... \vec{x_n} $$,每一个数据都是一个向量。
每个数据如果有 \(m\) 维,那么就需要 \(nm\) 个数字来表示这些数据。
但是,这些数据可能是有规律的。 比如可能虽然它们是3维向量,但它们都分布在某个2维子空间(平面)里,只是我们测量时略有误差导致它们看起来分布在3维立体空间中。如果我们把这些数据降到2维,那么我们不但能用更少的空间储存这些向量数据,还能看出隐藏的规律。


所以,我们要对数据降维。也就是选取某些向量: $$ \vec{z_1}, \vec{z_2}, ... \vec{z_d} $$ 然后,将 $ \vec{x_i}$ 近似表示成它们的线性组合: $$\vec{x_i} \approx \sum \lambda_iz_i$$这样就使得数据从 \(n\) 维被降成了 \(d\) 维。换句话说,相当于在$ \vec{z_1}, \vec{z_2}, ... \vec{z_d} $ 张成的线性空间 \(V_z\) 中找到一些向量 \(\vec{x_1'}, \vec{x_2}', ... \vec{x_n}'\),使得对所有 \(i\), 有
\(\vec{x_i}' \approx \vec{x_i}\).
但是怎么保证降维的误差不要太大呢?很简单,我们可以通过选取恰当的 $ \vec{z_1}, \vec{z_2}, ... \vec{z_d} $ (等价于选取恰当的 \(V_z\) ),然后再选取恰当的 \(\vec{x_1'}, \vec{x_2}', ... \vec{x_n}'\) ,使得每个\(\vec{x_i}\)到$ \vec{x_i}’$的距离都比较小。
怎么衡量误差大还是小呢?只要计算距离平方的和 $$\Delta=\sum (\vec{x_i}- \vec{x_i}’)^2$$ 就可以。(为什么是距离的平方和?数学上这大概跟勾股定理有关系。 另外工程上这比较方便优化。以后再讲。)
(注:为了简洁,我直接使用向量的平方表示向量二范数的平方。)
那么,我们就确定了我们的目标!
给定 $$\vec{x_1}, \vec{x_2}, ... \vec{x_n} ,$$ 求一组基$$\vec{z_1}, \vec{z_2}, ... \vec{z_d}$$ 以及它们张成的空间 $$V_z$$ 内的用来近似 \(\vec{x_1} \sim \vec{x_n}\) 一组向量 $$\vec{x_1'}, \vec{x_2}', ... \vec{x_n}' \in V_z,$$来最小化误差 $$\Delta=\sum (\vec{x_i}- \vec{x_i}’)^2.$$
不过,对降维真正有影响的是\(\vec{x_i'}\) 所属的空间 \(V_z\),而\(\vec{z_1}, \vec{z_2}, ... \vec{z_d}\)只是用来张成该空间用的基。如果空间一样,具体选哪组基无所谓。那么当然是简化问题更好,最简单的基就是两两垂直而且长度为1的基,也就是正交归一基。这等价于$$Z^T Z=I$$ 其中\(Z=[ \vec{z_1}, \vec{z_2}, ... \vec{z_d} ]\)是这些基构成的矩阵。
2.开始干活
多变量问题,要最小化某个函数\(f(a,b)\),显然我们应该先冻结一部分变量a(也就是把它们当作给定了的参数),并对\(f_a(b)\) 移动剩下的变量b找到最小值\(f_a\)。然后再解冻变量a,找到\(f_{(a)}\)最小值,这样就找到了整个函数的最小值。
至于冻结谁变动谁,那就挑软柿子捏。我们很容易想起来“投影”的知识:给定向量 \(\vec{x}\) 和空间 \(V\),则 \(\vec{x}' \in V\) 之使得\((\vec{x}-\vec{x}')^2\) 最小者,就是 \(\vec{x}\) 在 \(V\) 中的投影 \(\vec{x_p}\) .
(这个要是忘了,建议大家复习一下上个学期的课。当然我们也可以简单直观理解一下:\(\vec{a}=\vec{x}-\vec{x}'\),当 a 不垂直于 V 时,移动一点 \(\vec{x}'\) 会导致 a 长度变化,即 \(\mathrm{d}(\vec{a}^2)\ne0\).只有当 a 垂直于 V 时,移动一点 \(\vec{x}'\) 并不导致 a 长度变化,即 \(\mathrm{d}(\vec{a}^2)=0\),此时 \(\vec{a}^2\) 取到极值。(这个直观理解很容易转化成严格数学证明,留作习题。))
所以结论很简单:我们先冻结 \(V_z\) ,然后在此基础上求得$ \vec{x_1}, \vec{x_2}, ... \vec{x_n} $在 \(V_z\) 上的投影 $ \vec{x_{1p}}, \vec{x_{2p}}, ... \vec{x_{np}} $,则它们就是在给定了 \(V_z\) 的基础上能最小化 \(\Delta=\sum (\vec{x_i}- \vec{x_i}’)^2\) 的那一组向量 \(\vec{x_1'}, \vec{x_2}', ... \vec{x_n}'\)!!!
由于我们约定了 \(z_i\) 是正交归一基,求投影简直so easy. 正交归一基的特色是点乘得坐标:\(x_j=\vec{z_j}^T \vec{x}\)。那么x的投影向量的坐标\(\vec{x_{\mathrm{coor}}}=Z^T\vec{x}\)。(为什么就是投影向量的坐标呢?因为x超出z空间的分量在点乘中会直接被消成0。) 而向量=基×坐标,所以投影向量 \(\vec{x_p}=ZZ^T \vec{x}\).
接下来把这个带入\(\Delta=\sum (\vec{x_i}- \vec{x_i}’)^2\)里面,一通爆算得到
诶,这结果怎么这么简洁?事出反常必有妖,静下心来好好想一想是不是有什么简单的一步到位的解释。
一看,这是 \(\sum[ x_i^2-(Z^Tx_i)^2]\),平方减平方,是勾股定理。那么\(x_i\)应该是斜边,\(Z^Tx_i\)是一条直角边。。。对吗?
一画图,果然是这样!不过直角边是\(ZZ^Tx_i\),只是它的长度和\(Z^Tx_i\)相等。因为乘正交矩阵不改变向量长度。(可以从变换视角理解成正交矩阵是旋转变换,也可以从基-坐标视角理解成正交基下坐标的模长等于向量的模长。)

注:图中平面表示 \(V_z\)
我们继续。现在已经求出来给定 \(V_z\) 下的目标最小值,现在要解冻 \(V_z\) ,也就是让 \(Z\)(或者说 \(\vec{z_i}\)) 变成变量,寻找全局最小值。
要最小化 \(\min_{Z}\Delta=\min_Z\sum x_i^2-\sum x_i^TZZ^Tx_i\)。注意现在的变量是 \(Z\)。由于 \(\sum x_i^2\) 是数据给定的,只要最大化 \(\Delta' = \sum x_i^TZZ^Tx_i\) 即可。
(直观理解:直角三角形斜边是定的,要最小化竖着的那条边长度,只要最大化横着的那条边的长度。横着的那条边也就是 \(x\) 在 \(V_z\) 中的投影。)
(补充:当我们后面加入中心化后,这里我们要最大化的平方和也就变成了方差。在下下期我们会看到,PCA的统计视角、协方差矩阵、以及其最大化方差的特性。)
然而想最大化这个式子可不简单,因为式子基础是 \(ZZ^T\),整个是由未定的一堆 \(\vec{z_i}\) 向量打包构成的,而向量\(\vec{x_i}\)却是分散的 。我们更希望打包利用已经确定的数据 \(\vec{x_i}\),然后(最好)一个一个求出我们需要的向量 \(\vec{z_i}\),而不要让它们打包。
这时候就要发挥智慧了。\(Z^T x_i\)是 \(\vec{x_i}\) 往所有 \(\vec{z}\) 上面点积(点积是用来求投影坐标的)。但是点积是相互的,\(x_i\)往\(z_j\)点积也就是\(z_j\)往\(x_i\)上点积。所以我们可以大笔一挥:
漂亮!这样就把 \(z\) 拆开了而把 \(x\) 打包了起来。至于这么在 \(z\) 全部正交归一的限制下求 \(\Delta'=\sum_jz_j^TXX^Tz_j\) 的最大值,这就是PCA的“本体”,我们下回详细分解。这里先带过一下:\(z_i\) 取为 \(A=XX^T\) 的特征值最大的前 \(d\) 个特征向量使这个值最大。而且实对称矩阵总有一组正交特征基,这样就保证了正交性。
这可以用把 \(A\) 对角化来证明(相当于切换到\(A\)的特征基下来观察\(z_j^TAz_j\),这样\(A\)只是一个拉伸,所以\(z_j\)要尽量对准拉伸比例比较大的方向,也就是特征方向。很直观。)。
也可以用拉格朗日乘数法证明(不直观)。
总体的直观理解就是 \(z_j^TAz_j\)是一个点积,点积当然是方向越重合越好,值越大越好。取到特征值的时候方向最重合,拉伸比例也比较大,当然也就点积较大。
3.最后我们来总结一下第一部分之降维近似数据。
最直观的超级大总结:
找最好的 \(V_z\) 空间,并在 \(V_z\) 空间中找最好的向量,以近似数据 \(\{ \vec{x_i}\}\)
$\longrightarrow $ \(\vec{x}\) 往 \(V_z\) 上投影得到 \(\vec{x_{p}}\),让差的向量 \(\vec{x_{\perp}} = \vec{x}-\vec{x_{p}}\) 的长度的平方和最小
$\longrightarrow $ \(\vec{x} ~\vec{x_{p}} ~\vec{x_{\perp}}\) 构成直角三角形,而\(x_i\)恒定$\longrightarrow $ \(\vec{x_{p}}\) 长度平方和最大
$\longrightarrow $ \(\vec{x_{p}}\) 是 \(\vec{x}\) 往 \(V_z\) 投影(点积),也就是 \(\vec{x}\)往 \(\vec{z}\) 点积。点积是相互的,所以 \(\sum \vec{x_p}\) 也就是 \(\vec{z}\) 往 \(X\) 点积。
$\longrightarrow $ 让\(\vec{z}\) 往 \(X\) 点积 \(\sum z_j^T(XX^T)z_j\) 最大。
总结完毕,太简单啦!
二、偏置与中心化:更好地近似偏离原点的数据
1.初步探索
我们刚刚的近似方法看起来真是天衣无缝,逻辑自洽,然而实际上一用就完蛋。。。
为什么会这样呢?请看图:

如图是一组低维度的数据。(向量的起点是原点。)
理想的近似是这样的:

然而我们一通操作猛如虎,算出来的近似可能是这样的:

这啥玩意啊?
然而仔细一想,我是在找 \(d\) 个基向量 \(\vec{z}\) ,让它们张成空间 \(V_z\),然后来最小化数据向量 \(\vec{x}\) 往 \(V_z\) 上投影产生的误差 \(\sum(\vec{x}-\vec{x_p})^2\)。但问题在于:\(V_z\) 是一个线性空间,是 \(\{z\}\) 张成的,再怎么调参数也必过原点呐。
问题是它没必要过原点呐!强行让它过原点会导致我的近似的最优解都很差,就像上图那个红色平面一样。
因此,为了处理一般的数据,有必要解放用于近似的子空间 \(V_z\),允许其不过原点。
怎么办呢?很简单,我们不再用 \(\sum \lambda_j \vec{z_j}\) 来近似 \(\vec{x_i}\) (因为 \(\sum \lambda_j \vec{z_j}\) 产生的空间必然过原点);而是全部加上一个(有调节余地的)偏置 \(\vec{x_0}\) ,改用 $$\vec{x_0}+\sum \lambda_j \vec{z_j}$$
来近似 \(\vec{x_i}\).
接下来还是实现根本目标:令 \(\vec{x_i}'=\vec{x_0}+\sum \lambda_{ji} \vec{z_{ji}}\),我们要最小化 \(\Delta = \sum(\vec{x_i}-\vec{x_i}')\).
所以,我们比上次的问题多了一个变量 \(\vec{x_0}\). 多变量问题先冻结一些变量。冻结谁呢?尝试一下,如果我们冻结掉 \(\vec{x_0}\),那么我们的变量就和上次一样,说不定就可以直接转化成上次的问题呢!
所以试试看。固定 \(\vec{x_0}\),要最小化误差 \(\Delta = \sum(\vec{x_i}-\vec{x_0}-\sum \lambda_j \vec{z_j})^2\).诶,这就相当于再上次的问题中近似 \(\vec{x_i}-\vec{x_0}\) .
换句话说,令 \(\vec{y_i} = \vec{x_i}-\vec{x_0}\),那么原问题转化为:
1.把 \(\vec{x_0}\)作为一个给定的参数,把问题转化为上一个问题中对 \(\vec{y_i}\) 做最佳近似(最小化误差)
2.找到哪个 \(\vec{x_0}\) 能在 \(\vec{y_i}\) 已经最佳近似的前提下最小化误差
第一步好说,直接转化为使得 \(\sum_jz_j^TYY^Tz_j\) 最大,也就转化为求 \(YY^T\) 的特征向量。
然而,第二部事情就开始麻烦起来了。\(\vec{y}=\vec{x}-\vec{x_0}\),但是 \(Y\) 和 \(X\) 的关系却很难用矩阵的语言描述,更不要说 \(YY^T\) 了!这说明我们冻结变量的顺序不好。
那么怎么办呢?为了让这两个差固定的向量构成的矩阵不要出现,我们就希望产生矩阵的投影那一步在前面,而相差 \(\vec{x_0}\) 的那一步在后面。也就是说我们反而应该先冻结 \(\{\vec{z}\}\),在此基础上考察使得误差最小的 \(\vec{x_0}\).
那么开工!
2.开始干活
按照思路,我们冻结了变量 \(\{\vec{z}\}\).在此基础上:
1.冻结 \(\vec{x_0}\),那么问题转化为在给定空间 \(V_z\) 中求 \(\vec{y_i}= \vec{x_i}-\vec{x_0}\) 的最佳近似,由前面的讨论知道最佳近似也就是 \(\vec{y_i}\) 在 \(V_z\) 中的投影 \(\vec{y_{ip}}\).
2.解冻 \(\vec{x_0}\),计算并最小化误差 $$\Delta = \sum[(\vec{x}_i-\vec{x_0})-(\vec{x}_i-\vec{x_0})_p]^2$$
其中下标 p 表示投影。
投影是一种线性变换,可以用矩阵表示。为了用线性代数语言描述\(\Delta\),我们采用这种方法,用投影矩阵描述投影,即 \(P\vec{x}=\vec{x}_p\).
如此,有
其中 \(I\) 是单位矩阵。
继续统一用线性代数的语言描述。用把平方写成点积的形式,点积又可以用转置描述,于是有
接下来需要利用投影矩阵的特殊性质。
- \(P\) 是投影矩阵,则 \(I-P\) 也是投影矩阵。前者往 \(P\) 的列空间投影,后者往 \(P\) 列空间的正交补投影。
(举个例子,三维空间中,如果 \(P\) 是往某个平面投影,则 \((I-P)\) ——也就是用原向量减掉投影i向量的变换——就是往垂直那个平面的直线投影。) - \(P=P^T\),即自己等于自己的转置,即投影矩阵是对称矩阵。
(理解:众所周知转置的一种定义是沟通左矢的变换和右矢的变换,即 \(x^T(Ay)=(x^TA)y=(A^Tx)^Ty\). 故只要验证 \((Px)^Ty=x^T(Py)\) 即可说明 \(P=P^T\).
利用投影的性质,有 \((Px)\cdot (y)=x_p \cdot (y_p + y_\perp) = x_p\cdot y_p\),而 \(x\cdot (Py)=(x_p + x_\perp)\cdot y_p = x_p \cdot y_p\),两者相等。由此验证了 \(P=P^T\).) - \(P^2=P\),即投影矩阵幂等。
(很好理解,投影一次之后就已经是影子了,影子再投影还是白投影。或者说,投影一次之后就已经在我要投影到的那个空间里面去了,而再投影一次只会让那个空间里面的向量原地不动。)
由此得到 \((I-P)^T(I-P)=(I-P)^2=(I-P)\). 故
要最小化误差,我们可以拿它对 \(\vec{x_0}\) 求导。不过为了避免过于高深的数学,我们搞一点更直观的:把 \(\vec{x_0}\) 看作变量,对 \(\Delta\) 求微分,微分=0时取到极值。
由乘法法则,有
取到极值要 \(\mathrm{d} \Delta=0\),只要 \((I-P)\sum(\vec{x}_i-\vec{x_0})=0\).
接下来:
3.解冻\(V_z\)空间,也就会解冻 \(P\) 矩阵。然后对于每个 \(P\) 矩阵,我们都要找一个 \(\vec{x_0}\) 使得 \((I-P)\sum(\vec{x}_i-\vec{x_0})=0\) 来取到误差最小值。有没有统一解呢?
有的! 令 \(\vec{x_0}\) 为 \(\vec{x}\) 的平均值,即 \(\vec{x_0}=\frac{1}{n}\sum\vec{x_i}\),那么管你哪个 \(P\) 都有 \((I-P)\sum(\vec{x}_i-\vec{x_0})=0\).
3.总结
所以我们可以总结:要用 \(\vec{x_0}+\sum \lambda_j \vec{z_j}\) 最佳近似 \(\vec{x_i}\),只要
- 令 \(\vec{x_0} = \frac{1}{n}\sum\vec{x_i}\)
- 找 \(d\) 个 $\vec{z} $ 来用 \(\sum \lambda_j \vec{z_j}\) 近似 \(\vec{y_i}=\vec{x_i}-\vec{x_0}\). 这等价于求 \(YY^T\) 的特征值最大的前 \(d\) 个特征向量。
而第一步,所有向量减掉平均值,使得新向量的平均值为0,这个操作我们称为中心化。
中心化的意义是:让用于近似的子空间不必经过原点,这使得我们能更好地近似集体偏离原点的数据,优化了近似的效果。
三、预告
我们现在已经获得了 PCA 的一部分直观理解和对应的数学证明。但是那个 \(YY^T\) 矩阵到底是什么玩意?有什么物理意义?什么性质?为什么突然就从推导中蹦出来了?
另外,矩阵一般是用来描述线性变换的,这样特征向量/特征值这种概念才有意义:被施加变换后只拉伸不被打歪的向量,以及其拉伸的比例。可是 \(Y\) 分明是中心化了的数据矩阵,而不是某种变换,为什么 \(YY^T\) 的特征向量就这么重要,是所求的 \(\vec{z}\) 呢???
其实它就是著名的协方差矩阵。至于详细如何,请听下回/下下回分解。

浙公网安备 33010602011771号