base:
- 协方差的数字定义转换为向量的定义
1. 问题定义
假设它们都是均值为零的向量,并且有协方差矩阵:
Σ=(ΣXXΣYXΣXYΣYY)
总体协方差的表示
注意看XY表示了什么

其中:
- ΣXX=Cov(X,X)∈Rp×p
- ΣYY=Cov(Y,Y)∈Rq×q
- ΣXY=Cov(X,Y)∈Rp×q
- ΣYX=ΣXY⊤
我们要找到向量 a∈Rp 和 b∈Rq,使得:
U=a⊤X,V=b⊤Y
之间的相关系数最大化:
ρ=a,bmaxa⊤ΣXXab⊤ΣYYba⊤ΣXYb
2. 转化为广义特征值问题
我们先约束: 为什么要这么CCA约束? 是因为约束为1后恰好协方差等于相关性
这样目标函数变成:
a,bmaxa⊤ΣXYb
ΣXYb−λXΣXXa=0⇒ΣXX−1ΣXYb=λXa
对 b 求偏导:
ΣYXa−λYΣYYb=0⇒ΣYY−1ΣYXa=λYb
把第二个式子代入第一个:
ΣXX−1ΣXYΣYY−1ΣYXa=λXλYa
注意 **先记住这个推导 $\lambda_X \lambda_Y = \rho^2$**, 。于是得到广义特征值问题:
ΣXX−1ΣXYΣYY−1ΣYXa=ρ2a
同理:
ΣYY−1ΣYXΣXX−1ΣXYb=ρ2b
- 从而计算特征值和特征向量,特征向量为所求
- 最大的 ρ 对应 第一对 (a1,b1)
- 次大的 ρ 对应 第二对 (a2,b2),并且满足 U2⊥U1 和 V2⊥V1
3. 用 SVD 求解(更数值稳定)
先做白化(whitening):
Σ~XX=ΣXX−1/2,Σ~YY=ΣYY−1/2
构造矩阵:
K=Σ~XXΣXYΣ~YY
对 K 做 SVD:
K=PΛQ⊤
其中:
- Λ=diag(ρ1,ρ2,…) = 典型相关系数
- P,Q 分别是左、右奇异向量
回到原坐标:
ak=ΣXX−1/2P⋅k,bk=ΣYY−1/2Q⋅k
于是:
Uk=ak⊤X,Vk=bk⊤Y
4. 载荷(Canonical Loadings)
载荷定义为原始变量和典型变量的相关系数:
loadingX(k)=corr(X,Uk)=σUkΣXXak
因为 σUk=ak⊤ΣXXak=1(标准化约束),所以:
loadingX(k)=ΣXXak
同理:
loadingY(k)=ΣYYbk
如果你要 cross-loadings(交叉载荷):
cross-loadingX(k)=corr(X,Vk)=σVkΣXYbk
5. 第一对和第二对 (U,V) 的关系
-
第一对 (U1,V1) 来自最大奇异值 ρ1 对应的奇异向量
-
第二对 (U2,V2) 来自第二大奇异值 ρ2 对应的奇异向量,且它们与第一对正交:
Cov(U1,U2)=0,Cov(V1,V2)=0
1) 用广义特征值法能否直接得到 (U,V) 与载荷?
结论:可以,但要注意规范化步骤以及两组系数之间的关系。
设
U=a⊤X,V=b⊤Y,
Σ=(ΣXXΣYXΣXYΣYY).
标准做法是在约束
a⊤ΣXXa=1,b⊤ΣYYb=1
下最大化 corr(U,V)。拉格朗日法得到广义特征值问题:
ΣXX−1ΣXYΣYY−1ΣYXa=ρ2a,
ΣYY−1ΣYXΣXX−1ΣXYb=ρ2b.
最大的 ρ=ρ1 给出第一对 (a1,b1),次大 ρ2 给出第二对,依此类推(且满足 ai⊤ΣXXaj=0, bi⊤ΣYYbj=0 对 i=j)。
计算流程(特征值路线):
-
解上式得到按降序排列的特征对 (ρk2,ak)。
-
由关系式 ΣYXak=ρkΣYYbk 可得
bk=ρk−1ΣYY−1ΣYXak.
-
对 ak,bk 做规范化,使
ak⊤ΣXXak=1, bk⊤ΣYYbk=1。
-
得到典型变量 Uk=ak⊤X, Vk=bk⊤Y。
载荷(canonical loadings)——原变量与典型变量的相关:
loadingX(k)=corr(X,Uk)=ak⊤ΣXXakΣXXak=ΣXXak(因已规范化为 1),
loadingY(k)=corr(Y,Vk)=ΣYYbk.
交叉载荷(cross-loadings):
corr(X,Vk)=bk⊤ΣYYbkΣXYbk=ΣXYbk,corr(Y,Uk)=ΣYXak.
小结:解广义特征值 → 得 ak(再算 bk 与规范化)→ 直接用上面几式算载荷。
2) SVD 法每一步到底在做什么(详细)
SVD 路线的核心思想是**白化(whitening)**两边变量,使问题化为普通的奇异值分解。
Step A:对白化矩阵
对称正定矩阵可做特征分解:
ΣXX=PXΛXPX⊤,ΣYY=PYΛYPY⊤,ΛX,ΛY>0.
定义
ΣXX−1/2=PXΛX−1/2PX⊤,ΣYY−1/2=PYΛY−1/2PY⊤.
这两个矩阵把 X,Y 映到单位协方差空间(白化)。
Step B:构造被白化的互协方差
K=ΣXX−1/2ΣXYΣYY−1/2.
直观上,K 是“白化后的 X 与白化后的 Y 的互协方差/相关”矩阵。
Step C:对 K 做 SVD
K=PΛQ⊤,Λ=diag(ρ1,ρ2,…),ρ1≥ρ2≥⋯≥0.
这里每个 ρk 就是第 k 个典型相关系数,而 P,Q 的列向量是白化空间中的方向。
Step D:回到原坐标得到权向量
ak=ΣXX−1/2P⋅k,bk=ΣYY−1/2Q⋅k.
可直接验证规范化与相关性:
ak⊤ΣXXak=(P⋅k)⊤P⋅k=1,bk⊤ΣYYbk=1,
corr(Uk,Vk)=(⋅)(⋅)ak⊤ΣXYbk=P⋅k⊤K(ΣXX−1/2ΣXYΣYY−1/2)Q⋅k=ρk.
Step E:直接写出载荷(更直观的形式)
因已规范化,载荷就是协方差向量:
loadingX(k)=ΣXXak=ΣXX(ΣXX−1/2P⋅k)=ΣXX1/2P⋅k,
loadingY(k)=ΣYYbk=ΣYY1/2Q⋅k.
交叉载荷有个非常好记的关系:
ΣXYbk=ΣXX1/2K(ΣXX−1/2ΣXYΣYY−1/2)Q⋅k=ΣXX1/2ρkP⋅k=ρkloadingX(k),
同理 ΣYXak=ρkloadingY(k)。
这说明交叉载荷 = 典型相关 × 本组载荷。
Step F:第二对、第三对 …
SVD 一次就给出所有 (ρk,P⋅k,Q⋅k)。
于是
Uk=ak⊤X,Vk=bk⊤Y
天然两两正交(在 ΣXX、ΣYY 度量下),且相关系数依次为 ρk。
实务小贴士
- 用样本矩阵时,把 Σ 换成样本协方差 S(或相关矩阵),流程相同。
- 若 SXX 或 SYY 近奇异/不可逆,常用 正则化(如 SXX+λI)或直接用数据矩阵做 SVD 的实现(更稳健)。
- 规范化与符号:(ak,bk) 的符号可同时取反,不影响 ρk。载荷与得分的符号也相应变号。
一页式流程(SVD实现)
- 计算 SXX,SYY,SXY(中心化后)。
- 求 SXX−1/2,SYY−1/2(用特征分解)。
- K=SXX−1/2SXYSYY−1/2。
- 对 K 做 SVD:K=PΛQ⊤。
- ak=SXX−1/2P⋅k, bk=SYY−1/2Q⋅k;
Uk=ak⊤X, Vk=bk⊤Y。
- 载荷:LX(k)=SXXak=SXX1/2P⋅k,
LY(k)=SYYbk=SYY1/2Q⋅k;
交叉载荷:SXYbk=ρkLX(k),SYXak=ρkLY(k)。
这样两条路线(广义特征值、SVD)就完全打通了;你既能从广义特征值直接得到 (U,V) 与载荷,也能用更稳健的 SVD 步骤一步步算清楚每个量的来源。