PCA和SVD之间的关系
概述
主成分分析(Principal Component Analysis,简称 PCA)是一种使用广泛的技术,适用于各种应用,例如降维、数据压缩、特征提取和可视化。基本思想是数据集原始的维度可能有许多是线性相关维度的。将数据集投影到被称为主成分(Principal Component,简称PC)的维度上。各主成分是线性无关的,同时保留数据中大部分的可变性(variability)。
奇异值分解(Singular Value Decomposition,简称SVD)是一种经常用于计算数据集主成分的计算方法。采用奇异值分解(SVD)进行主成分分析是一种高效且数值鲁棒的方法。此外,它们之间的亲密关系可以让我们直观地了解我们对PCA实际做了什么,并帮助我们获得对这种技术的额外见解。
在这篇文章中,我将明确描述SVD和PCA之间的数学关系,并强调这样做的一些好处。如果您过去使用过这些技术,但不确定它们如何在内部工作,那么本文将为您提供帮助。最后,您可以理解使用PCA和SVD的动机,并且对如何有效地使用它们有更好的直觉。
数据矩阵化
在我们讨论如何实际执行 PCA 之前,将数据以矩阵形式编码将很有用。由于 PCA 和 SVD 是线性技术,这将使我们能够更轻松地使用线性变换来处理数据。
用例子来引入是最简单的,假设提供了
n
=
1000
n = 1000
n=1000 个矩形盒子的宽度
w
w
w ,高度
h
h
h 和长度
l
l
l 。我们将第
i
i
i 个矩形盒子编码成 一个
(
w
i
,
h
i
,
l
i
)
(w_i, h_i, l_i)
(wi,hi,li) 元组(tuple),被称为一个样本(sample)。每个样本是
d
=
3
d = 3
d=3 维的向量(vector),因为有3个分量来描述它。向量
x
i
x_i
xi 及
x
i
T
x_i^T
xiT 如下所示:
x
i
=
(
w
i
h
i
l
i
)
and
x
i
T
=
(
w
i
,
h
i
,
l
i
)
.
x_i = \left( \begin{array}{c} w_i \\ h_i \\ l_i \end{array} \right) \quad\text{and}\quad x_i^T = \left( w_i, h_i, l_i \right)\,.
xi=⎝⎛wihili⎠⎞andxiT=(wi,hi,li).
为了将数据打包到单个对象中,我们只需将样本作为数据矩阵的行进行堆叠,
X
=
(
w
1
h
1
l
1
w
2
h
2
l
2
⋮
w
1000
h
1000
l
1000
)
.
X = \left( \begin{array}{ccc} w_1 & h_1 & l_1 \\ \hline w_2 & h_2 & l_2 \\ \hline &\vdots& \\ \hline w_{1000} & h_{1000} & l_{1000} \end{array} \right)\,.
X=⎝⎜⎜⎜⎛w1w2w1000h1h2⋮h1000l1l2l1000⎠⎟⎟⎟⎞.
这个矩阵的一列对应数据的一个维度,也被称为样本的一个特征。
在一般情况下,我们使用的是数据集有 n n n 个样本, d d d-维。
我们不使用像
h
h
h、
w
w
w和
l
l
l这样的字母来表示不同的维度,而是简单地枚举每个向量的分量,
x
i
T
=
(
x
i
1
,
…
,
x
i
d
)
x_i^T = (x_{i1}, \ldots, x_{id})
xiT=(xi1,…,xid) 。这里的向量
x
i
T
x_i^T
xiT 表示一个样本, 而它的一个分量表示在一个维度上的取值,比如
x
i
1
x_{i1}
xi1 表示第
i
i
i 个样本的第
1
1
1 个维度的取值。在将这些向量放入数据矩阵之前,为了方便之后的操作,我们实际上要对数据集做中心化(zero-centered),减去来自所有样本数据的平均值
μ
=
1
n
∑
i
=
1
n
x
i
=
(
1
n
∑
i
=
1
n
x
i
1
,
…
,
1
n
∑
i
=
1
n
x
i
d
)
T
\mu = \frac{1}{n} \sum_{i=1}^n x_i = (\frac{1}{n} \sum_{i=1}^n x_{i1}, \ldots, \frac{1}{n} \sum_{i=1}^n x_{id} )^T
μ=n1i=1∑nxi=(n1i=1∑nxi1,…,n1i=1∑nxid)T
得
X
=
(
x
1
T
−
μ
T
x
2
T
−
μ
T
⋮
x
n
T
−
μ
T
)
.
X = \left( \begin{array}{ccccc} && x_1^T - \mu^T && \\ \hline && x_2^T - \mu^T && \\ \hline && \vdots && \\ \hline && x_n^T - \mu^T && \end{array} \right)\,.
X=⎝⎜⎜⎜⎛x1T−μTx2T−μT⋮xnT−μT⎠⎟⎟⎟⎞.
图1给出了
n
=
1000
n = 1000
n=1000,
d
=
2
d = 2
d=2的可视化说明。将数据放入矩阵特别方便,因为它允许我们将样本协方差用矩阵表示为
S
=
1
n
−
1
∑
i
=
1
n
(
x
i
−
μ
)
(
x
i
−
μ
)
T
=
1
n
−
1
X
T
X
.
S = \frac{1}{n-1} \sum_{i=1}^n (x_i-\mu)(x_i-\mu)^T = \frac{1}{n-1} X^T X\,.
S=n−11i=1∑n(xi−μ)(xi−μ)T=n−11XTX.
除以
n
−
1
n - 1
n−1是典型的使用样本均值而不是真实总体均值的方法。
协方差矩阵将在我们理解主成分和奇异值分解的过程中占据中心地位。
什么是协方差
X
X
X的第
j
j
j 列是上文中数据集中心化后数据集的第
j
j
j 维度。
因此,
1
n
−
1
X
T
X
\frac{1}{n-1} X^TX
n−11XTX的第
j
k
jk
jk 项通过:
X
X
X的第
j
j
j 列 和
X
X
X的第
k
k
k 列做內积得到的,前者可表示为
x
∙
,
j
x_{\bullet, j}
x∙,j,后者可表示为
x
∙
,
k
x_{\bullet, k}
x∙,k。即,
1
n
−
1
x
∙
,
j
⋅
x
∙
,
k
=
1
n
−
1
x
∙
,
j
T
x
∙
,
k
=
1
n
−
1
∑
i
=
1
n
x
i
j
x
i
k
.
\frac{1}{n-1} x_{\bullet,j} \cdot x_{\bullet,k} = \frac{1}{n-1} x_{\bullet,j}^T x_{\bullet,k} = \frac{1}{n-1} \sum_{i = 1}^n x_{ij}x_{ik}\,.
n−11x∙,j⋅x∙,k=n−11x∙,jTx∙,k=n−11i=1∑nxijxik.
当
k
=
j
k = j
k=j时,这是第
k
k
k 个维度的方差。
∑ i = 1 n ( x i − μ ) ( x i − μ ) T = X T X \sum_{i=1}^n (x_i-\mu)(x_i-\mu)^T = X^TX ∑i=1n(xi−μ)(xi−μ)T=XTX是一个简单的矩阵乘法。注意,等号左边的项是表示为 d ∗ 1 d \ * 1 d ∗1和 1 ∗ d 1 \ * d 1 ∗d矩阵的向量乘积的和,产生大小为 d ∗ d d \ * d d ∗d的结果。
注:概率统计中讲协方差是针对不同随机变量的。在本文中,数据集的一个维度(一个特征)是一个随机变量。而不同样本在同一个随机变量中会有不同的观测值。
主成分分析
最早介绍 PCA 的论文之一是由 Hotelling 于 1933 年发表的。作者的动机是将一组可能线性相关的变量转换为“一些更基本的自变量集…决定了[原始变量]将采用的值。” 受到心理学影响,他命名它们的首选是“因子” (factors),但考虑到这个术语在数学中已经有了意义,他将简化的变量集称为**“成分”**(components),并将找到它们的技术称为“主成分分析”。这些成分是按顺序选择的,让它们“对[原始变量]方差的贡献尽可能大。”
数学上,主成分分析的目标是找到一个集合,它由 k ≤ d k \leq d k≤d 个单位向量 v i ∈ R d ( i ∈ 1 , … , k v_i \in \mathbb R^d (i \in {1, \ldots, k } vi∈Rd(i∈1,…,k)构成。每个单位向量被称为主成分。满足,
- 投影到 v i v_i vi 决定的方向上的数据集的方差是最大的
- v i v_i vi与 v 1 , v 2 , … , v i − 1 v_1, v_2,\ldots, v_{i-1} v1,v2,…,vi−1正交。
现在,向量
x
∈
R
d
x \in \mathbb R^d
x∈Rd在由
v
i
v_i
vi 所决定的直线上的投影被表示为内积
v
i
T
x
v_i^T x
viTx (单位向量模长为1)。这意味着数据集的投影到第一个主成分
v
1
v_1
v1上的方差可以写成
1
n
−
1
∑
i
=
1
n
(
v
1
T
x
i
−
v
1
T
μ
)
2
=
v
1
T
S
v
1
.
\frac{1}{n-1}\sum_{i=1}^{n}(v_1^Tx_i-v_1^T\mu)^2 = v_1^TSv_1.
n−11i=1∑n(v1Txi−v1Tμ)2=v1TSv1.
为了找到
v
1
v_1
v1,我们必须最大化这个量,满足额外单位向量约束,即
∥
v
1
∥
=
1
\| v_1 \|= 1
∥v1∥=1。
为了解决该优化问题,使用拉格朗日乘子法,得
S
v
1
=
λ
1
v
1
,
(1)
Sv_1 = \lambda_1v_1\, \tag{1},
Sv1=λ1v1,(1)
这就意味着
v
1
v_1
v1是协方差矩阵
S
S
S的特征向量。事实上,由于
∥
v
1
∥
=
v
1
T
v
1
=
1
\| v_1 \| = v_1^T v_1 = 1
∥v1∥=v1Tv1=1,在式(1)等号两边同时左乘
v
1
T
v_{1}^T
v1T ,我们也得出相应的特征值正好等于数据集沿
v
1
v_1
v1的方差,即,
v
1
T
S
v
1
=
λ
1
.
v_1^T S v_1 = \lambda_1\,.
v1TSv1=λ1.
您可以继续这个过程,将数据集投射到新的方向
v
2
v_2
v2,同时强制附加的约束
v
1
⊥
v
2
v_1 \perp v_2
v1⊥v2,然后再强制
v
3
⊥
v
1
、
v
2
v_3 \perp v_1、v_2
v3⊥v1、v2时将数据投射到
v
3
v_3
v3
最终的结果是 X X X的前 k k k主成分完全对应于协方差矩阵 S S S的特征向量按其特征值大小排序。
此外,特征值完全等于数据集投影到相应特征向量方向上计算出来的方差。
您可能已经注意到,这个结果表明
S
S
S 存在一组完整的标准正交特征向量。实际上,**因为
S
S
S是一个实对称矩阵,这意味着
S
=
S
T
S = S^T
S=ST,事实上谱定理(THE SPECTRAL THEOREM)
说明了这一点。这是一个非常重要的结果,我们将在后面的文章中使用它,所以让我们对它进行一点扩展。
注:
- 实对称矩阵的不同特征值所对应的特征向量是正交的。
- 实对称矩阵的特征值都是实数,特征向量都是实向量。
- n阶实对称矩阵必可对角化。
考虑
k
=
d
<
n
k = d < n
k=d<n 的情况。如果我们的目的是通过一个低维子空间来理解
X
X
X,那么使用
k
=
d
k = d
k=d个主成分可能看起来是一个奇怪的选择。但是这样做可以让我们构造一个
d
×
d
d \times d
d×d 的矩阵
V
V
V,它的列是
S
S
S的特征向量,因此它可以对角化
S
S
S,即:
S
=
V
Λ
V
T
=
∑
i
=
1
d
λ
i
v
i
v
i
T
=
∑
i
=
1
r
λ
i
v
i
v
i
T
,
S = V \Lambda V^T = \sum_{i = 1}^d \lambda_i v_i v_i^T =\sum_{i = 1}^r \lambda_i v_i v_i^T \,,
S=VΛVT=i=1∑dλiviviT=i=1∑rλiviviT,
其中
Λ
=
diag
(
λ
1
,
…
,
λ
d
)
\Lambda = \text{diag}(\lambda_1, \ldots, \lambda_d )
Λ=diag(λ1,…,λd) 而且
r
=
rank
(
X
)
r = \text{rank}(X)
r=rank(X)。注意,上式成立是由于
S
S
S是实对称矩阵,附录A有详细说明。由附录B,可知
λ
r
+
1
=
λ
r
+
2
=
…
λ
d
=
0
\lambda_{r+1}=\lambda_{r+2}=\dots\lambda_{d} = 0
λr+1=λr+2=…λd=0。
奇异值分解
奇异值分解是一种矩阵分解方法,用于线性代数的许多数值应用,例如 PCA。这种技术增强了我们对主成分是什么的理解,并提供了一个强大的计算框架,让我们能够为更多数据集准确计算它们。
让我们先回顾一下针对任意一个
n
∗
d
n \ * d
n ∗d矩阵$ A $的 SVD。
SVD的动机是基于这样一个事实,当
A
A
A 被看作一个线性变换时,
A
A
A 将单位球
S
d
⊂
R
d
\mathbb S^d \subset \mathbb R^d
Sd⊂Rd 映射到
R
n
\mathbb R^n
Rn 中的(超)椭圆。让我们考虑一个
n
=
d
=
2
n = d = 2
n=d=2的例子,以便更容易地理解这一事实
从这个图中,我们可以提取出一些有用的定义,这些定义适用于任意维度,但需要注意以下几点:
-
椭圆的半轴 A S d 在 R n A\mathbb S^d在\mathbb R^n ASd在Rn中的长度 σ i \sigma_i σi是** A A A的奇异值**。
-
沿椭圆半轴的单位向量 u i {u_i} ui称为 A A A的“左”奇异向量。
-
(很重要)单位向量 v i v_i vi 满足
A v i = σ i u i (2) Av_i = \sigma_i u_i \tag{2} Avi=σiui(2)v i v_i vi称为 A A A的“右”奇异向量。
注:“左”奇异向量在等号右边,“右”奇异向量在等号左边,请注意。
证明奇异值和奇异向量的存在性和唯一性有点超出了本文的范围,但是证明是相对简单的,并且可以在任何关于数值线性代数的书中找到。然而,图2中的二维图像有望提供足够的提示,使结果变得直观。
一般来说,存在
r
=
rank
(
A
)
r = \text{rank}(A)
r=rank(A)个奇异值和相同数量的左奇异向量。准确地说,
r
=
rank
(
A
)
r = \text{rank}(A)
r=rank(A)是非零奇异值的数目。
将向量
v
i
v_i
vi和
u
i
u_i
ui分别叠加到矩阵
V
^
\widehat V
V
和
U
^
\widehat U
U
的列中,可以将
A
v
i
=
σ
i
u
i
Av_i = \sigma_i u_i
Avi=σiui写成
A
V
^
=
U
^
Σ
^
,
A\widehat V = \widehat U \widehat \Sigma\,,
AV
=U
Σ
,
其中
Σ
^
=
diag
(
σ
1
,
…
,
σ
r
)
\widehat \Sigma = \text{diag}(\sigma_1, \ldots, \sigma_r)
Σ
=diag(σ1,…,σr).
个人理解,矩阵方程的关键在于形式是矩阵,其本质还是内部的线性方程组,只不过将内部的线性方程组组成成矩阵方程的形式。然后可以对其进行一些矩阵分析的操作。
通过在
Σ
^
\widehat \Sigma
Σ
中填充0并在
U
^
\widehat U
U
和
V
^
\widehat V
V
中添加任意正交列,我们得到了一个更方便的分解式子
A
V
=
U
Σ
.
A V = U \Sigma\,.
AV=UΣ.
因为
V
V
V是幺正(unitary)的——它有单位长度,正交列,满足
V
−
1
=
V
T
V^{-1} = V^T
V−1=VT,那么乘以
V
T
V^T
VT,我们得到
A
A
A的奇异值分解:
A
=
U
Σ
V
T
.
A = U \Sigma V^T\,.
A=UΣVT.
图2是这个结果的视觉总结。
注意这个结果最终和上面的椭圆图是一致的,因为三个变换的效果是:用 V T V^T VT切换到新的基,用 Σ \Sigma Σ拉伸轴得到(超)椭圆,用 U U U旋转和反射(不影响椭圆的形状)。
SVD和PCA的关系
因为任何矩阵都有奇异值分解,让我们取$ A = X$ 并记
X
=
U
Σ
V
T
.
X = U \Sigma V^T\,.
X=UΣVT.
到目前为止,我们认为
A
A
A是一个线性变换,但是没有什么可以阻止我们在任何数据矩阵上使用SVD。**注:**后者是以数据样本集的视角而不是线性变换的视角。
事实上,请注意,从分解我们有
X
T
X
=
(
U
Σ
V
T
)
T
(
U
Σ
V
T
)
=
V
Σ
T
U
T
U
Σ
V
T
=
V
(
Σ
T
Σ
)
V
T
,
X^TX = (U\Sigma V^T)^T(U \Sigma V^T) = V \Sigma^T U^T U \Sigma V^T = V (\Sigma^T \Sigma) V^T\,,
XTX=(UΣVT)T(UΣVT)=VΣTUTUΣVT=V(ΣTΣ)VT,
这意味着
X
T
X
X^T X
XTX和
Σ
T
Σ
\Sigma^T \Sigma
ΣTΣ是相似的。
相似矩阵具有相同的特征值,因此协方差矩阵
S
=
1
n
−
1
X
T
X
S = \frac{1}{n-1} X^TX
S=n−11XTX的特征值
λ
i
\lambda_i
λi与矩阵
X
X
X的奇异值
σ
i
\sigma_i
σi有关, 通过
σ
i
2
=
(
n
−
1
)
λ
i
,
(3)
\sigma_i^2 = (n-1) \lambda_i\,, \tag{3}
σi2=(n−1)λi,(3)
i
∈
{
1
,
…
,
r
}
i \in \{1, \ldots, r\}
i∈{1,…,r},
r
=
rank
(
A
)
r = \text{rank}(A)
r=rank(A).
注: Σ \Sigma Σ是对角矩阵。 X X X是半正定,对称矩阵。对称矩阵的相应奇异值等于相应特征值的绝对值。
再注: λ i \lambda_{i} λi 是协方差矩阵 S S S 的特征值, σ i \sigma_i σi 是 数据矩阵 X X X的奇异值,它们不是针对同一对象的。
为了充分联系SVD和PCA,我们也必须描述主成分和奇异向量之间的对应关系。
根据式(2),可以先取右奇异向量,再得到左奇异向量。式(2)的等号右边理解为左边的值。
对于右奇异向量,取
V
^
T
=
(
v
1
T
⋮
v
r
T
)
(4)
\widehat V^T = \left( \begin{array}{ccccc} && v_1^T && \\ \hline && \vdots && \\ \hline && v_r^T && \\ \end{array} \right) \tag{4}
V
T=⎝⎜⎛v1T⋮vrT⎠⎟⎞(4)
其中
v
i
v_i
vi是
X
X
X的主成分。
对于我们取的左奇异向量,在式(2)等号两边同时除以
σ
i
\sigma_i
σi,又根据式(3)可得
u
i
=
1
(
n
−
1
)
λ
i
X
v
i
.
(5)
u_i = \frac{1}{\sqrt{(n-1)\lambda_i}} Xv_i\,\tag{5}.
ui=(n−1)λi1Xvi.(5)
在证明这些选择是正确的之前,我们先来验证一下它们至少在直觉上是有意义的。
从图2中可以看出,右奇异向量 { v i ∣ \{v_i\big| {vi∣∣ , i ∈ { 1 , … , r } } i \in \{1, \ldots, r\}\} i∈{1,…,r}}是一个张成(span)数据集行空间的 d d d维向量的标准正交集合。
我们还看到 X X X的列空间是由左奇异向量 u i u_i ui张成的。
数据矩阵的列空间是数据集不同维度的汇总,因此我们选择 u i u_i ui作为 X X X在第 i i i个主成分方向上的(缩放)投影是有意义的。
列空间: 因为 X X X的秩为 r r r ,所以前 r r r 个左奇异向量 { u 1 , u 2 , . . . , u r } \{ u_{1},u_{2},...,u_{r}\} {u1,u2,...,ur} ( U U U的列向量),为 A A A的列空间提供一组标准正交基。
行空间: 类似地,所以前 r r r 个右奇异向量 { v 1 , v 2 , . . . , v r } \{ v_{1},v_{2},...,v_{r}\} {v1,v2,...,vr} ( V V V的列向量),为 A A A的行空间提供一组标准正交基。
零空间: 剩下的右奇异向量 { v r + 1 , v r + 2 , . . . , v d } \{ v_{r+1},v_{r+2},...,v_{d}\} {vr+1,vr+2,...,vd} ( V V V的剩下的列向量),为A的零空间提供了一组标准正交基。
上面的证明见Statistical Modeling and Analysis of Neural Data (NEU 560)
这些观察结果令人鼓舞,但并不精确,所以让我们实际证明我们的***选择***在代数上是正确的。
结果需要一个引理。
引理: 设
A
=
U
Σ
V
T
A = U \Sigma V^T
A=UΣVT是实矩阵
A
A
A的奇异值分解。则,
A
=
∑
i
=
1
r
σ
i
u
i
v
i
T
.
(6)
A = \sum_{i=1}^r \sigma_i u_i v_i^T\,\tag{6}.
A=i=1∑rσiuiviT.(6)
注:这里求和的上界是
r
=
r
a
n
k
(
A
)
r = rank(A)
r=rank(A)。引理可在附录A的参考文献中找到。但实际上根据附录B的定理,联系A的奇异值分解展开矩阵乘法即可立即得到。
让我们把这个引理应用到
X
X
X上。 我们得到
第一个等号由式(6)得到,第二个等号由式子(4),(5)得到
第四个等号由 I = V T V = ∑ i = 1 r v i v i T I = V^T V = \sum_{i =1}^r v_i v_i^T I=VTV=∑i=1rviviT 得到。
我们由此建立了SVD和PCA之间的联系,关键在于式(4),(5)
便利
让我们探讨一下这种对应关系的一些结果。
根据
U
U
U 的定义,我们已经知道它将数据投影并稍微缩放到主成分上。
然而,将这个结果推导出为能够写出
X
=
U
Σ
V
T
X = U \Sigma V^T
X=UΣVT 的一般结果更令人满意,所以让我们注意这一点。
将
X
X
X的SVD乘以
V
V
V我们得到
X
V
=
U
Σ
V
T
V
=
U
Σ
.
XV = U\Sigma V^T V = U\Sigma\,.
XV=UΣVTV=UΣ.
从等号左边我们可以看到这个矩阵的第
i
i
i 列是数据集在第
i
i
i个主成分上的投影
z
i
=
X
v
i
=
(
(
x
1
−
μ
)
T
v
i
,
…
,
(
x
n
−
μ
)
T
v
i
)
T
z_i = Xv_i = ((x_1 - \mu)^T v_i, \ldots, (x_n - \mu)^T v_i)^T
zi=Xvi=((x1−μ)Tvi,…,(xn−μ)Tvi)T
从等号右边我们看到这对应于
z
i
=
u
i
σ
i
z_i = u_i \sigma_i
zi=uiσi,这是我们试图恢复的。
我们可以通过考虑 U U U的提取另一个有用的部分。
回想一下,每个奇异值对应于椭圆的一条半轴的长度。椭圆描述 X X X的列空间。
通过除以奇异值(并乘以
n
−
1
\sqrt{n-1}
n−1),我们得到了一个转换后的数据集,它在某种意义上是球形的:
Y
=
n
−
1
U
Σ
−
1
.
Y = \sqrt{n-1}\, U\Sigma^{-1}\,.
Y=n−1UΣ−1.
最后,让我们讨论一下使用SVD的数值优势。
在计算机上实际计算PCA的基本方法是直接执行 X T X X^TX XTX的特征值分解。
结果表明,这样做会引入一些潜在的严重数值问题,而SVD可以避免这些问题。
问题在于,在计算机上实数以有限精度表示。
由于每个数字都存储在有限的内存中,因此连续可表示的数字之间必然存在间隙。
例如,对于双精度浮点数,实数与其最接近的浮点近似值之间的相对误差约为
ε
≈
1
0
−
16
\varepsilon \approx 10^{-16}
ε≈10−16。
考虑到这种限制的算法称为向后稳定算法。
基本思想是,这样的算法为输入值生成正确的输出,该输入值在您实际询问的值的
ε
\varepsilon
ε 内。
如果
σ
~
i
\tilde \sigma_i
σ~i 是计算
X
X
X 奇异值的后向稳定算法的输出,而
σ
i
\sigma_i
σi 是真正的奇异值,则可以证明
∣
σ
~
i
−
σ
i
∣
=
O
(
ε
∥
X
∥
)
,
| \tilde \sigma_i - \sigma_i | = O(\varepsilon \| X \|)\,,
∣σ~i−σi∣=O(ε∥X∥),
∥
X
∥
\| X \|
∥X∥ 是
X
X
X 大小的合理度量。
另一方面,计算
X
T
X
X^TX
XTX 的特征值
l
i
l_i
li 的后向稳定算法可以证明满足
∣
l
~
i
−
l
i
∣
=
O
(
ε
∥
X
T
X
∥
)
=
O
(
ε
∥
X
∥
2
)
,
| \tilde l_i - l_i | = O(\varepsilon \| X^TX \|) = O(\varepsilon \| X \|^2)\,,
∣l~i−li∣=O(ε∥XTX∥)=O(ε∥X∥2),
当以
X
X
X 的奇异值给出时,它变成
∣
σ
~
i
−
σ
i
∣
=
O
(
ε
∥
X
∥
2
σ
i
)
.
| \tilde \sigma_i - \sigma_i | = O(\varepsilon \frac{\| X \|^2}{\sigma_i})\,.
∣σ~i−σi∣=O(εσi∥X∥2).
这里的最终结果是,如果您对相对较小的奇异值感兴趣,例如
σ
i
≪
∥
X
∥
\sigma_i \ll \| X \|
σi≪∥X∥,直接使用
X
X
X 会比使用
X
T
X
X^TX
XTX 产生更准确的结果。
幸运的是,SVD 可以让我们做到这一点。
附录
附录A
定理:设A 为n 阶实对称矩阵,则存在一个正交矩阵
P
=
(
p
1
,
p
2
,
…
,
p
n
)
\ P = (p_{1},p_{2},\dots , p_{n})
P=(p1,p2,…,pn)使得
A
=
P
Λ
P
T
(1)
A =P\Lambda P^{T} \tag{1}
A=PΛPT(1)
其中
Λ
\Lambda
Λ 为对角元素是
A
A
A 的特征值
λ
1
,
λ
2
,
…
λ
n
\lambda_{1},\lambda_{2},\dots \lambda_{n}
λ1,λ2,…λn所构成的对角阵;
p
1
,
p
2
,
…
p
n
p_{1},p_{2},\dots p_{n}
p1,p2,…pn为特征值
λ
1
,
λ
2
,
…
λ
n
\lambda_{1},\lambda_{2},\dots \lambda_{n}
λ1,λ2,…λn 对应的单位特征向量。式(1)还可以写成如下的形式:
A
=
P
Λ
P
T
=
λ
1
p
1
p
1
T
+
λ
1
p
2
p
2
T
+
⋯
+
λ
1
p
n
p
n
T
=
∑
i
=
1
d
λ
i
p
i
p
i
T
.
A =P\Lambda P^{T}= \lambda_{1}p_{1}p_{1}^T+ \lambda_{1}p_{2}p_{2}^T+\dots+\lambda_{1}p_{n}p_{n}^T=\sum_{i = 1}^d \lambda_i p_i p_i^T.
A=PΛPT=λ1p1p1T+λ1p2p2T+⋯+λ1pnpnT=i=1∑dλipipiT.
[1]张丽静,刘白羽,申亚男.实对称矩阵对角化教学的应用案例[J].大学数学,2019,35(02):116-121.
附录B
n
n
n阶矩阵一定有
n
n
n个特征值(特征值可相同)
矩阵
A
A
A 为实对称矩阵
⇒
\Rightarrow
⇒
A
A
A可相似对角化
⇔
\Leftrightarrow
⇔
A
A
A有
n
n
n个线性无关的特征向量
矩阵
A
A
A 可相似对角化,
λ
\lambda
λ 为
A
A
A的
k
k
k重特征值
⇔
\Leftrightarrow
⇔
λ
\lambda
λ 对应有
k
k
k个线性无关的特征向量
若矩阵
A
A
A 为
n
n
n阶实对称矩阵,
r
=
rank
(
A
)
r = \text{rank}(A)
r=rank(A), 则
λ
=
0
\lambda= 0
λ=0为
A
A
A的
n
−
r
n- r
n−r重特征值
若矩阵
A
A
A 能相似对角化,
r
=
rank
(
A
)
r = \text{rank}(A)
r=rank(A) ,则
λ
=
0
\lambda= 0
λ=0为
A
A
A 的
n
−
r
n-r
n−r 重特征值
若矩阵
A
A
A 为
n
n
n阶方阵,
r
=
rank
(
A
)
r = \text{rank}(A)
r=rank(A),则
λ
=
0
\lambda = 0
λ=0 至少为
A
A
A 的
n
−
r
n- r
n−r 重特征值.
[2]秦川,李小飞.方阵的秩与特征值的关系[J].课程教育研究:学法教法研究,2015(27):120-120.
全文翻译自
HOW ARE PRINCIPAL COMPONENT ANALYSIS AND SINGULAR VALUE DECOMPOSITION RELATED?