Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .translate/state/svd_intro.md.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
source-sha: 388b2735bfd3c7757d4ef6a0ecb97183210090d2
synced-at: "2026-07-18"
model: claude-sonnet-5
mode: RESYNC
section-count: 12
tool-version: 0.17.0
111 changes: 63 additions & 48 deletions lectures/svd_intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,21 @@ kernelspec:
display_name: Python 3
language: python
name: python3
translation:
title: 奇异值分解
headings:
Overview: 概述
The Setting: 基本设定
Singular Value Decomposition: 奇异值分解
Four Fundamental Subspaces: 四个基本子空间
Eckart-Young Theorem: Eckart-Young定理
Full and Reduced SVD's: 完全SVD和简化SVD
Polar Decomposition: 极分解
'Application: Principal Components Analysis (PCA)': 应用:主成分分析(PCA)
Relationship of PCA to SVD: PCA与SVD的关系
PCA with Eigenvalues and Eigenvectors: 基于特征值和特征向量的PCA
Connections: 联系
Exercises: 练习
---

# 奇异值分解
Expand All @@ -23,6 +38,7 @@ kernelspec:
* **最小二乘回归**(包括欠定和超定情况)
* **主成分分析**(PCA)

与主成分分析(PCA)类似,动态模态分解(DMD)也可以被看作是一种数据降维方法,它通过将数据投影到一组有限的因子上来表示数据中的显著模式。

在后续的{doc}`动态模式分解<var_dmd>`讲座中,我们会看到如何利用SVD来高效地计算向量自回归(VAR)模型的简化形式。

Expand Down Expand Up @@ -210,7 +226,6 @@ $$
X^\top u_i & = \sigma_i v_i, \quad i=1, \ldots, p \cr
X^\top u_i & = 0 \quad i= p+1, \ldots, m
\end{aligned}

$$ (eq:orthoortho2)

注意方程 {eq}`eq:orthoortho2` 表明变换 $X^\top$ 将一对不同的正交单位向量 $u_i, u_j$(其中 $i$ 和 $j$ 都小于或等于 $X$ 的秩 $p$)映射到一对不同的正交单位向量 $v_i, v_j$。
Expand Down Expand Up @@ -334,7 +349,7 @@ $$ (eq:Ekart)

在介绍主成分分析时,我们会对此进行更详细的讨论。

你可以在[这里](https://zhuanlan.zhihu.com/p/606447321)阅读关于Eckart-Young定理及其应用的内容。
你可以在[这里](https://en.wikipedia.org/wiki/Low-rank_approximation)阅读关于Eckart-Young定理及其应用的内容。

在讨论主成分分析(PCA)和动态模态分解(DMD)时,我们将会用到这个定理。

Expand Down Expand Up @@ -368,13 +383,12 @@ $$

$$
\begin{aligned}

UU^\top & \neq I & \quad U^\top U = I \cr
VV^\top & = I & \quad V^\top V = I
\end{aligned}
$$

* 在**短胖**情况下(即 $m < < n$),对于**简化**SVD
* 在**矮胖**情况下(即 $m < < n$),对于**简化**SVD

$$
\begin{aligned}
Expand Down Expand Up @@ -447,10 +461,7 @@ UhatUhatT, UhatTUhat

**注释:**

上述代码展示了两种不同的SVD计算方式:

- `full_matrices=True` 计算完整的SVD分解
- `full_matrices=False` 计算简化的SVD分解,只保留非零奇异值对应的部分
上述代码展示了 `full_matrices=True` 和 `full_matrices=False` 选项的应用。使用 `full_matrices=False` 会返回简化的奇异值分解。

**完整**和**简化**的奇异值分解都能准确地分解一个 $m \times n$ 矩阵 $X$

Expand Down Expand Up @@ -527,13 +538,13 @@ $$

在**横截面**分析中,列索引 $j$ 代表不同的个体,而行索引代表它们的不同属性。

SVD 是一种将矩阵分解为有用组件的方法,类似于极分解、特征分解等。而 PCA 则是一种基于 SVD 的数据分析方法,它通过一系列统计步骤来捕捉数据中最重要的模式,帮助我们更好地理解和可视化数据
正如我们之前所见,SVD是一种将矩阵分解为有用组件的方法,就像极分解、特征分解等其他方法一样

让我们来看看 PCA 的具体步骤:
而PCA则是一种基于SVD进行数据分析的方法。其目标是应用一定的步骤,借助统计工具来捕捉数据中最重要的模式,从而更好地可视化数据中的规律。

**第1步:数据标准化**

由于数据可能包含不同单位和尺度的变量,我们首先需要标准化数据:
由于数据矩阵可能包含不同单位和尺度的变量,我们首先需要对数据进行标准化。

首先计算 $X$ 的每一行的平均值。

Expand All @@ -547,25 +558,25 @@ $$
\bar{X} = \begin{bmatrix} \bar{X_1} \\ \bar{X_2} \\ \ldots \\ \bar{X_m}\end{bmatrix}\begin{bmatrix}1 \mid 1 \mid \cdots \mid 1 \end{bmatrix}
$$

从原始矩阵中减去平均值矩阵以创建一个均值中心化矩阵
从原始矩阵中减去平均值矩阵,得到一个均值中心化矩阵

$$
B = X - \bar{X}
$$

**第2步:计算协方差矩阵**

为了研究变量之间的关系,我们计算中心化数据的协方差矩阵:
由于我们希望提取变量之间的关系,而不仅仅是它们的大小——换句话说,我们想知道它们能在多大程度上相互解释——因此我们计算$B$的协方差矩阵。

$$
C = \frac{1}{n} BB^{\top}
$$

**第3步:分解协方差矩阵**
**第3步:分解协方差矩阵并排列奇异值:**

由于矩阵$C$是正定的,我们可以对其进行特征值分解,找出其特征值,并按降序重新排列特征值和特征向量矩阵
由于矩阵$C$是正定的,我们可以对其进行特征分解,找出其特征值,并将特征值和特征向量矩阵按降序重新排列

$C$的特征值分解可以通过分解$B$来得到。由于$B$不是方阵,我们对$B$进行SVD分解:
$C$的特征分解可以通过分解$B$来求得。由于$B$不是方阵,我们对$B$进行SVD分解:

$$
\begin{aligned}
Expand All @@ -581,17 +592,17 @@ $$

然后我们可以重新排列矩阵$U$和$\Sigma$中的列,使奇异值按降序排列。

**第4步:选择主成分**
**第4步:选择奇异值,(可选)截断其余部分:**

我们现在可以根据想要保留的方差量来决定选择多少个奇异值(例如,保留95%的总方差)。

我们可以通过计算前$r$个因子包含的方差除以总方差来获得百分比
我们可以通过计算前$r$个主要因子所包含的方差除以总方差来获得这个百分比

$$
\frac{\sum_{i = 1}^{r} \sigma^2_{i}}{\sum_{i = 1}^{p} \sigma^2_{i}}
$$

**第5步:创建主成分得分矩阵:**
**第5步:创建得分矩阵:**

$$
\begin{aligned}
Expand All @@ -601,19 +612,17 @@ T&= BV \cr
\end{aligned}
$$

这个矩阵的每一列代表一个主成分,其中包含了原始数据在新坐标系下的投影。

## PCA与SVD的关系

让我们来探讨SVD与PCA之间的关系。假设我们有一个数据矩阵$X$,其中所有变量的样本均值都为零。
为了将SVD与数据集$X$的PCA联系起来,首先构造数据矩阵$X$的SVD:

$X$的SVD分解可以写成:
让我们假设所有变量的样本均值都为零,这样我们就不需要对矩阵进行标准化了。

$$
X = U \Sigma V^\top = \sigma_1 U_1 V_1^\top + \sigma_2 U_2 V_2^\top + \cdots + \sigma_p U_p V_p^\top
$$ (eq:PCA1)

其中矩阵$U$和$V$分别由列向量组成:
其中

$$
U=\begin{bmatrix}U_1|U_2|\ldots|U_m\end{bmatrix}
Expand All @@ -628,10 +637,10 @@ $$
因此,我们有

$$
X = \sigma_1 \begin{pmatrix}U_{11}V_{1}^\top \\U_{21}V_{1}^\top \\\cdots\\U_{m1}V_{1}^\top \\\end{pmatrix} + \sigma_2\begin{pmatrix}U_{12}V_{2}^\top \\U_{22}V_{2}^\top \\\cdots\\U_{m2}V_{2}^\top \\\end{pmatrix}+\ldots + \sigma_p\begin{pmatrix}U_{1p}V_{p}^\top \\U_{2p}V_{p}^\top \\\cdots\\U_{mp}V_{p}^\top \\\end{pmatrix}
X = \sigma_1 \begin{bmatrix}U_{11}V_{1}^\top \\U_{21}V_{1}^\top \\\cdots\\U_{m1}V_{1}^\top \\\end{bmatrix} + \sigma_2\begin{bmatrix}U_{12}V_{2}^\top \\U_{22}V_{2}^\top \\\cdots\\U_{m2}V_{2}^\top \\\end{bmatrix}+\ldots + \sigma_p\begin{bmatrix}U_{1p}V_{p}^\top \\U_{2p}V_{p}^\top \\\cdots\\U_{mp}V_{p}^\top \\\end{bmatrix}
$$ (eq:PCA2)

在时间序列分析的背景下,这个分解有着重要的含义:
在时间序列分析的背景下,我们可以这样解释方程{eq}`eq:PCA2`中的对象:

* $ \textrm{对于每个} \ k=1, \ldots, n $,对象 $\lbrace V_{kj} \rbrace_{j=1}^n$ 是第$k$个**主成分**的时间序列

Expand All @@ -640,7 +649,7 @@ $$ (eq:PCA2)

* 对于每个$k=1, \ldots, p$,$\sigma_k$是第$k$个**主成分**的强度,这里的强度指的是对$X$的整体协方差的贡献。

## 基于特征值分解的PCA
## 基于特征值和特征向量的PCA

现在我们使用样本协方差矩阵的特征分解来进行PCA。

Expand All @@ -656,13 +665,17 @@ $$
\Omega = XX^\top
$$

其特征值分解为:
然后使用特征分解将$\Omega$表示为:

$$
\Omega =P\Lambda P^\top
$$

这里$P$是$m \times m$特征向量矩阵,而$\Lambda$是特征值对角矩阵。
这里

* $P$是$\Omega$的$m×m$特征向量矩阵

* $\Lambda$是$\Omega$的特征值对角矩阵

我们可以将$X$表示为:

Expand Down Expand Up @@ -729,17 +742,17 @@ $$
1. 将特征值和奇异值按降序排列
2. 在$P$和$U$中强制使对角线为正,并相应地调整$V^\top$中的符号

## 联系与总结
## 联系

为了更好地理解前面的内容,让我们把这些公式联系起来,看看它们之间的关系
为了把这些内容整合起来,有必要把上面给出的一些公式汇总并加以比较

首先,对于一个$m \times n$矩阵的奇异值分解(SVD)
首先,考虑一个$m \times n$矩阵的SVD

$$
X = U\Sigma V^\top
$$

我们可以计算
计算

$$
\begin{aligned}
Expand All @@ -749,9 +762,11 @@ XX^\top &=U\Sigma V^\top V\Sigma^\top U^\top \cr
\end{aligned}
$$ (eq:XXcompare)

将这个表达式{eq}`eq:XXcompare`与前面的方程{eq}`eq:XXo`对比,我们可以发现SVD分解中的$U$矩阵实际上就是$XX^\top$的特征向量矩阵$P$,而$\Sigma \Sigma^\top$就对应着特征值矩阵$\Lambda$。
将表示式{eq}`eq:XXcompare`与上面的方程{eq}`eq:XXo`进行比较。

显然,SVD中的$U$就是$XX^\top$的特征向量矩阵$P$,而$\Sigma \Sigma^\top$就是特征值矩阵$\Lambda$。

类似地,我们再来看:
其次,让我们计算

$$
\begin{aligned}
Expand All @@ -760,41 +775,43 @@ X^\top X &=V\Sigma^\top U^\top U\Sigma V^\top \\
\end{aligned}
$$

这个结果告诉我们,SVD中的$V$矩阵其实就是$X^\top X$的特征向量矩阵
因此,SVD中的矩阵$V$$X^\top X$的特征向量矩阵

把这些发现整理一下,我们可以得到样本协方差矩阵的特征分解:
总结并整合这些内容,我们得到样本协方差矩阵的特征分解

$$
X X^\top = P \Lambda P^\top
$$

这里的$P$是一个正交矩阵。而从$X$的SVD分解,我们也知道:
其中$P$是一个正交矩阵。

此外,从$X$的SVD分解中,我们知道

$$
X X^\top = U \Sigma \Sigma^\top U^\top
$$

其中$U$同样是一个正交矩阵
其中$U$是一个正交矩阵

这两个表达式告诉我们$P = U$,因此$X$可以表示为:
因此,$P = U$,我们得到$X$的表示

$$
X = P \epsilon = U \Sigma V^\top
$$

进一步推导可得:
由此可得

$$
U^\top X = \Sigma V^\top = \epsilon
$$

注意上述推导意味着
注意,上述结果意味着

$$
\epsilon \epsilon^\top = \Sigma V^\top V \Sigma^\top = \Sigma \Sigma^\top = \Lambda
\epsilon \epsilon^\top = \Sigma V^\top V \Sigma^\top = \Sigma \Sigma^\top = \Lambda ,
$$

这样所有部分都完美契合
因此所有内容都能够互相吻合

下面我们定义一个`DecomAnalysis`类,用于对给定的数据矩阵`X`进行PCA和SVD分析。

Expand Down Expand Up @@ -943,11 +960,11 @@ def compare_pca_svd(da):
```{exercise}
:label: svd_ex1

在普通最小二乘法(OLS)中,我们学会计算 $ \hat{\beta} = (X^\top X)^{-1} X^\top y $,但在某些情况下,比如当我们遇到共线性或欠定系统时:即**短而宽**的矩阵
在普通最小二乘法(OLS)中,我们学会计算 $ \hat{\beta} = (X^\top X)^{-1} X^\top y $,但在某些情况下,比如当我们遇到共线性或欠定系统时:即**矮胖**矩阵

在这些情况下,$ (X^\top X) $矩阵不可逆(其行列式为零)或病态(其行列式非常接近零)。

我们可以改用所谓的[伪逆](https://baike.baidu.com/item/%E4%BC%AA%E9%80%86%E7%9F%A9%E9%98%B5/7397859),即创建一个满秩的逆矩阵近似,以此来计算 $ \hat{\beta} $。
我们可以改用所谓的[伪逆](https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse),即创建一个满秩的逆矩阵近似,以此来计算 $ \hat{\beta} $。

根据Eckart-Young定理,构建伪逆矩阵 $ X^{+} $ 并用它来计算 $ \hat{\beta} $。

Expand All @@ -973,7 +990,6 @@ $$

$$
\Sigma^{+} = \begin{bmatrix}

\frac{1}{\sigma_1} & 0 & \cdots & 0 & 0 \\
0 & \frac{1}{\sigma_2} & \cdots & 0 & 0 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
Expand All @@ -996,4 +1012,3 @@ $$
查看该讲座中描述和说明经典因子分析模型的部分。

如前所述,在后续关于 {doc}`动态模态分解 <var_dmd>` 的讲座中,我们将描述SVD如何提供快速计算一阶向量自回归(VARs)的降阶近似的方法。

Loading