From ad6f484e05ed59bae22005b0912e8ad40e8db6a4 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sat, 18 Jul 2026 18:54:43 +1000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=94=84=20resync=20svd=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .translate/state/svd_intro.md.yml | 6 ++ lectures/svd_intro.md | 113 +++++++++++++++++------------- 2 files changed, 70 insertions(+), 49 deletions(-) create mode 100644 .translate/state/svd_intro.md.yml diff --git a/.translate/state/svd_intro.md.yml b/.translate/state/svd_intro.md.yml new file mode 100644 index 00000000..f593873d --- /dev/null +++ b/.translate/state/svd_intro.md.yml @@ -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 diff --git a/lectures/svd_intro.md b/lectures/svd_intro.md index 99abfe59..606f71bd 100644 --- a/lectures/svd_intro.md +++ b/lectures/svd_intro.md @@ -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: 练习 --- # 奇异值分解 @@ -23,6 +38,7 @@ kernelspec: * **最小二乘回归**(包括欠定和超定情况) * **主成分分析**(PCA) +与主成分分析(PCA)类似,动态模态分解(DMD)也可以被看作是一种数据降维方法,它通过将数据投影到一组有限的因子上来表示数据中的显著模式。 在后续的{doc}`动态模式分解`讲座中,我们会看到如何利用SVD来高效地计算向量自回归(VAR)模型的简化形式。 @@ -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$。 @@ -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)时,我们将会用到这个定理。 @@ -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} @@ -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$ @@ -527,13 +538,13 @@ $$ 在**横截面**分析中,列索引 $j$ 代表不同的个体,而行索引代表它们的不同属性。 -SVD 是一种将矩阵分解为有用组件的方法,类似于极分解、特征分解等。而 PCA 则是一种基于 SVD 的数据分析方法,它通过一系列统计步骤来捕捉数据中最重要的模式,帮助我们更好地理解和可视化数据。 +正如我们之前所见,SVD是一种将矩阵分解为有用组件的方法,就像极分解、特征分解等其他方法一样。 -让我们来看看 PCA 的具体步骤: +而PCA则是一种基于SVD进行数据分析的方法。其目标是应用一定的步骤,借助统计工具来捕捉数据中最重要的模式,从而更好地可视化数据中的规律。 **第1步:数据标准化** -由于数据可能包含不同单位和尺度的变量,我们首先需要标准化数据: +由于数据矩阵可能包含不同单位和尺度的变量,我们首先需要对数据进行标准化。 首先计算 $X$ 的每一行的平均值。 @@ -547,7 +558,7 @@ $$ \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} @@ -555,17 +566,17 @@ $$ **第2步:计算协方差矩阵** -为了研究变量之间的关系,我们计算中心化数据的协方差矩阵: +由于我们希望提取变量之间的关系,而不仅仅是它们的大小——换句话说,我们想知道它们能在多大程度上相互解释——因此我们计算$B$的协方差矩阵。 $$ C = \frac{1}{n} BB^{\top} $$ -**第3步:分解协方差矩阵** +**第3步:分解协方差矩阵并排列奇异值:** -由于矩阵$C$是正定的,我们可以对其进行特征值分解,找出其特征值,并按降序重新排列特征值和特征向量矩阵。 +由于矩阵$C$是正定的,我们可以对其进行特征分解,找出其特征值,并将特征值和特征向量矩阵按降序重新排列。 -$C$的特征值分解可以通过分解$B$来得到。由于$B$不是方阵,我们对$B$进行SVD分解: +$C$的特征分解可以通过分解$B$来求得。由于$B$不是方阵,我们对$B$进行SVD分解: $$ \begin{aligned} @@ -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} @@ -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} @@ -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$个**主成分**的时间序列 @@ -640,7 +649,7 @@ $$ (eq:PCA2) * 对于每个$k=1, \ldots, p$,$\sigma_k$是第$k$个**主成分**的强度,这里的强度指的是对$X$的整体协方差的贡献。 -## 基于特征值分解的PCA +## 基于特征值和特征向量的PCA 现在我们使用样本协方差矩阵的特征分解来进行PCA。 @@ -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$表示为: @@ -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} @@ -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} @@ -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分析。 @@ -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} $。 @@ -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 \\ @@ -995,5 +1011,4 @@ $$ 查看该讲座中描述和说明经典因子分析模型的部分。 -如前所述,在后续关于 {doc}`动态模态分解 ` 的讲座中,我们将描述SVD如何提供快速计算一阶向量自回归(VARs)的降阶近似的方法。 - +如前所述,在后续关于 {doc}`动态模态分解 ` 的讲座中,我们将描述SVD如何提供快速计算一阶向量自回归(VARs)的降阶近似的方法。 \ No newline at end of file From daeaab38f0aca53d4db13cae35a612dc23968f41 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 19 Jul 2026 14:04:46 +1000 Subject: [PATCH 2/2] Restore trailing newline (engine issue tracked in QuantEcon/action-translation#116) Co-Authored-By: Claude Fable 5 --- lectures/svd_intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lectures/svd_intro.md b/lectures/svd_intro.md index 606f71bd..00000b7f 100644 --- a/lectures/svd_intro.md +++ b/lectures/svd_intro.md @@ -1011,4 +1011,4 @@ $$ 查看该讲座中描述和说明经典因子分析模型的部分。 -如前所述,在后续关于 {doc}`动态模态分解 ` 的讲座中,我们将描述SVD如何提供快速计算一阶向量自回归(VARs)的降阶近似的方法。 \ No newline at end of file +如前所述,在后续关于 {doc}`动态模态分解 ` 的讲座中,我们将描述SVD如何提供快速计算一阶向量自回归(VARs)的降阶近似的方法。