2 minute read

合着按着我自己的思路才是最好理解的。PCA 的整个过程其实就是:寻找一个基变换 (change of basis),使得新坐标系内的 axes 的功效可以量化。这个量化的意思是,如果新坐标系内有 x’-axis 和 y’-axis,我可以明确地写出 effect(x’-axis)effect(y’-axis)=γ 这么一个比值。那么这个量化是怎么做的呢?用的是原数据集沿该 axis 所保留的 covariance matrix。

第一步:CenteringPermalink

假设我有 m 个点,每个都是 n 维,所以 Xm×n=[(x(1))T(x(2))T(x(m))T]

X 做一个 column-wise centering:

  1. μj=1mi=1mxj(i) (mean of each column)
  2. xj(i)=xj(i)μj (column 整体减去 mean of column)

做完 column-wise centering 之后,才能有 covariance matrix Σ(X)=1mXXT (因为 column 的 mean 等于 0,所以每个 column 的期望 E[] 小项就不用考虑了)

第二步:假设一个 change of basis (实际并不需要执行这个 change of basis)Permalink

当前的 n 个 bases 是 i^=[100],j^=[010],,z^=[001] (必然都是 n 维)。假设有 Bn×n=[||||i^j^z^||||]

假设变换后的 n 个 bases 是 i^,j^,,z^ 且有 Bn×n=[||||i^j^z^||||]

题外话:如果对 X 做基变换的话:假设变换后的坐标是 X,那么 XB=XB=XX=XB1

  • 注意 X 的 row 才是 coordinates,所以应该是 XB 而不是 BX
  • 另外有一点:基变换是 linear transformation,所以 X 的每个 column 的 mean 仍然为 0 (沿袭第一步 centering 的效果),所以仍然有 Σ(X)=1mXXT

第三步:定量 Effect of axisPermalink

那我们现在研究:Xi^ 方向上的 covariance 是多少?根据公式:

Cov(Xi^,Xi^)=1m(Xi^μXi^)T(Xi^μXi^)=1m(Xi^)TXi^=1mi^TXTXi^

这就是我们要找的 effect of axis,令 effect(k^)=Cov(Xk^,Xk^),所以对任意两个新的 bases i^j^,有:

effect(i^)effect(j^)=i^TXTXi^j^TXTXj^

第四步:通过 Eigen-decomposition 确定 change of basisPermalink

那为了让这个比值有意义,我们可能会想说:如果 i^j^XTX 的 eigenvectors 就好办了,那么:

effect(i^)effect(j^)=i^T(XTXi^)j^T(XTXj^)=i^T(λi^i^)j^T(λj^j^)=λi^λj^

那么我们就直接这样做好了!

直接 eigen-decompose XTX

  • 因为 XTX 必定 positive semi-definite,所以 eigenvalues 都是 non-negative
  • 最大的 eigenvalue 对应的 eigenvector 的方向,X 所保留的 covariance 最大
  • 第二大的 eigenvalue 对应的 eigenvector 的方向,X 所保留的 covariance 次之
    • 依此类推

注意很多教程写的是方法是去 SVD Σ(X)=1mXXT 或是直接 SVD X (因为一般情况下都是 m>n 所以 Um×m 应该也能包含 n 个有效的 eigenvalues),换汤不换药。

Comments