Canonical Correlation Analysis(CCA)典型相关分析也是一种常用的降维算法。我们知道,PCA(Principal Component Analysis) 主分量分析将数据从高维映射到低维空间同时,保证了数据的分散性尽可能地大, 也就是数据的方差或者协方差尽可能大。而LDA(Linear Discriminant Analysis) 线性判别分析则利用了类标签,利用一种监督学习的方法,将数据从高维空间映射到低维空间时,让不同类的数据尽可能地分开而同一类的数据尽可能地聚合。
但是,有的时候,我们想探讨多个线性空间之间的相关性。比如有的时候我们会从图像中提取各种特征,每一种特征都可以构成一个线性空间,为了分析这些空间之间的相关性,我们可以利用CCA 来做分析。
假设我们有两个特征空间,S1=x1∈Rd1, S2=x2∈Rd2, 我们可以将两个特征向量合并。
x=(x1x2)E(x)=(μ1μ2)Σ=(Σ11Σ21Σ12Σ22)
可以看到,Σ12=ΣT21,Σ 称为协方差矩阵。我们引入投影向量 a, b, 假设投影之后的变量满足:
u=aTx1v=bTx2
可以进一步算出 u,v 的方差和协方差:
var(u)=aTΣ11a,var(v)=bTΣ2b,cov(u,v)=aTΣ12b
可以计算出 u,v 的相关系数:
Corr(u,v)=cov(u,v)var(u)−−−−−√var(v)−−−−−√
将u,v的表达式代入,可以得到:
Corr(u,v)=aTΣ12baTΣ11a−−−−−−√bTΣ22b−−−−−−−√
我们的目标是让相关系数Corr(u,v) 尽可能地大。为了求解a,b, 可以固定分母而让分子最大化,所以上面的函数可以变成:
maxa,baTΣ12b
s.t.aTΣ11a=1,bTΣ22b=1
构造拉格朗日等式:
L=aTΣ12b−λ12(aTΣ11a−1)−λ22(bTΣ22b−1)
L 分别对a,b 求导,可以得到:
∂L∂a=Σ12b−λ1Σ11a=0
∂L∂b=Σ21a−λ2Σ22b=0
根据约束条件,可以得到:
λ1=λ2=aTΣ12b
所以只要求出 λ1 或者 λ2 就可以得到最大的相关系数。令 λ=λ1=λ2.
通过上面的偏导数,我们可以得到:
Σ−111Σ12b=λa
Σ−122Σ21a=λb
写成矩阵形式:
(Σ−11100Σ−122)(0Σ21Σ120)(ab)=λ(ab)
令:
B=(Σ1100Σ22),A=(0Σ21Σ120)w=(ab)
,
那么,上式可以表示成:
B−1Aw=λw
所以,λ 和 w 就是B−1A 的特征值和特征向量。我们可以求出 B−1A 的特征值和特征向量,然后利用特征向量将原来的特征
x1,x2做映射。对应特征值 λ 的求解,可以有更简单的方法,从上面的偏导数,我们可以得到如下等式:
Σ−111Σ12Σ−122Σ21a=λ2a
我们可以利用上面的表达式求出 λ 和 a,然后再待会上面的偏导数等式求出 b.
λ 就是 u,v的相关系数,u,v 就是一对典型变量(canonical variables)。按照 B−1A 的特征值从大到小排列,可以求出一系列的典型变量。特征值越大,说明典型变量的相关性越强。
参考来源:
http://www.cnblogs.com/jerrylead/archive/2011/06/20/2085491.html
https://en.wikipedia.org/wiki/Canonical_correlation