假如我们的原始数据矩阵是 X \mathbf{X} X,维度是 n ∗ m n * m n∗m。
主成分分析:
首先计算
X
X
X的协方差矩阵,
C
C
C的维度是
m
∗
m
m*m
m∗m:
C
=
C
o
v
(
X
)
C=Cov(X)
C=Cov(X)
然后对协方差矩阵进行特征分解,这里
P
m
∗
m
P_{m*m}
Pm∗m由
C
C
C的特征向量组成,对角矩阵
Λ
m
∗
m
\Lambda_{m*m}
Λm∗m由
C
C
C的特征值组成:
C
=
P
Λ
P
−
1
C=P\Lambda P^{-1}
C=PΛP−1
最后选取前
r
r
r列得到
P
m
∗
r
P_{m*r}
Pm∗r,原始数据通过以下方式降维:
X
~
n
∗
r
=
X
n
∗
m
P
m
∗
r
\tilde{X}_{n*r}=X_{n*m}P_{m*r}
X~n∗r=Xn∗mPm∗r
奇异值分解:
X
X
X可以被分解为三个矩阵的乘积:
X
n
∗
m
=
U
n
∗
n
Σ
n
∗
m
V
m
∗
m
T
X_{n*m} = U_{n*n} \Sigma_{n*m} V^T_{m*m}
Xn∗m=Un∗nΣn∗mVm∗mT
我们知道 U U U是由 X X T XX^T XXT的特征向量组成, V V V是由 X T X X^TX XTX的特征向量组成,而 Σ \Sigma Σ由 X X T XX^T XXT特征值的平方根组成。
联系是什么?
当
X
X
X是中心化了的数据,也就是说均值为0,其协方差矩阵可以由
1
n
−
1
X
T
X
\frac{1}{n-1}X^TX
n−11XTX计算得到。
而可以看到在SVD中, V V V就直接是由 X T X X^TX XTX的特征向量组成的,那这里的 V V V就相当于上面的 P P P。
因此,原始数据中心化后还可以直接使用SVD的结果进行降维:
X ~ n ∗ r = X n ∗ m V m ∗ r \tilde{X}_{n*r}=X_{n*m}V_{m*r} X~n∗r=Xn∗mVm∗r
注意前提条件:中心化了的原始数据。