第 02b 章 正规矩阵、谱定理与奇异值分解
对应原书:Horn & Johnson《Matrix Analysis》第 2 版,第 2 章的 2.5–2.7 节(书 p.131–162,PDF p.151–182)。本章接第 02a 章(Schur 三角化)。
这是整册书里对量化最重要的一章。协方差矩阵、相关矩阵都是实对称矩阵,谱定理保证它们能用一组正交的"特征组合"完全对角化,这是 PCA、统计因子模型、风险分解、特征值裁剪去噪的数学基础。奇异值分解(SVD) 则对任意长方矩阵(比如 \(T\times N\) 的收益矩阵)都成立,它同时给出 PCA、最优低秩近似、伪逆和条件数。本章先讲正规矩阵与谱定理,再讲 SVD 及其四大应用,最后介绍 CS 分解与子空间夹角——后者正是衡量"两个时期的风险因子是否漂移"的工具。
学习目标
读完本章,你应当能够:
- 陈述并证明正规矩阵的谱定理(正规 ⇔ 可酉对角化 ⇔ 有标准正交特征基),理解实对称、实斜对称、实正交矩阵的实正交标准形。
- 陈述并理解奇异值分解 \(A=V\Sigma W^*\) 的存在性与唯一性程度(Autonne 定理),能解释为什么 PCA 载荷在相邻窗口间会"翻号"和"旋转"。
- 用 SVD 推导四个核心应用:PCA、Eckart–Young 最优低秩近似、Moore–Penrose 伪逆与最小范数最小二乘、条件数 \(\kappa=\sigma_1/\sigma_n\)(含 \(\kappa(X^TX)=\kappa(X)^2\))。
- 理解岭回归和截断 SVD 是对奇异值的"滤波",并能用特征值裁剪稳定最小方差组合。
- 理解 CS 分解与子空间主角,会用 SVD 计算两组因子载荷之间的主角,并用正交 Procrustes 对齐不同窗口的 PCA。
读前导读
这一章在解决什么问题
这一章回答两个问题。第一,哪些矩阵能在"不变形"的坐标系里被完全对角化? 答案是正规矩阵,其中最重要的是实对称矩阵,也就是协方差矩阵。结论(谱定理)是:任何协方差矩阵都能写成 \(\Sigma=Q\Lambda Q^T\),\(Q\) 的列是两两正交的"特征组合",\(\Lambda\) 对角线上是这些组合的方差。用 CFA 的语言说:任何一组相关的资产,都可以重新打包成同样数量的互不相关的组合,总风险恰好是这些组合风险之和。这就是 PCA 的数学保证。
第二,长方形矩阵怎么办? 收益数据是 \(T\) 天 × \(N\) 只股票的长方矩阵,谈不上特征值。奇异值分解(SVD)说任何矩阵都能写成"正交矩阵 × 非负对角阵 × 正交矩阵"。对收益矩阵做 SVD,右边给出主成分载荷,中间给出主成分波动,左边给出主成分的时间序列,一次全部算出,而且不必先算协方差矩阵。
SVD 还直接给出四个量化中天天用的工具:PCA;"用 \(k\) 个因子最好能拟合到什么程度"(Eckart–Young);共线回归的伪逆解;衡量"矩阵有多接近不可逆"的条件数。最后一节的主角(principal angles)用来度量两个时期的因子空间差了多少。
需要先想起来的数学
1. 正交矩阵与 \(Q^TQ=I\)。 见第 02a 章。正交矩阵的列是一组互相垂直的单位向量,\(Q^{-1}=Q^T\)。复数版叫酉矩阵,\(U^*U=I\)。
2. 特征值与对角化。 见第 01 章。\(A=S\Lambda S^{-1}\) 时 \(S\) 的列是特征向量。本章的新意在于 \(S\) 可以取成正交矩阵,于是 \(S^{-1}=S^T\),不用求逆。见 第 00 册第 06 章 线性代数速成。
3. 二次型与组合方差。 \(w^T\Sigma w=\sum_{i,j}w_iw_j\sigma_{ij}\) 就是组合方差;对任意 \(w\) 都 \(\ge0\) 的对称矩阵叫半正定,都 \(>0\)(\(w\ne0\))叫正定。协方差矩阵一定半正定,因为方差不会是负数。例:\(\Sigma=\begin{bmatrix}2&1\\1&2\end{bmatrix}\),\(w=[1,-1]^T\) 时 \(w^T\Sigma w=2-1-1+2=2>0\)。
4. 向量与矩阵的范数。 \(\|x\|_2=\sqrt{\sum x_i^2}\);矩阵的 2-范数 \(\|A\|_2\) 是"\(A\) 能把单位向量拉到多长"(\(\max_{\|x\|=1}\|Ax\|_2\)),Frobenius 范数 \(\|A\|_F\) 是全部元素平方和开根号。例:\(\operatorname{diag}(3,1)\) 的 2-范数是 3,Frobenius 范数是 \(\sqrt{10}\)。见 第 00 册第 05 章 多元微积分与优化。
5. 记号提醒。 本章 SVD 写作 \(A=V\Sigma W^*\),这里的 \(\Sigma\) 是奇异值对角阵,不是协方差矩阵;讨论协方差时上下文会说明。\(\ker A\) 即零空间(\(Ax=0\) 的全部解),\(\operatorname{range}A\) 即列空间。\(\oplus\) 是分块对角拼接。\(\kappa\) 是条件数。见 第 00 册第 08 章 读懂数学证明与符号。
怎么读这一章
核心必读:2.8.1(正规的定义)、2.9.1(谱定理,尤其外积形式)、2.9.2(唯一性与 PCA 不稳定)、2.9.3–2.9.4 中关于 Hermite/实对称的结论(推论 2.5.11(a) 是协方差谱分解)、2.10.2–2.10.5(SVD 的定义、理解、性质与唯一性)、2.11 全部四个应用。
第一遍可以只看结论:2.8.2、2.9.4 的 (b)(c) 与证明、2.9.5、2.10.1 的热身结果、2.10.2 的证明(建议先看"更常见的教科书证明"那一段)、2.10.6、2.12.1–2.12.2 的 CS 分解与证明、2.12.4。2.12.3 的主角定义建议读,它比 CS 分解本身更实用。
三个量化实战分别对应 PCA/因子模型、共线回归与最小方差组合、滚动 PCA 对齐,与实际工作直接相关,建议逐行运行。
2.8 正规矩阵
2.8.1 定义与例子
定义 2.5.1 \(A\in M_n\) 称为正规(normal),若 \(AA^*=A^*A\)。
白话解释:正规就是"\(A\) 与它的共轭转置可以交换乘法顺序"。实矩阵时就是 \(AA^T=A^TA\)。对称矩阵(\(A^T=A\))显然满足,所以协方差矩阵都是正规的。 看一个不正规的例子:\(A=\begin{bmatrix}1&1\\0&1\end{bmatrix}\),\(AA^T=\begin{bmatrix}2&1\\1&1\end{bmatrix}\),\(A^TA=\begin{bmatrix}1&1\\1&2\end{bmatrix}\),两者不同。这个 \(A\) 正是第 01 章那个不能对角化的"剪切"矩阵。 本节的最终结论(谱定理)是:正规恰好等于"能用正交(酉)坐标系对角化"。所以这个看起来很技术的条件 \(AA^*=A^*A\),其实就是"特征向量能取成两两垂直"的代数判据。
正规矩阵包括了最常见的几类:酉矩阵(\(U^*U=UU^*=I\))、Hermite 矩阵(\(A^*=A\))、斜 Hermite 矩阵(\(A^*=-A\)),以及它们的实版本:实正交、实对称、实斜对称矩阵。对角阵当然正规。\(\begin{bmatrix}a&b\\-b&a\end{bmatrix}\) 正规,特征值 \(a\pm ib\)。正规类比"酉、Hermite、斜 Hermite"的并集严格更大:原书给出 \(\begin{bmatrix}1&e^{i\pi/4}\\-e^{i\pi/4}&1\end{bmatrix}\),它正规,但任何纯量倍都不属于这三类。
正规类对纯量乘法、酉相似、直和封闭;\(A\) 正规 ⇔ \(A+aI\) 正规。但和与积一般不封闭;正规且交换时 \(AB\)、\(A\pm B\) 才保证正规(2.5.P10)。一个容易踩的坑:复对称矩阵不一定正规,例如 \(\begin{bmatrix}i&i\\i&-1\end{bmatrix}\)(2.5.P23)。实对称矩阵的好性质来自"Hermite",不是来自"对称"。
2.8.2 几何解释
把 \(A\) 的列记为 \(c_i\)、行(的转置)记为 \(r_i\)。\(A^*A=AA^*\) 等价于 \(c_i^*c_j=\overline{r_i^*r_j}\) 对所有 \(i,j\) 成立。特别地 \(\|c_i\|_2=\|r_i\|_2\):每一列与对应的行一样长。实正规矩阵还满足:第 \(i,j\) 两列的夹角等于第 \(i,j\) 两行的夹角。
另一个等价刻画(2.5.P1):\(A\) 正规 ⇔ 对所有 \(x\),\(\|Ax\|_2=\|A^*x\|_2\)。由此立得 \(\ker A=\ker A^*\),以及 \(\operatorname{range}A=\operatorname{range}A^*\)(2.5.P13、P54)。
2.8.3 关键引理:三角的正规矩阵是对角阵
引理 2.5.2 \(A=\begin{bmatrix}A_{11}&A_{12}\\0&A_{22}\end{bmatrix}\)(对角块为方阵)正规 ⇔ \(A_{11},A_{22}\) 正规且 \(A_{12}=0\)。特别地,上三角矩阵正规 ⇔ 它是对角阵。
证明只需比较 \(AA^*=A^*A\) 的 \((1,1)\) 块:\(A_{11}^*A_{11}=A_{11}A_{11}^*+A_{12}A_{12}^*\),两边取迹得 \(\operatorname{tr}A_{12}A_{12}^*=0\),即 \(A_{12}\) 的元素平方和为 0。
2.9 谱定理
2.9.1 正规矩阵的谱定理
定理 2.5.3 设 \(A\in M_n\) 的特征值为 \(\lambda_1,\dots,\lambda_n\)。以下等价:
(a) \(A\) 正规; (b) \(A\) 可酉对角化:\(A=U\Lambda U^*\),\(U\) 酉,\(\Lambda=\operatorname{diag}(\lambda_1,\dots,\lambda_n)\); (c) \(\sum_{i,j}|a_{ij}|^2=\sum_i|\lambda_i|^2\); (d) \(A\) 有 \(n\) 个标准正交的特征向量。
证明 由 Schur 定理 \(A=UTU^*\)。 (a)⇒(b):\(T\) 与 \(A\) 酉相似,也正规;又是上三角,由引理 2.5.2 是对角阵。 (b)⇒(c):Frobenius 范数酉不变。 (c)⇒(d):\(\|A\|_F^2=\sum|\lambda_i|^2+\sum_{i<j}|t_{ij}|^2\),(c) 迫使严格上三角部分为零,\(T\) 对角,\(AU=UT\) 说明 \(U\) 的列就是标准正交特征向量。 (d)⇒(a):把标准正交特征向量排成 \(U\),\(A=U\Lambda U^*\),于是 \(AA^*=U|\Lambda|^2U^*=A^*A\)。∎
\(A=U\Lambda U^*\) 称为 \(A\) 的谱分解(spectral decomposition)。写成外积形式更直观:
每个 \(u_iu_i^*\) 是到特征方向的正交投影,正规矩阵就是"在 \(n\) 个互相垂直的方向上各自乘一个复数"。条件 (c) 说明 Schur 不等式的等号恰好刻画正规性,偏离正规性 \(\Delta(A)\) 就是"离可酉对角化还有多远"。
金融直觉:把外积形式用在协方差上,\(\Sigma=\sum_i\lambda_iu_iu_i^T\) 说的是:协方差矩阵 = 若干个互不相关的"特征风险"叠加,第 \(i\) 个特征组合的方差是 \(\lambda_i\),它对协方差矩阵的贡献是秩一矩阵 \(\lambda_iu_iu_i^T\)。 数值例子:\(\Sigma=\begin{bmatrix}2&1\\1&2\end{bmatrix}\),\(u_1=\frac1{\sqrt2}[1,1]^T\)(等权,\(\lambda_1=3\)),\(u_2=\frac1{\sqrt2}[1,-1]^T\)(多空,\(\lambda_2=1\))。
\[3\cdot\tfrac12\begin{bmatrix}1&1\\1&1\end{bmatrix}+1\cdot\tfrac12\begin{bmatrix}1&-1\\-1&1\end{bmatrix}=\begin{bmatrix}1.5+0.5&1.5-0.5\\1.5-0.5&1.5+0.5\end{bmatrix}=\begin{bmatrix}2&1\\1&2\end{bmatrix}.\]两只资产的协方差 1 全部来自"共同部分" \(u_1\)(贡献 \(+1.5\))被"多空部分" \(u_2\)(贡献 \(-0.5\))部分抵消。PCA 截断就是只保留前几项,扔掉 \(\lambda_i\) 小的项。
几个立即可得的性质(原书练习):
- 正规矩阵无亏:每个特征值的几何重数等于代数重数。
- \(Ax=\lambda x\iff x^*A=\lambda x^*\):右特征向量同时是左特征向量(2.5.P20)。
- 不同特征值的特征向量正交。
- 正规且幂零 ⇒ \(A=0\)(2.5.P24);正规且恰有 \(k\) 个非零特征值 ⇒ \(\operatorname{rank}A=k\)(2.5.P62)。
- 正规矩阵是酉/Hermite/斜 Hermite 的,当且仅当特征值的模为 1/全实/全纯虚(2.5.P2–P4)。
如何做酉对角化:对每个不同的特征值求特征空间的一组基并做 Gram–Schmidt,把所有特征空间的标准正交基拼起来就是 \(U\)。正规性保证了不同特征空间互相垂直、维数等于重数。
2.9.2 唯一性:特征空间唯一,基不唯一
定理 2.5.4 设 \(A\) 正规,不同特征值 \(\lambda_1,\dots,\lambda_d\) 的重数为 \(n_1,\dots,n_d\),\(\Lambda=\lambda_1I_{n_1}\oplus\cdots\oplus\lambda_dI_{n_d}\),\(A=U\Lambda U^*\)。
(a) \(A=V\Lambda V^*\)(\(V\) 酉)⇔ 存在酉 \(W_i\in M_{n_i}\) 使 \(U=V(W_1\oplus\cdots\oplus W_d)\); (b) 两个正规矩阵酉相似 ⇔ 它们的特征值相同(计重数)。
(a) 的含义对 PCA 很要紧:特征值互异时,每个特征向量只差一个模为 1 的因子(实情形就是正负号);特征值重复时,对应特征空间内部可以任意旋转。 样本协方差的特征值几乎从不严格相等,但接近相等时,特征向量对样本扰动极其敏感——实战 3 会看到这一点。
(b) 说明对正规矩阵,特征值就是酉相似的完全不变量(对比第 02a 章:一般矩阵需要 Specht 定理的无穷多个条件)。2.5.P55:正规矩阵酉相似 ⇔ \(\operatorname{tr}A^k=\operatorname{tr}B^k\)(\(k=1,\dots,n\))。
2.9.3 交换正规族与 Hermite 矩阵
定理 2.5.5 正规矩阵族可同时酉对角化 ⇔ 它两两交换。
定理 2.5.6(Hermite 矩阵的谱定理) Hermite 矩阵的特征值全为实数,且 \(A=U\Lambda U^*\),\(U\) 酉,\(\Lambda\) 实对角。
与第 01 章相比,这里不需要假设特征值互异,也不需要先知道可对角化——标准正交特征基由 Hermite 性(更一般地由正规性)结构性地保证。
推导拆解:不借助整套谱定理,也能直接看出实对称矩阵的两条关键性质。 (1)特征值是实数。设 \(Ax=\lambda x\)(\(x\) 允许是复向量)。左乘 \(x^*\):\(x^*Ax=\lambda x^*x\)。对左边取共轭转置,\((x^*Ax)^*=x^*A^*x=x^*Ax\)(用了 \(A^*=A\)),所以 \(x^*Ax\) 是实数;\(x^*x=\sum|x_i|^2>0\) 也是实数。于是 \(\lambda=x^*Ax/x^*x\) 是实数。 (2)不同特征值的特征向量正交。设 \(Ax_1=\lambda_1x_1\),\(Ax_2=\lambda_2x_2\),\(\lambda_1\ne\lambda_2\)。计算 \(x_2^TAx_1\) 两种方式:先算 \(Ax_1\) 得 \(\lambda_1x_2^Tx_1\);先算 \(x_2^TA=(A^Tx_2)^T=(Ax_2)^T=\lambda_2x_2^T\) 得 \(\lambda_2x_2^Tx_1\)。两者相等,\((\lambda_1-\lambda_2)x_2^Tx_1=0\),所以 \(x_2^Tx_1=0\)。 第二步正是"对称"起作用的地方:\(A^T=A\) 让左右特征向量相同。对非对称矩阵,左右特征向量不同(第 01 章),这个论证就不成立。
Hermite 矩阵的二次型 \(x^*Ax\) 是实数。由谱分解,单位向量 \(x\) 写成 \(x=\sum\xi_iu_i\) 时
是特征值的凸组合,所以 \(\lambda_{\min}\le x^*Ax\le\lambda_{\max}\),端点在特征向量处取到。这就是第 01 章 Rayleigh 商结论的严格版本。
金融直觉:把 \(A\) 换成协方差 \(\Sigma\)、\(x\) 换成单位化的组合权重 \(w\)。\(\xi_i=u_i^Tw\) 是组合在第 \(i\) 个特征组合上的"暴露",因为 \(Q\) 正交,\(\sum\xi_i^2=\|w\|^2=1\)。于是组合方差 \(w^T\Sigma w=\sum\lambda_i\xi_i^2\) 是各特征方差的加权平均,权重是暴露的平方。加权平均当然落在最小值和最大值之间。 推论:在 \(\|w\|_2=1\) 的约束下,方差最小的组合是最小特征值对应的特征组合,方差最大的是第一主成分。还要注意这里的约束是权重平方和为 1,不是 CFA 里常见的权重之和为 1(\(e^Tw=1\)),所以这里的"最小方差组合"和马科维茨最小方差组合不是同一个东西。更一般地(2.5.P51),正规矩阵的数值域 \(\{x^*Ax:\|x\|=1\}\) 恰好是特征值的凸包。
2.9.4 实正规矩阵的实正交标准形
实矩阵希望用实正交矩阵变换。复特征值只能用 \(2\times2\) 实块表示。
定理 2.5.8 设 \(A\in M_n(\mathbf R)\) 正规,则存在实正交 \(Q\) 使
\(1\times1\) 块是实特征值,\(2\times2\) 块形如 \(\begin{bmatrix}a&b\\-b&a\end{bmatrix}\)(\(b>0\),特征值 \(a\pm ib\)),块的顺序可任意。两个实正规矩阵实正交相似 ⇔ 特征值相同。
证明:实 Schur 形(第 02a 章定理 2.3.4b)给出上拟三角形,正规加引理 2.5.2 ⇒ 拟对角;正规的 \(2\times2\) 实块若有非实特征值,必是特殊形式(引理 2.5.7)。
推论 2.5.11 对 \(A\in M_n(\mathbf R)\):
(a) \(A=A^T\) ⇔ 存在实正交 \(Q\) 使 \(Q^TAQ=\operatorname{diag}(\lambda_1,\dots,\lambda_n)\)。这就是协方差矩阵的谱分解 \(\Sigma=Q\Lambda Q^T\)。 (b) \(A=-A^T\) ⇔ \(Q^TAQ=0_{n-2p}\oplus b_1\begin{bmatrix}0&1\\-1&0\end{bmatrix}\oplus\cdots\oplus b_p\begin{bmatrix}0&1\\-1&0\end{bmatrix}\),\(b_j>0\);非零特征值为 \(\pm ib_j\)。 (c) \(AA^T=I\) ⇔ \(Q^TAQ=\operatorname{diag}(\pm1,\dots,\pm1)\oplus\begin{bmatrix}\cos\theta_1&\sin\theta_1\\-\sin\theta_1&\cos\theta_1\end{bmatrix}\oplus\cdots\),\(\theta_j\in(0,\pi)\)。
(c) 的几何含义:任何实正交变换都是若干个互相垂直的平面内的旋转加上若干个坐标轴上的反射。三维情形就是 Euler 定理(2.5.P32):行列式为正的 \(3\times3\) 正交矩阵是绕某固定轴的旋转。
另外两个实用推论:
- 2.5.P14:实矩阵正规且特征值全实 ⇔ 对称。
- 定理 2.5.21:两个实矩阵若酉相似,则一定实正交相似(证明用到酉矩阵的 QS 分解 2.5.20)。所以处理实矩阵时不必担心"复的酉变换能做到而实正交变换做不到"。
2.9.5 Fuglede–Putnam 定理及其他(选读)
定理 2.5.16(Fuglede–Putnam) \(A,B\) 正规,则 \(AX=XB\iff A^*X=XB^*\)。证明把 \(A,B\) 都对角化后,归结为 \(\xi(\lambda-\mu)=0\iff\xi\overline{(\lambda-\mu)}=0\)。
原书 2.5.17 给出满足 \(A\bar A=\bar AA\) 的正规矩阵在实正交相似下的标准形,2.5.18–2.5.20 给出对称酉矩阵 \(U=Q\operatorname{diag}(e^{i\theta_j})Q^T\) 以及酉矩阵的 QS 分解 \(U=QS\)(\(Q\) 实正交、\(S\) 对称酉)。这些在量化中用不到。
两个有量化味道的习题结论:
- 2.5.P33:一族交换的正规矩阵都是同一个 Hermite 矩阵的多项式。
- 2.5.P60–P61(特征值散布界):
\[\max_i\Big|\lambda_i-\frac{\operatorname{tr}A}n\Big|\le\sqrt{\frac{n-1}n}\Big(\operatorname{tr}A^*A-\frac{|\operatorname{tr}A|^2}n\Big)^{1/2},\]等号当且仅当 \(A\) 正规且特征值形如 \(c(n-1)+\frac{\operatorname{tr}A}n,\ -c+\frac{\operatorname{tr}A}n,\dots\)。对相关矩阵(\(\operatorname{tr}C=n\),\(\operatorname{tr}C^2=n+\sum_{i\ne j}\rho_{ij}^2\))这给出只用两两相关系数就能算的最大特征值上界(练习 4)。
2.10 奇异值分解
2.10.1 从酉相似到酉等价
只有正规矩阵能被酉相似对角化。但如果允许左右两边用不同的酉矩阵——把 \(A\in M_{n,m}\) 看成从 \(\mathbf C^m\) 到 \(\mathbf C^n\) 的映射,两端各自选一组标准正交基——那么任何矩阵都能对角化。这种变换 \(A\mapsto VAW^*\) 叫酉等价(unitary equivalence)。
原书先给出一个热身结果(2.6.1):任意两个方阵 \(A,B\) 可以用同一对酉矩阵同时化成上三角,\(A=VT_AW^*\)、\(B=VT_BW^*\),而且不需要任何交换条件。它的实版本(2.6.2)是广义特征值问题 \(Ax=\lambda Bx\) 的 QZ 算法的理论基础。
2.10.2 定理
定理 2.6.3(奇异值分解,SVD) 设 \(A\in M_{n,m}\),\(q=\min\{m,n\}\),\(\operatorname{rank}A=r\)。
(a) 存在酉 \(V\in M_n\)、\(W\in M_m\) 和 \(\Sigma_q=\operatorname{diag}(\sigma_1,\dots,\sigma_q)\),\(\sigma_1\ge\cdots\ge\sigma_r>0=\sigma_{r+1}=\cdots=\sigma_q\),使
\(\sigma_i\) 称为 \(A\) 的奇异值(singular values);\(V\) 的列是左奇异向量,\(W\) 的列是右奇异向量。
白话解释:和特征分解 \(A=U\Lambda U^*\) 比,SVD 有三处不同:左右两边是两个不同的酉矩阵;中间的对角元一律是非负实数;矩阵可以是长方形。代价是失去了"\(Ax=\lambda x\),方向不变"的含义,换来"对任何矩阵都成立"。 手算一个例子:\(A=\begin{bmatrix}3&0\\4&5\end{bmatrix}\)。 第一步,\(A^TA=\begin{bmatrix}25&20\\20&25\end{bmatrix}\),特征值 45 和 5,特征向量 \(w_1=\frac1{\sqrt2}[1,1]^T\)、\(w_2=\frac1{\sqrt2}[1,-1]^T\)。 第二步,奇异值是特征值的平方根:\(\sigma_1=\sqrt{45}=3\sqrt5\approx6.71\),\(\sigma_2=\sqrt5\approx2.24\)。 第三步,左奇异向量 \(v_i=Aw_i/\sigma_i\):\(v_1=\frac1{\sqrt{10}}[1,3]^T\),\(v_2=\frac1{\sqrt{10}}[3,-1]^T\),两者正交。 核对:\(\sigma_1\sigma_2=15=|\det A|\);\(\sigma_1^2+\sigma_2^2=50=9+16+25\)(元素平方和)。而 \(A\) 的特征值是对角元 3 和 5(下三角阵),与奇异值完全不同。
记号对照:本章沿用原书的 \(A=V\Sigma W^*\)(\(V\) 在左、\(W\) 在右)。
numpy.linalg.svd返回U, s, Vt,对应 \(V\leftrightarrow\)U、\(W^*\leftrightarrow\)Vt。
证明思路(方阵情形) \(AA^*\) 与 \(A^*A\) 都是 Hermite 矩阵,且特征值相同(第 01 章:\(AB\) 与 \(BA\) 特征值相同),由定理 2.5.4(b) 二者酉相似:\(A^*A=U(AA^*)U^*\)。于是
即 \(UA\) 是正规矩阵!对它用谱定理 \(UA=X\Lambda X^*\),把每个特征值写成 \(\lambda_j=|\lambda_j|e^{i\theta_j}\),相位并入右边的酉矩阵:\(A=(U^*X)\operatorname{diag}(|\lambda_j|)(XD^*)^*\),\(D=\operatorname{diag}(e^{i\theta_j})\)。长方情形先用零空间的标准正交基把多出的列"切掉",再用方阵情形。(b) 由 \(AA^*=V\Sigma\Sigma^TV^*\) 立得。∎
更常见的教科书证明是"先对 \(A^*A\) 做谱分解得到 \(W\) 和 \(\sigma_i^2\),再令 \(v_i=Aw_i/\sigma_i\)",两条路殊途同归。
推导拆解:把"更常见的证明"补完整,每步都只用前面学过的东西。 第一步,\(A^*A\) 是 Hermite 的(\((A^*A)^*=A^*A\)),而且半正定:\(x^*A^*Ax=\|Ax\|^2\ge0\)。由谱定理,\(A^*A=W\operatorname{diag}(\lambda_i)W^*\),\(W\) 酉,\(\lambda_i\ge0\)。令 \(\sigma_i=\sqrt{\lambda_i}\),按从大到小排,前 \(r\) 个为正。 第二步,对 \(i\le r\) 令 \(v_i=Aw_i/\sigma_i\)。它们标准正交:\(v_i^*v_j=\dfrac{w_i^*A^*Aw_j}{\sigma_i\sigma_j}=\dfrac{\sigma_j^2\,w_i^*w_j}{\sigma_i\sigma_j}\),\(i\ne j\) 时为 0,\(i=j\) 时为 1。这里用了 \(A^*Aw_j=\sigma_j^2w_j\)。 第三步,对 \(i>r\),\(\|Aw_i\|^2=w_i^*A^*Aw_i=0\),所以 \(Aw_i=0\)。把 \(v_1,\dots,v_r\) 补成 \(\mathbf C^n\) 的标准正交基得到 \(V\)。 第四步,验证 \(AW=V\Sigma\):第 \(i\) 列左边是 \(Aw_i\),右边是 \(\sigma_iv_i\)(\(i\le r\) 时由定义成立,\(i>r\) 时两边都是 0)。右乘 \(W^*\) 得 \(A=V\Sigma W^*\)。∎
2.10.3 如何理解 SVD
外积形式
几何:\(A\) 把右边的标准正交基 \(w_1,\dots,w_m\) 映成左边的正交向量 \(\sigma_1v_1,\dots,\sigma_rv_r\)(和零)。单位球被映成一个椭球,半轴方向是 \(v_i\),半轴长是 \(\sigma_i\)。任意线性变换 = 旋转(\(W^*\))+ 沿坐标轴伸缩(\(\Sigma\))+ 旋转(\(V\))。
四个基本子空间:\(\operatorname{range}A=\operatorname{span}\{v_1..v_r\}\),\(\ker A^*=\operatorname{span}\{v_{r+1}..v_n\}\);\(\operatorname{range}A^*=\operatorname{span}\{w_1..w_r\}\),\(\ker A=\operatorname{span}\{w_{r+1}..w_m\}\)。
收益矩阵的解读:设 \(X\in\mathbf R^{T\times N}\) 是去均值的收益矩阵(行是日期,列是股票),\(X=V\Sigma W^T\)。
- 右奇异向量 \(w_i\in\mathbf R^N\):第 \(i\) 个主成分的载荷(特征组合的权重);
- 左奇异向量 \(v_i\in\mathbf R^T\):第 \(i\) 个主成分的时间序列(归一化的因子收益),\(Xw_i=\sigma_iv_i\);
- \(\sigma_i^2/(T-1)\):第 \(i\) 个主成分的方差,即样本协方差 \(X^TX/(T-1)\) 的第 \(i\) 大特征值。
所以对收益矩阵做 SVD 与对样本协方差做特征分解是同一件事,但 SVD 不用显式形成 \(X^TX\),数值上更好(理由见 2.11.4)。
推导拆解:为什么是"同一件事"?把 \(X=V\Sigma W^T\) 代入样本协方差:
\[\frac{X^TX}{T-1}=\frac{W\Sigma^TV^TV\Sigma W^T}{T-1}=W\,\frac{\Sigma^T\Sigma}{T-1}\,W^T.\]中间 \(V^TV=I\) 消掉;\(\Sigma^T\Sigma\) 是对角阵,对角元 \(\sigma_i^2\)。这正是协方差矩阵的谱分解:特征向量是 \(W\) 的列,特征值是 \(\sigma_i^2/(T-1)\)。 再看主成分收益:第 \(i\) 个主成分组合每天的收益是 \(Xw_i\)。由 \(XW=V\Sigma\) 取第 \(i\) 列,\(Xw_i=\sigma_iv_i\)。所以 \(v_i\) 就是"标准化后的第 \(i\) 个因子收益序列",\(\sigma_i\) 是它的规模;不同 \(v_i\) 相互正交,说明各主成分收益在样本内互不相关。一个 SVD 同时给出了载荷、因子收益和因子方差。
2.10.4 基本性质
- \(\operatorname{rank}A\) 等于非零奇异值个数,但只不小于非零特征值个数(幂零矩阵特征值全为 0,秩可以很大)。
- \(A,\bar A,A^T,A^*\) 奇异值相同。
- 方阵:\(\sigma_1\cdots\sigma_n=|\det A|\);一般:\(\sum\sigma_i^2=\operatorname{tr}A^*A=\|A\|_F^2\)。
- \(2\times2\):\(\sigma_{1,2}^2=\frac12\Big(\operatorname{tr}A^*A\pm\sqrt{(\operatorname{tr}A^*A)^2-4|\det A|^2}\Big)\)。
- 特征值与奇异值是完全不同的量:只在第一超对角线上有非零元 \(a_{12},\dots,a_{n-1,n}\) 的幂零矩阵,特征值全为 0,奇异值却是 \(0,|a_{12}|,\dots,|a_{n-1,n}|\)。
- 正规矩阵的奇异值 = 特征值的模(2.6.P14);反之 \(\sigma_i=|\lambda_i|\) 对所有 \(i\) 成立 ⇒ 正规(2.6.P15)。Schur 不等式的奇异值版本:\(\sum|\lambda_i|^2\le\sum\sigma_i^2\)。
- 两个同型矩阵酉等价 ⇔ 奇异值相同(2.6.P7)。
- \(A\) 是酉矩阵 ⇔ 所有奇异值为 1(2.6.P13)。
定理 2.6.4(奇异值的连续性) 若 \(A_k\to A\),则每个 \(\sigma_i(A_k)\to\sigma_i(A)\)(均按降序排列)。证明同样是"酉群紧 + 唯一性"。与特征值相比,奇异值有天然的降序排列,所以陈述更干净;而且(原书第 7 章的 Weyl 型不等式)\(|\sigma_i(A+E)-\sigma_i(A)|\le\|E\|_2\),奇异值对扰动总是良态的,不像非正规矩阵的特征值那样可能极端敏感。
2.10.5 唯一性:PCA 载荷为什么会翻号和旋转
定理 2.6.5(Autonne 唯一性定理) 设 \(A=V\Sigma W^*\),\(s_1,\dots,s_d\) 是不同的正奇异值,重数 \(n_1,\dots,n_d\)。另一对酉矩阵 \(\hat V,\hat W\) 满足 \(A=\hat V\Sigma\hat W^*\),当且仅当
\(U_i\in M_{n_i}\) 酉,\(\tilde V,\tilde W\) 是任意酉矩阵。\(A\) 实时可全部取实正交。
要点:同一个正奇异值对应的左右奇异向量必须用同一个 \(U_i\) 一起变换;零奇异值对应的部分左右可以各自独立变换。证明:\(A^*A\) 与 \(AA^*\) 的谱分解唯一性(2.5.4)分别约束 \(\hat W\) 和 \(\hat V\),再由 \(\Sigma=(V^*\hat V)\Sigma(\hat W^*W)\) 得两边的块相同。
量化翻译:
- 奇异值互异时,每个 \((v_i,w_i)\) 对只能同时乘 \(-1\)(实情形)。不同软件、不同窗口算出的第 \(i\) 个主成分载荷可能整体变号,这不是信号变化,必须先做符号对齐(例如令载荷之和为正,或与上一窗口内积为正)。
- 奇异值相等时,对应的奇异向量在那个子空间内可以任意旋转。实际中奇异值几乎不会严格相等,但接近时,单个奇异向量对样本噪声极度敏感,相邻窗口的 PC2、PC3 可能"互换"或"转了个角度"。稳定的对象是子空间,不是单个向量。应对方法是比较子空间(主角,2.12 节)或做 Procrustes 对齐(实战 3)。
原书 2.6.P37 补充:奇异值互异时 SVD 的酉因子只差对角酉矩阵。
2.10.6 特殊矩阵的 SVD(了解)
- 推论 2.6.6(a)(Autonne–Takagi 分解):复对称矩阵 \(A=A^T\) 可写成 \(A=U\Sigma U^T\)(\(U\) 酉,\(\Sigma\) 为奇异值)。原书注记说它由 Autonne 于 1915 年发表,此后常被称为 Takagi 分解。
- 推论 2.6.6(b):复斜对称矩阵的秩是偶数,\(A=U\big(\bigoplus s_j\begin{bmatrix}0&1\\-1&0\end{bmatrix}\oplus0\big)U^T\)。
- 推论 2.6.7(实 SVD):实矩阵 \(A=P\Sigma Q^T\),\(P,Q\) 实正交。
- 2.6.P31(Jordan–Wielandt 矩阵):\(\begin{bmatrix}0&A\\A^*&0\end{bmatrix}\) 是 Hermite 矩阵,方阵情形特征值为 \(\pm\sigma_i\)。这是把奇异值问题化为 Hermite 特征值问题的标准技巧,原书第 4、7 章反复使用。
- 2.6.P10:\(A^*A=B^*B\) ⇔ 存在酉 \(U\) 使 \(B=UA\)。例如两个矩阵产生相同的"格拉姆矩阵"(同一协方差),它们只差一个正交变换——协方差矩阵的"平方根"有无穷多个,Cholesky 因子、对称平方根 \(\Sigma^{1/2}\)、PCA 因子都是其中之一。
- 2.6.P23:\(A^2=0\)、秩 \(r\) 的矩阵酉相似于 \(\bigoplus\sigma_i\begin{bmatrix}0&1\\0&0\end{bmatrix}\oplus0\)。
- 2.6.P18:幂等矩阵(投影)的奇异值:正交投影的非零奇异值全为 1;斜投影有大于 1 的奇异值(详见第 03b 章)。
极分解(补充,原书第 7 章详述) 由 SVD,方阵 \(A=V\Sigma W^*=(VW^*)(W\Sigma W^*)=UP\),\(U\) 酉、\(P=(A^*A)^{1/2}\) 半正定。这是复数 \(z=e^{i\theta}|z|\) 的矩阵版本。2.6.P10 就是它的一个推论。
2.11 SVD 的四大应用
这一节的四个结果是本书正文之外量化最常用的 SVD 推论。原书分别在第 5 章(范数与条件数)、第 7 章(低秩近似、极分解)及姊妹篇《Topics in Matrix Analysis》第 3 章展开;这里只给出陈述和关键思路,便于和本章内容连起来理解。
2.11.1 主成分分析
对去均值收益矩阵 \(X=V\Sigma W^T\),第 \(k\) 个主成分方向 \(w_k\) 是在与前 \(k-1\) 个方向正交的条件下使 \(\|Xw\|_2^2=w^TX^TXw\) 最大的单位向量,最大值为 \(\sigma_k^2\)。第 \(k\) 个主成分的解释方差比例为
任何组合 \(x\) 的方差可以按特征组合分解:
\(\lambda_i(w_i^Tx)^2\) 就是组合在第 \(i\) 个"特征风险"上的贡献。
2.11.2 最优低秩近似(Eckart–Young)
定理(Eckart–Young–Mirsky) 令 \(A_k=\sum_{i=1}^k\sigma_iv_iw_i^*\)(截断 SVD),则对所有秩不超过 \(k\) 的 \(B\),
谱范数情形的证明 \(\dim\ker B\ge m-k\),而 \(\operatorname{span}\{w_1,\dots,w_{k+1}\}\) 维数为 \(k+1\),二者必有非零交。取其中单位向量 \(x=\sum_{i\le k+1}\xi_iw_i\),则
而 \(A-A_k=\sum_{i>k}\sigma_iv_iw_i^*\) 的最大奇异值正是 \(\sigma_{k+1}\)。∎
推导拆解:这个证明每一步用了什么。 第一步"\(\dim\ker B\ge m-k\)":秩–零度定理(第 00 章 0.2.1),\(\operatorname{rank}B+\dim\ker B=m\),而 \(\operatorname{rank}B\le k\)。 第二步"必有非零交":第 00 章 0.1.3 的子空间交引理。两个子空间维数之和 \((m-k)+(k+1)=m+1>m\),所以它们在 \(\mathbf C^m\) 里一定有公共的非零向量。 第三步"\((A-B)x=Ax\)":\(x\in\ker B\),所以 \(Bx=0\)。 第四步计算 \(\|Ax\|\):\(Ax=\sum_{i\le k+1}\xi_iAw_i=\sum_{i\le k+1}\xi_i\sigma_iv_i\)。\(v_i\) 两两正交,长度平方等于各项平方和 \(\sum\sigma_i^2|\xi_i|^2\)。每个 \(\sigma_i\ge\sigma_{k+1}\)(\(i\le k+1\)),而 \(\sum|\xi_i|^2=1\),所以 \(\ge\sigma_{k+1}^2\)。 白话:任何只用 \(k\) 个因子的模型都"看不见"某个方向,而前 \(k+1\) 个主成分张成的空间太大,躲不开这个盲区,盲区里至少有 \(\sigma_{k+1}\) 的信号被漏掉。SVD 截断恰好只漏掉这么多,所以是最优的。
量化含义:用 \(k\) 个因子拟合收益面板,SVD 截断是所有\(k\) 因子线性模型中残差平方和最小的;"再加一个因子能多解释多少"恰好是 \(\sigma_{k+1}^2\)。统计因子模型 \(\Sigma\approx W_k\Lambda_kW_k^T+D\)(\(D\) 为对角的特质方差)就建立在这个结论上。
2.11.3 Moore–Penrose 伪逆与最小范数最小二乘
定义 \(A=V\Sigma W^*\),\(\Sigma^+\) 是把 \(\Sigma\) 转置并把非零 \(\sigma_i\) 换成 \(1/\sigma_i\) 得到的 \(m\times n\) 矩阵。伪逆
它是满足四个 Penrose 条件 \(AA^+A=A\)、\(A^+AA^+=A^+\)、\((AA^+)^*=AA^+\)、\((A^+A)^*=A^+A\) 的唯一矩阵。\(AA^+\) 是到 \(\operatorname{range}A\) 的正交投影,\(A^+A\) 是到 \(\operatorname{range}A^*\) 的正交投影。\(A\) 可逆时 \(A^+=A^{-1}\);列满秩时 \(A^+=(A^*A)^{-1}A^*\)(OLS 公式)。
定理 \(x^+=A^+b\) 使 \(\|Ax-b\|_2\) 最小,且在所有最小化者中 \(\|x\|_2\) 最小。
证明 令 \(y=W^*x\)、\(c=V^*b\)。酉变换不改变 2-范数,\(\|Ax-b\|^2=\|\Sigma y-c\|^2=\sum_{i\le r}|\sigma_iy_i-c_i|^2+\sum_{i>r}|c_i|^2\)。最小化要求 \(y_i=c_i/\sigma_i\)(\(i\le r\)),其余 \(y_i\) 任意;而 \(\|x\|=\|y\|\),范数最小时其余 \(y_i=0\)。∎
推导拆解:第一个等号的细节是 \(Ax-b=V\Sigma W^*x-b=V(\Sigma y-V^*b)=V(\Sigma y-c)\),再用"左乘酉矩阵 \(V\) 不改变长度"。换到 SVD 坐标后问题被拆成互不干扰的标量问题:第 \(i\) 个坐标上只需让 \(\sigma_iy_i\) 尽量接近 \(c_i\)。 这正是实战 2 的情形:因子 \(f_1,f_2,f_1+f_2\) 严格共线,\(\sigma_3=0\)。第 3 个坐标 \(y_3\) 不影响拟合(乘的是 0),数据对它"没有意见",于是伪逆取 \(y_3=0\)。翻译回系数空间,就是不在零空间方向 \((1,1,-1)\) 上放任何东西。金融上,这相当于数据无法区分"分别暴露于 \(f_1\)、\(f_2\)"和"暴露于 \(f_1+f_2\)"时,选系数平方和最小的那一组,而不会给出"第 3 个因子大多头、前两个因子大空头"这种相互抵消的极端系数。
注意伪逆不是连续函数:\(\sigma_r\to0\) 时 \(1/\sigma_r\to\infty\),一旦它真正变成 0 又突然被截掉。实际计算要设阈值(numpy.linalg.pinv 的 rcond),这就是截断 SVD 正则化。
第 03a 章还会遇到另一种广义逆——Drazin 逆,它基于 Jordan 结构而不是 SVD,用途也不同(第 03a 章)。
2.11.4 条件数
对可逆方阵,2-范数条件数
解线性方程 \(Ax=b\) 时,右端相对误差最多被放大 \(\kappa\) 倍:\(\frac{\|\delta x\|}{\|x\|}\le\kappa_2(A)\frac{\|\delta b\|}{\|b\|}\)。对长方矩阵定义 \(\kappa_2(A)=\sigma_1/\sigma_r\)。
由 \(A^*A=W\Sigma^T\Sigma W^*\),\(A^*A\) 的奇异值是 \(\sigma_i^2\),所以
这正是第 02a 章实战 1 中"正规方程丢失两倍有效数字"的原因。对协方差矩阵(对称正定),\(\kappa=\lambda_{\max}/\lambda_{\min}\)。当股票数 \(N\) 接近或超过样本长度 \(T\) 时,样本协方差的最小特征值趋近于 0(去均值后 \(N\ge T\) 时严格奇异),条件数爆炸,最小方差组合权重 \(\Sigma^{-1}\mathbf 1\) 极不稳定。
金融直觉:两只资产的相关矩阵 \(\begin{bmatrix}1&\rho\\\rho&1\end{bmatrix}\) 的特征值是 \(1+\rho\)(等权方向)和 \(1-\rho\)(多空方向),条件数 \(\kappa=\dfrac{1+\rho}{1-\rho}\)。\(\rho=0.5\) 时 \(\kappa=3\);\(\rho=0.9\) 时 \(\kappa=19\);\(\rho=0.99\) 时 \(\kappa=199\)。 含义:两只高度相关的资产,"多一只空一只"的组合风险极小(方差 \(1-\rho\)),\(\Sigma^{-1}\) 在这个方向上的放大倍数是 \(1/(1-\rho)\)。均值–方差优化看到预期收益的一点点差异,就会在这个"看似无风险"的多空方向上加很大的杠杆,而这个差异往往只是估计噪声。条件数就是"优化器把输入误差放大多少倍"的上限。所以"相关性越高,优化结果越不可信",这和 CFA 里讲的"误差最大化"是同一个现象。
正则化 = 奇异值滤波 最小二乘解写成 \(\hat\beta=\sum_i\phi_i\frac{v_i^*y}{\sigma_i}w_i\),不同方法只是"滤波因子" \(\phi_i\) 不同:
| 方法 | 滤波因子 \(\phi_i\) | 效果 |
|---|---|---|
| OLS | \(1\) | 小 \(\sigma_i\) 方向噪声被 \(1/\sigma_i\) 放大 |
| 截断 SVD(保留 \(k\) 个) | \(1\ (i\le k)\),\(0\ (i>k)\) | 硬截断 |
| 岭回归 \(\min|X\beta-y|^2+\lambda|\beta|^2\) | \(\sigma_i^2/(\sigma_i^2+\lambda)\) | 软收缩 |
协方差矩阵的特征值裁剪、Ledoit–Wolf 收缩也是同一思想作用在 \(\lambda_i\) 上。
推导拆解:岭回归的滤波因子 \(\sigma_i^2/(\sigma_i^2+\lambda)\) 是怎么来的(实矩阵,记 \(X=V\Sigma W^T\))。 第一步,岭回归目标对 \(\beta\) 求导令其为零,得 \((X^TX+\lambda I)\beta=X^Ty\)(比正规方程多了 \(\lambda I\))。 第二步,代入 SVD:\(X^TX+\lambda I=W(\Sigma^T\Sigma+\lambda I)W^T\)(用了 \(WW^T=I\),把 \(\lambda I\) 写成 \(W\lambda IW^T\)),\(X^Ty=W\Sigma^TV^Ty\)。 第三步,求逆并化简:\(\hat\beta=W(\Sigma^T\Sigma+\lambda I)^{-1}\Sigma^TV^Ty=\sum_i\dfrac{\sigma_i}{\sigma_i^2+\lambda}(v_i^Ty)\,w_i\)。 第四步,改写成"OLS 项 × 滤波因子":\(\dfrac{\sigma_i}{\sigma_i^2+\lambda}=\dfrac{\sigma_i^2}{\sigma_i^2+\lambda}\cdot\dfrac1{\sigma_i}\)。 读法:\(\sigma_i\gg\sqrt\lambda\) 时因子接近 1,几乎不动;\(\sigma_i\ll\sqrt\lambda\) 时因子接近 0,这个方向上的估计被压掉。\(\lambda\) 就是"信号够不够强"的门槛。
2.12 CS 分解与子空间夹角
2.12.1 动机:分块酉矩阵长什么样
酉矩阵 \(U\) 按 \(p+q\) 分块后,四个块并不独立。第 02a 章引理 2.1.10 说 \(\operatorname{rank}U_{12}=\operatorname{rank}U_{21}\);2.6.P19 更精确地说:\(U_{11}\) 与 \(U_{22}\) 的奇异值(除了多出来的 1)相同,\(U_{12}\)、\(U_{21}\) 的奇异值是 \(\sqrt{1-\sigma_i^2(U_{11})}\)。CS 分解把这些关系一次说清:分块酉矩阵在分块酉等价下的标准形由一组"余弦"和"正弦"决定。
2.12.2 定理
定理 2.7.1(CS 分解) 设 \(p\le q\),\(p+q=n\),\(U=\begin{bmatrix}U_{11}&U_{12}\\U_{21}&U_{22}\end{bmatrix}\in M_n\) 酉,\(U_{11}\in M_p\),\(U_{22}\in M_q\)。则存在酉矩阵 \(V_1,W_1\in M_p\) 和 \(V_2,W_2\in M_q\) 使
其中 \(C=\operatorname{diag}(\sigma_1,\dots,\sigma_p)\),\(1\ge\sigma_1\ge\cdots\ge\sigma_p\ge0\) 是 \(U_{11}\) 的奇异值,\(S=\operatorname{diag}\big((1-\sigma_1^2)^{1/2},\dots,(1-\sigma_p^2)^{1/2}\big)\)。
逐块写出来就是原书的参数化 (2.7.1.3):
记号提示:原书把定理写成 \(\operatorname{diag}(\cdot,\cdot)\,U\,\operatorname{diag}(\cdot,\cdot)=\begin{bmatrix}C&S&0\\-S&C&0\\0&0&I\end{bmatrix}\) 的形式 (2.7.1.2),那里的四个酉矩阵与上面参数化中的 \(V_i,W_i\) 相差共轭转置;已对照原书扫描页(PDF p.181)核实:原书 (2.7.1.3) 的四块参数化 \(U_{11}=V_1CW_1\)、\(U_{12}=V_1[S\;0]W_2\)、\(U_{21}=V_2\begin{bmatrix}-S\\0\end{bmatrix}W_1\)、\(U_{22}=V_2\begin{bmatrix}C&0\\0&I\end{bmatrix}W_2\) 与上式一致。本章采用的写法自洽:中间矩阵的列标准正交(\(C^2+S^2=I\),\(CS-SC=0\)),左右两侧都是分块对角酉矩阵。
证明思路(一串分块酉等价):
- 对 \(U_{11}\) 做 SVD,并把奇异值排成升序 \(\Gamma\);因为 \(U\) 的列是单位向量,\(\sigma_1\le1\)。
- 对右上块做 LQ 分解、左下块做 QR 分解,把它们化成 \([L\ 0]\) 与 \(\begin{bmatrix}R\\0\end{bmatrix}\)(\(L\) 下三角、\(R\) 上三角)。
- 关键引理:若 \([\Gamma\ L\ 0]\) 的行标准正交、\(\Gamma\) 是升序非负对角阵、\(L\) 下三角,则 \(L\) 一定是对角阵,且 \(|\ell_{jj}|^2=1-\gamma_j^2\)(逐行利用正交性把下三角部分逼成零)。\(R\) 同理。用对角酉矩阵调整相位得到 \(\pm S\)。
- 利用正交性推出右下块的结构,剩余部分是一个酉矩阵,可再吸收掉。
- 用反序矩阵把升序改回降序。
2.12.3 余弦与正弦:子空间之间的主角
\(C\) 和 \(S\) 的名字来自它们的几何意义。设 \(\mathcal X,\mathcal Y\subseteq\mathbf C^n\) 是两个 \(k\) 维子空间,\(X,Y\in M_{n,k}\) 是它们的标准正交基。\(\mathcal X\) 与 \(\mathcal Y\) 之间的主角(principal angles) \(0\le\theta_1\le\cdots\le\theta_k\le\pi/2\) 由
定义。把 \(X\)、\(Y\) 各自补成酉矩阵 \([X\ X_\perp]\)、\([Y\ Y_\perp]\),则 \(U=[X\ X_\perp]^*[Y\ Y_\perp]\) 是酉矩阵,左上块 \(X^*Y\) 的奇异值是 \(\cos\theta_i\),左下块 \(X_\perp^*Y\) 的奇异值是 \(\sin\theta_i\)——正是 CS 分解里的 \(C\) 与 \(S\)。
白话解释:先看 \(k=1\):两个子空间都是过原点的直线,各取一个单位方向 \(x,y\),\(X^*Y\) 就是一个数 \(x^*y\),它的奇异值是 \(|x^*y|=\cos\theta\),恰是两条直线的夹角余弦(取绝对值是因为直线没有正反方向之分,这也顺带解决了 PCA 载荷翻号的问题)。 \(k\ge2\) 时,两个平面之间不止一个角。第一主角 \(\theta_1\) 是"在两个子空间里各找一个方向、让它们尽量对齐"能达到的最小夹角;去掉这对方向后在剩下的部分里再找,得到 \(\theta_2\),依此类推。SVD 一次把这些"最佳配对"全部找出来。 量化读法:上期和本期前 3 个主成分子空间的主角余弦若是 \((0.99,0.98,0.60)\),说明两个因子方向基本没变,第三个方向转动了约 \(53^\circ\);整体风险结构有一部分漂移,而不是全部。注意即使单个 PC2、PC3 看起来"换了位置",只要主角余弦都接近 1,子空间就是稳定的。
主角不依赖于选哪组标准正交基(换基相当于左右乘酉矩阵,奇异值不变),所以它是两个子空间本身的不变量。常用的子空间距离有 \(\sin\theta_{\max}\)(等于两个正交投影之差的 2-范数)和 \(\big(\sum\sin^2\theta_i\big)^{1/2}\)。
量化用途:比较两个时期 PCA 前 \(k\) 个载荷张成的子空间,看风险因子结构是否漂移;比较一个风险模型的因子暴露空间与另一个模型的;跟踪误差分析中比较组合的主动暴露子空间。
2.12.4 压缩与酉膨胀(了解)
最大奇异值不超过 1 的矩阵称为压缩(contraction)。原书 2.7 节习题用 CS 分解证明:酉矩阵的任何子矩阵(不必方、不必主)都是压缩(2.7.P1);反之,任何压缩都可以嵌入一个更大的酉矩阵(酉膨胀,2.7.P2);\(n\times n\) 酉矩阵的 \(k\times k\) 子矩阵在 \(2k>n\) 时必有奇异值等于 1(2.7.P3)。
量化实战
实战 1:用 SVD 做 PCA、低秩近似与统计因子模型
场景:60 只股票、750 个交易日的收益,真实结构是 3 因子(市场 + 两个风格因子)加特质噪声。用 SVD 提取主成分,验证 Eckart–Young,并构造统计因子模型协方差。
import numpy as np
rng = np.random.default_rng(2024)
T, N, K = 750, 60, 3 # 3 年日频、60 只股票、3 个真实因子
B = rng.normal(0, 1, (N, K)) * np.array([1.0, 0.6, 0.4])
B[:, 0] = np.abs(B[:, 0]) + 0.5 # 第一个因子:市场,载荷全为正
f = rng.normal(0, 0.01, (T, K))
eps = rng.normal(0, 0.012, (T, N))
R = f @ B.T + eps # T x N 收益矩阵
X = R - R.mean(axis=0) # 去均值
U, s, Vt = np.linalg.svd(X, full_matrices=False) # X = U diag(s) V^T
# ---------- 1. SVD 与协方差特征分解是一回事 ----------
C = X.T @ X / (T - 1)
lam, W = np.linalg.eigh(C); lam, W = lam[::-1], W[:, ::-1]
print("前 5 个 s^2/(T-1):", (s[:5] ** 2 / (T - 1)).round(6))
print("前 5 个协方差特征值:", lam[:5].round(6))
print("第一右奇异向量与第一特征向量的 |内积| = %.12f" % abs(Vt[0] @ W[:, 0]))
print("解释方差比例(前 6 个):", (s[:6] ** 2 / np.sum(s ** 2)).round(4))
# ---------- 2. 低秩近似:Eckart–Young ----------
for k in [1, 2, 3, 5, 10]:
Xk = (U[:, :k] * s[:k]) @ Vt[:k]
err = np.linalg.norm(X - Xk, "fro")
print("k=%2d ‖X - X_k‖_F = %.5f sqrt(Σ_{i>k} s_i^2) = %.5f ‖X - X_k‖_2 = %.5f s_{k+1} = %.5f"
% (k, err, np.sqrt(np.sum(s[k:] ** 2)), np.linalg.norm(X - Xk, 2), s[k]))
# 与随机的秩 3 近似对比:投影到任意 3 维子空间都不如 SVD
Qr, _ = np.linalg.qr(rng.normal(size=(N, 3)))
print("随机 3 维子空间投影误差: %.5f" % np.linalg.norm(X - X @ Qr @ Qr.T, "fro"))
# ---------- 3. 统计因子模型:Σ ≈ V_k Λ_k V_k^T + diag(残差方差) ----------
k = 3
Vk, Lk = Vt[:k].T, s[:k] ** 2 / (T - 1)
resid_var = np.diag(C - (Vk * Lk) @ Vk.T)
Sigma_f = (Vk * Lk) @ Vk.T + np.diag(resid_var)
Sigma_true = B @ B.T * 0.01 ** 2 + np.eye(N) * 0.012 ** 2
print("\n‖样本协方差 - 真实‖_F / ‖真实‖_F = %.4f" % (np.linalg.norm(C - Sigma_true) / np.linalg.norm(Sigma_true)))
print("‖PCA 因子模型 - 真实‖_F / ‖真实‖_F = %.4f" % (np.linalg.norm(Sigma_f - Sigma_true) / np.linalg.norm(Sigma_true)))
# 主成分子空间与真实载荷空间的贴合:B 的列投影到 V_k 后保留的比例
Qb, _ = np.linalg.qr(B)
print("真实载荷空间与前 3 个 PC 的主角余弦:", np.linalg.svd(Qb.T @ Vk, compute_uv=False).round(4))
关键输出:
前 5 个 s^2/(T-1): [0.011131 0.002738 0.000956 0.000227 0.000217]
前 5 个协方差特征值: [0.011131 0.002738 0.000956 0.000227 0.000217]
第一右奇异向量与第一特征向量的 |内积| = 1.000000000000
解释方差比例(前 6 个): [0.486 0.1196 0.0417 0.0099 0.0095 0.0094]
k= 1 ‖X - X_k‖_F = 2.96968 sqrt(Σ_{i>k} s_i^2) = 2.96968 ‖X - X_k‖_2 = 1.43216 s_{k+1} = 1.43216
k= 2 ‖X - X_k‖_F = 2.60152 sqrt(Σ_{i>k} s_i^2) = 2.60152 ‖X - X_k‖_2 = 0.84604 s_{k+1} = 0.84604
k= 3 ‖X - X_k‖_F = 2.46010 sqrt(Σ_{i>k} s_i^2) = 2.46010 ‖X - X_k‖_2 = 0.41268 s_{k+1} = 0.41268
k= 5 ‖X - X_k‖_F = 2.39148 sqrt(Σ_{i>k} s_i^2) = 2.39148 ‖X - X_k‖_2 = 0.40110 s_{k+1} = 0.40110
k=10 ‖X - X_k‖_F = 2.22606 sqrt(Σ_{i>k} s_i^2) = 2.22606 ‖X - X_k‖_2 = 0.37766 s_{k+1} = 0.37766
随机 3 维子空间投影误差: 4.05878
‖样本协方差 - 真实‖_F / ‖真实‖_F = 0.0567
‖PCA 因子模型 - 真实‖_F / ‖真实‖_F = 0.0531
真实载荷空间与前 3 个 PC 的主角余弦: [0.9996 0.9986 0.9906]
读法:
- \(\sigma_i^2/(T-1)\) 与样本协方差的特征值逐位相同,第一右奇异向量与第一特征向量完全重合(只可能差符号)。PCA 不必形成协方差矩阵。
- 前 3 个主成分解释了约 65% 的方差,第 4 个起骤降到 1% 左右并且彼此接近——这是"信号特征值"与"噪声特征值"的分界,和真实的 3 因子结构吻合。
- Eckart–Young 的两个等式(Frobenius 与谱范数)逐行精确成立;随机选一个 3 维子空间投影,误差 4.06 远大于 SVD 截断的 2.46。
- 3 因子统计模型(\(WΛW^T\) + 对角特质方差)比原始样本协方差更接近真实协方差,且只需估计 \(3N+N\) 个参数而不是 \(N(N+1)/2\) 个。主角余弦接近 1,说明 PCA 找回了真实的因子子空间(但不一定是真实因子本身,因子只在旋转意义下可识别)。
实战 2:伪逆、条件数与最小方差组合的稳定化
场景 1:因子回归中出现严格共线(比如一个因子是另两个之和)或近似共线。场景 2:股票数接近样本长度时,样本协方差病态,最小方差组合失控。
import numpy as np
rng = np.random.default_rng(5)
# ---------- 1. 伪逆:秩亏回归的最小范数解 ----------
T = 300
f1 = rng.normal(size=T); f2 = rng.normal(size=T)
X = np.column_stack([f1, f2, f1 + f2]) # 第 3 列 = 前两列之和:严格秩亏
y = 0.8 * f1 - 0.5 * f2 + rng.normal(0, 0.3, T)
U, s, Vt = np.linalg.svd(X, full_matrices=False)
print("奇异值:", s.round(10))
tol = s[0] * max(X.shape) * np.finfo(float).eps
s_inv = np.where(s > tol, 1 / s, 0.0)
X_pinv = (Vt.T * s_inv) @ U.T # X^+ = V Σ^+ U^T
b_min = X_pinv @ y
print("最小范数解 β⁺ =", b_min.round(4), " ‖β⁺‖ = %.4f" % np.linalg.norm(b_min))
print("与 np.linalg.pinv 一致:", np.allclose(X_pinv, np.linalg.pinv(X)))
# 任何 β⁺ + t·(1,1,-1) 拟合值相同,但范数更大
null = Vt[-1]
print("零空间方向 ∝", (null / null[0]).round(4))
for t in [0.5, -1.0]:
b = b_min + t * null
print(" t=%+.1f 拟合残差 %.6f ‖β‖ = %.4f" % (t, np.linalg.norm(y - X @ b), np.linalg.norm(b)))
# 四个 Penrose 条件
P = X_pinv
print("Penrose 条件:", np.allclose(X @ P @ X, X), np.allclose(P @ X @ P, P),
np.allclose((X @ P).T, X @ P), np.allclose((P @ X).T, P @ X))
# ---------- 2. 条件数:κ(X^T X) = κ(X)^2;岭回归 = 奇异值滤波 ----------
Xc = np.column_stack([f1, f2, f1 + f2 + 1e-3 * rng.normal(size=T)]) # 近秩亏
s_c = np.linalg.svd(Xc, compute_uv=False)
print("\nκ(X) = %.3e κ(X^T X) = %.3e κ(X)^2 = %.3e"
% (s_c[0] / s_c[-1], np.linalg.cond(Xc.T @ Xc), (s_c[0] / s_c[-1]) ** 2))
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)
uy = U.T @ y
for name, filt in [("OLS", np.ones(3)),
("截断 SVD (k=2)", np.array([1, 1, 0.0])),
("岭 λ=1", s ** 2 / (s ** 2 + 1.0))]:
beta = Vt.T @ (filt * uy / s)
print("%-16s 滤波因子 %s β = %s" % (name, filt.round(4), beta.round(3)))
# ---------- 3. 最小方差组合:协方差病态 → 权重不稳定;特征值裁剪 ----------
N, Tw = 100, 120 # 100 只股票,只有 120 天
beta_m = rng.uniform(0.6, 1.4, N)
Sig_true = 0.012 ** 2 * np.outer(beta_m, beta_m) + 0.02 ** 2 * np.eye(N)
Lc = np.linalg.cholesky(Sig_true)
def min_var_w(S):
x = np.linalg.solve(S, np.ones(len(S)))
return x / x.sum()
def clip(S, T_obs):
lam, V = np.linalg.eigh(S)
lam_plus = np.mean(np.diag(S)) * (1 + np.sqrt(S.shape[0] / T_obs)) ** 2 # MP 上界(粗略)
noise = lam < lam_plus
lam2 = lam.copy(); lam2[noise] = lam[noise].mean() # 噪声特征值取平均,保持迹
return (V * lam2) @ V.T
w_true = min_var_w(Sig_true)
print("\n真实协方差 κ = %.1f" % np.linalg.cond(Sig_true))
res = {"样本": [], "裁剪": []}
for rep in range(20):
Rw = rng.normal(size=(Tw, N)) @ Lc.T
S = np.cov(Rw.T)
for name, Sh in [("样本", S), ("裁剪", clip(S, Tw))]:
w = min_var_w(Sh)
res[name].append((np.linalg.cond(Sh), np.sqrt(w @ Sig_true @ w), np.abs(w).sum()))
print("真实最优组合年化波动 %.4f" % (np.sqrt(w_true @ Sig_true @ w_true) * np.sqrt(252)))
for name, v in res.items():
v = np.array(v)
print("%s协方差:平均 κ = %8.1f 样本外年化波动 = %.4f 总杠杆 Σ|w| = %.2f"
% (name, v[:, 0].mean(), v[:, 1].mean() * np.sqrt(252), v[:, 2].mean()))
关键输出:
奇异值: [29.68335312 16.69328519 0. ]
最小范数解 β⁺ = [ 0.6865 -0.5909 0.0956] ‖β⁺‖ = 0.9109
与 np.linalg.pinv 一致: True
零空间方向 ∝ [ 1. 1. -1.]
t=+0.5 拟合残差 5.368254 ‖β‖ = 1.0391
t=-1.0 拟合残差 5.368254 ‖β‖ = 1.3526
Penrose 条件: True True True True
κ(X) = 3.206e+03 κ(X^T X) = 1.028e+07 κ(X)^2 = 1.028e+07
OLS 滤波因子 [1. 1. 1.] β = [ 3.964 2.687 -3.182]
截断 SVD (k=2) 滤波因子 [1. 1. 0.] β = [ 0.687 -0.591 0.096]
岭 λ=1 滤波因子 [9.989e-01 9.964e-01 1.000e-04] β = [ 0.684 -0.588 0.095]
真实协方差 κ = 40.4
真实最优组合年化波动 0.1256
样本协方差:平均 κ = 4756.7 样本外年化波动 = 0.3085 总杠杆 Σ|w| = 7.43
裁剪协方差:平均 κ = 41.0 样本外年化波动 = 0.1414 总杠杆 Σ|w| = 2.36
读法:
- 严格共线时第三个奇异值为 0,\(X^TX\) 不可逆,
solve会失败;伪逆给出最小范数解。沿零空间方向 \((1,1,-1)\) 移动,拟合残差一模一样,但系数范数变大——数据无法区分这些解,伪逆选了"最朴素"的那个。最小范数解 \((0.69,-0.59,0.10)\) 换算回去:\(f_1\) 的总暴露 \(0.69+0.10=0.78\)、\(f_2\) 的总暴露 \(-0.59+0.10=-0.49\),与真实值 \((0.8,-0.5)\) 一致。 - 近似共线时 \(\kappa(X^TX)=\kappa(X)^2\) 精确成立。OLS 的系数 \((3.96,2.69,-3.18)\) 是被 \(1/\sigma_3\) 放大的噪声;截断 SVD 与岭回归的滤波因子在第三个方向上几乎为 0,系数恢复合理。岭回归的 \(\lambda=1\) 相对于 \(\sigma_1^2\approx900\) 很小,几乎不影响前两个方向。
- 100 只股票、120 天:样本协方差条件数约 4700(真实值 40),最小方差组合的样本外波动 30.9%,是真实最优的 2.5 倍,总杠杆 7.4 倍——典型的"误差最大化"。把 Marchenko–Pastur 上界以下的特征值替换为它们的平均值后,条件数回到 41,样本外波动 14.1%,杠杆 2.4。这里的 MP 上界用平均方差做了粗略缩放,随机矩阵理论下更细致的去噪方法属于量化实务内容,可参看第 11 册。
实战 3:PCA 在不同窗口之间的对齐:翻号、旋转、主角与 Procrustes
场景:滚动窗口做 PCA,想比较本期与上期的因子载荷。真实结构中第 2、3 个因子方差几乎相同(对应特征值接近)。
import numpy as np
from scipy.linalg import subspace_angles, orthogonal_procrustes
rng = np.random.default_rng(11)
N, T = 40, 500
B = rng.normal(size=(N, 3))
B[:, 0] = np.abs(B[:, 0]) + 1.0
Qb, _ = np.linalg.qr(B[:, 1:]) # 让因子 2、3 的载荷正交且等长
B[:, 1:] = Qb * np.sqrt(N)
# 因子 2、3 的波动几乎相同:PC2、PC3 的特征值接近,单个特征向量不稳定
fac_sd = np.array([0.02, 0.0072, 0.0070])
def window():
f = rng.normal(size=(T, 3)) * fac_sd
R = f @ B.T + rng.normal(0, 0.01, (T, N))
X = R - R.mean(0)
U, s, Vt = np.linalg.svd(X, full_matrices=False)
return s[:4] ** 2 / (T - 1), Vt[:3].T # 前 3 个 PC 载荷(N x 3)
lam1, V1 = window()
lam2, V2 = window()
print("窗口 1 特征值:", lam1.round(6))
print("窗口 2 特征值:", lam2.round(6))
# ---------- 1. 单个特征向量的比较:符号与旋转 ----------
print("\n逐列 V1_i · V2_i:", np.array([V1[:, i] @ V2[:, i] for i in range(3)]).round(3))
M = V1.T @ V2
print("V1^T V2 =\n", M.round(3))
# ---------- 2. 子空间的比较:主角 = V1^T V2 的奇异值(CS 分解的余弦) ----------
cosines = np.linalg.svd(M, compute_uv=False)
print("\n前 3 个 PC 子空间主角余弦:", cosines.round(4))
print("主角(度):", np.degrees(np.arccos(np.clip(cosines, -1, 1))).round(2),
" scipy:", np.degrees(subspace_angles(V1, V2))[::-1].round(2))
c23 = np.linalg.svd(V1[:, 1:].T @ V2[:, 1:], compute_uv=False)
print("PC2-PC3 二维子空间主角余弦:", c23.round(4))
# ---------- 3. 正交 Procrustes 对齐:min ‖V2 Q - V1‖_F,Q = 极分解因子 ----------
Uo, so, Wt = np.linalg.svd(V2.T @ V1)
Qp = Uo @ Wt
Qs, _ = orthogonal_procrustes(V2, V1)
print("\nProcrustes 旋转 Q =\n", Qp.round(3))
print("与 scipy 一致:", np.allclose(Qp, Qs))
print("对齐前 ‖V2 - V1‖_F = %.3f,只翻符号后 = %.3f,Procrustes 对齐后 = %.3f"
% (np.linalg.norm(V2 - V1), np.linalg.norm(V2 * np.sign(np.diag(M)) - V1), np.linalg.norm(V2 @ Qp - V1)))
# ---------- 4. CS 分解的数值验证:酉矩阵的 2x2 分块 ----------
p, q = 3, 5
Uu, _ = np.linalg.qr(rng.normal(size=(p + q, p + q)))
s11 = np.linalg.svd(Uu[:p, :p], compute_uv=False)
s12 = np.linalg.svd(Uu[:p, p:], compute_uv=False)
s21 = np.linalg.svd(Uu[p:, :p], compute_uv=False)
print("\nσ(U11) =", s11.round(4))
print("sqrt(1-σ(U11)^2) =", np.sqrt(1 - s11[::-1] ** 2).round(4))
print("σ(U12) =", s12.round(4), " σ(U21) =", s21.round(4))
关键输出:
窗口 1 特征值: [0.064149 0.002068 0.00191 0.00015 ]
窗口 2 特征值: [0.058279 0.002332 0.001949 0.00016 ]
逐列 V1_i · V2_i: [-1. 0.93 -0.929]
V1^T V2 =
[[-1. 0.02 0.013]
[ 0.024 0.93 0.358]
[-0.004 0.358 -0.929]]
前 3 个 PC 子空间主角余弦: [0.9999 0.9972 0.9956]
主角(度): [0.81 4.3 5.37] scipy: [0.81 4.3 5.37]
PC2-PC3 二维子空间主角余弦: [0.997 0.9956]
Procrustes 旋转 Q =
[[-1. 0.024 -0.004]
[ 0.021 0.933 0.36 ]
[ 0.013 0.359 -0.933]]
与 scipy 一致: True
对齐前 ‖V2 - V1‖_F = 2.828,只翻符号后 = 0.531,Procrustes 对齐后 = 0.121
σ(U11) = [0.9573 0.6746 0.2073]
sqrt(1-σ(U11)^2) = [0.9783 0.7382 0.289 ]
σ(U12) = [0.9783 0.7382 0.289 ] σ(U21) = [0.9783 0.7382 0.289 ]
读法:
- 两个窗口的数据生成机制完全相同。PC1(市场)在两个窗口之间只是整体翻号(内积 \(-1.00\)),这是 Autonne 定理允许的 \(\pm1\) 自由度,不代表任何变化。
- PC2、PC3 的特征值很接近(0.00207 与 0.00191),对应特征向量在两者张成的平面内转了约 21°(\(\cos^{-1}0.93\)):单看 PC2 会以为"第二因子的结构变了",其实只是近重特征值下的旋转自由度被噪声"选中"了不同的角度。
- 正确的比较对象是子空间:前 3 个 PC 子空间的主角只有 0.8°、4.3°、5.4°(余弦就是 \(V_1^TV_2\) 的奇异值,与
scipy.linalg.subspace_angles一致),PC2–PC3 平面本身也很稳定。监控风险模型漂移时,用 \(\sin\theta_{\max}\) 或 \(\sum\sin^2\theta_i\) 比逐个比较载荷可靠得多。 - 只翻符号只能把差距从 2.83 降到 0.53;正交 Procrustes 问题 \(\min_{Q^TQ=I}\|V_2Q-V_1\|_F\) 的解是 \(V_2^TV_1=PDR^T\) 时 \(Q=PR^T\)(即 \(V_2^TV_1\) 极分解的正交因子),对齐后差距只剩 0.12。滚动 PCA 因子做时间序列(比如构建 PCA 因子收益)之前应当做这一步。
- 随机 \(8\times8\) 正交矩阵按 \(3+5\) 分块,\(U_{12}\)、\(U_{21}\) 的奇异值都等于 \(\sqrt{1-\sigma_i^2(U_{11})}\)(顺序相反),正是 CS 分解中的正弦。
本章小结
正规矩阵(\(AA^*=A^*A\))恰好是能被酉相似对角化的矩阵,等价于有一组标准正交特征向量,也等价于 Schur 不等式取等号;Hermite(实对称)矩阵是正规矩阵中特征值全实的那一类,谱定理 \(\Sigma=Q\Lambda Q^T\) 是协方差矩阵一切分解的出发点。谱分解中特征空间唯一,特征空间内部的基不唯一;交换的正规矩阵可同时酉对角化;实正规矩阵实正交相似于 \(1\times1\) 实块和 \(\begin{bmatrix}a&b\\-b&a\end{bmatrix}\) 块的直和,实正交矩阵就是若干平面旋转加反射。放开到左右两侧独立的酉变换,任何矩阵都有奇异值分解 \(A=V\Sigma W^*\),奇异值是 \(A^*A\) 特征值的平方根,秩等于非零奇异值个数,奇异值连续且对扰动良态;Autonne 定理说明奇异向量只在符号(互异奇异值)或子空间旋转(重复奇异值)意义下唯一,这是 PCA 载荷翻号、旋转的根源。SVD 推出四个核心工具:PCA(收益矩阵的 SVD 等于协方差的特征分解)、Eckart–Young 最优低秩近似(误差 \(\sigma_{k+1}\))、伪逆与最小范数最小二乘、条件数 \(\kappa=\sigma_1/\sigma_n\) 及 \(\kappa(X^TX)=\kappa(X)^2\);截断 SVD 与岭回归都是对奇异值的滤波。CS 分解给出分块酉矩阵的标准形,其余弦与正弦正是两个子空间之间的主角,用于比较不同时期的因子子空间。
| 概念/公式 | 表达式 | 用途 |
|---|---|---|
| 正规 | \(AA^*=A^*A\) | |
| 谱定理 | 正规 \(\iff A=U\Lambda U^*\iff|A|_F^2=\sum\vert \lambda_i\vert ^2\) | |
| 实对称谱分解 | \(\Sigma=Q\Lambda Q^T=\sum\lambda_iq_iq_i^T\) | PCA、风险分解 |
| 二次型界 | \(\lambda_{\min}\le x^*Ax\le\lambda_{\max}\)(\(|x|=1\)) | 组合方差上下界 |
| 风险分解 | \(x^T\Sigma x=\sum\lambda_i(q_i^Tx)^2\) | 特征组合贡献 |
| 交换正规族 | 可同时酉对角化 | |
| 实正交矩阵 | 平面旋转 \(\oplus\) \(\pm1\) | 因子旋转 |
| SVD | \(A=V\Sigma W^*=\sum\sigma_iv_iw_i^*\) | 一切长方矩阵 |
| 奇异值 | \(\sigma_i=\sqrt{\lambda_i(A^*A)}\) | |
| 秩 | \(\operatorname{rank}A=\#\{\sigma_i>0\}\) | 数值秩 |
| Frobenius | \(|A|_F^2=\sum\sigma_i^2\) | 解释方差 |
| Autonne 唯一性 | 同一 \(\sigma\) 的左右奇异向量同时变换 | 翻号、旋转、对齐 |
| Eckart–Young | \(\min_{\operatorname{rank}B\le k}|A-B|_2=\sigma_{k+1}\) | 因子个数、低秩近似 |
| 伪逆 | \(A^+=W\Sigma^+V^*\) | 最小范数最小二乘 |
| 条件数 | \(\kappa_2=\sigma_1/\sigma_n\),\(\kappa(A^*A)=\kappa(A)^2\) | 数值稳定性 |
| 岭滤波 | \(\phi_i=\sigma_i^2/(\sigma_i^2+\lambda)\) | 正则化 |
| CS 分解 | \(U\sim\begin{bmatrix}C&S&0\\-S&C&0\\0&0&I\end{bmatrix}\) | 分块酉矩阵 |
| 主角 | \(\cos\theta_i=\sigma_i(X^*Y)\) | 因子子空间漂移 |
| Procrustes | \(\min|V_2Q-V_1|_F\):\(Q=PR^T\),\(V_2^TV_1=PDR^T\) | 滚动 PCA 对齐 |
练习
基础
- 判断以下矩阵是否正规:\(\begin{bmatrix}1&1\\0&1\end{bmatrix}\),\(\begin{bmatrix}1&i\\i&1\end{bmatrix}\),\(\begin{bmatrix}i&i\\i&-1\end{bmatrix}\),\(\begin{bmatrix}2&-3\\3&2\end{bmatrix}\)。 答案要点:否(上三角非对角);是;否(原书 2.5.P23,复对称不必正规);是(特殊形式实块)。
- 求 \(A=\begin{bmatrix}3&0\\4&5\end{bmatrix}\) 的奇异值,并与特征值比较。 答案要点:\(\operatorname{tr}A^*A=50\),\(|\det A|=15\),\(\sigma^2=25\pm\sqrt{625-225}=25\pm20\),\(\sigma=\sqrt{45},\sqrt5\);特征值 3、5。\(\sigma_1\sigma_2=15=|\lambda_1\lambda_2|\),但 \(\sigma_1>\lambda_{\max}\)。
- 证明:若 \(A\) 实对称,则其奇异值是特征值的绝对值;左右奇异向量在特征值为负时相差一个符号。
- 设相关矩阵 \(C\in M_n\) 的非对角元为 \(\rho_{ij}\)。用 2.5.P60 的散布界证明
\[\max_i|\lambda_i-1|\le\sqrt{\frac{n-1}{n}\sum_{i\ne j}\rho_{ij}^2},\]并验证等相关矩阵 \(\rho_{ij}\equiv\rho>0\) 时等号成立。 提示:\(\operatorname{tr}C=n\),\(\operatorname{tr}C^2=n+\sum_{i\ne j}\rho_{ij}^2\);等相关时右边为 \((n-1)\rho\),而最大特征值为 \(1+(n-1)\rho\)。
- 设 \(X\in\mathbf R^{T\times k}\) 列满秩,\(X=QR\)。证明 \(X^+=R^{-1}Q^T\),并说明它等于 \((X^TX)^{-1}X^T\)。
- 用 SVD 证明:\(H=X(X^TX)^{-1}X^T\)(OLS 帽子矩阵)是正交投影,奇异值是 \(k\) 个 1 和 \(T-k\) 个 0。
进阶
- 证明 Eckart–Young 的 Frobenius 范数版本:对秩不超过 \(k\) 的 \(B\),\(\|A-B\|_F^2\ge\sum_{i>k}\sigma_i^2\)。 提示:用 Weyl 型不等式 \(\sigma_{i+k}(A)\le\sigma_i(A-B)+\sigma_{k+1}(B)=\sigma_i(A-B)\)(原书第 7 章),对 \(i\ge1\) 求平方和。
- 证明正交 Procrustes 问题 \(\min_{Q^TQ=I}\|AQ-B\|_F\) 的解为 \(Q=PR^T\),其中 \(A^TB=PDR^T\) 是 SVD。 提示:\(\|AQ-B\|_F^2=\|A\|_F^2+\|B\|_F^2-2\operatorname{tr}(Q^TA^TB)\),而 \(\operatorname{tr}(Q^TPDR^T)=\operatorname{tr}(R^TQ^TP\,D)\le\sum d_i\),因为正交矩阵 \(R^TQ^TP\) 的对角元绝对值不超过 1。
- 设两个 \(k\) 维子空间的标准正交基为 \(X,Y\)。证明 \(\|XX^T-YY^T\|_2=\sin\theta_{\max}\)。 提示:利用 CS 分解把 \(X,Y\) 同时化到标准位置,问题化为若干个二维平面上两条直线的投影之差,其 2-范数为 \(\sin\theta\)。
- 编程:对实战 1 的数据,取滚动 250 日窗口逐日做 PCA,记录前 3 个 PC 子空间与全样本子空间的最大主角;再把第二、三个因子的波动调成相等,观察 PC2 单独的载荷相关性与子空间主角各自如何变化。
原书推荐习题
- 2.5.P1、P8:正规性的等价刻画(\(\|Ax\|=\|A^*x\|\);Hermite 部与斜 Hermite 部交换)。
- 2.5.P26:正规 ⇔ \(A^*\) 是 \(A\) 的多项式(并由此证 Fuglede–Putnam)。
- 2.5.P51:正规矩阵的数值域等于特征值凸包。
- 2.5.P60–P61:特征值散布上界(可用于估计相关矩阵最大、最小特征值之差)。
- 2.6.P10:\(A^*A=B^*B\iff B=UA\)。
- 2.6.P15:Schur 不等式的奇异值形式与正规性。
- 2.6.P19:酉矩阵分块的奇异值关系(CS 分解的前奏)。
- 2.6.P31:Jordan–Wielandt 矩阵技巧。
- 2.7.P1–P3:压缩与酉膨胀。
原书对照
| 本章小节 | 原书小节 | 书页 | PDF 页 |
|---|---|---|---|
| 2.8–2.9 正规矩阵与谱定理 | 2.5 Normal matrices(正文 p.131–141,习题 p.141–147,注记至 p.149) | 131–149 | 151–169 |
| 2.10 奇异值分解 | 2.6 Unitary equivalence and the singular value decomposition(习题 p.154–157) | 149–159 | 169–179 |
| 2.11 SVD 的四大应用 | 补充内容;原书在第 5 章(条件数)、第 7 章(低秩近似、极分解)展开 | — | — |
| 2.12 CS 分解与子空间夹角 | 2.7 The CS decomposition(含习题) | 159–162 | 179–182 |
第 2 章到此结束。第 3 章换一个方向:不再要求变换矩阵是酉的,而是问"一般相似变换下最简单的形式是什么",答案是 Jordan 标准形;并研究 LU 等三角分解。