典型关联分析CCA

时间:2021-04-04 16:55:22

前言

整理了其他人写的一些关于CCA的总结,写的真的很详细。
详见:CCA资料
刘建平_CCA总结
Jerrylead_CCA
在实际问题中,需要研究多个变量之间的相关关系,此时,可以应用典型相关分析(Canonical Correlation Analysis)。这个算法由H.Hotelling于1936年提出,在1970年代趋于成熟。早期由于需要大量的矩阵运算所以没有广泛应用。现代计算机提高了CCA的地位。

比如,我们拿到了两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据,那么我们可以利用CCA来分析这两组数据是否相关。

CCA概述

在数理统计中,假设有两组一维的数据集X和Y,则相关系数
ρ(X,Y)=corrX,Y=cov(X,YD(X)D(Y)
其中cov(X,Y)是X和Y的协方差,而D(X),D(Y)分别是X和Y的方差。相关系数ρ的取值为[-1,1], ρ的绝对值越接近于1,则X和Y的线性相关性越高。越接近于0,则X和Y的线性相关性越低。

虽然相关系数可以很好的帮我们分析一维数据的相关性,但是对于高维数据就不能直接使用了。拿上面我们提到的,如果X是包括人身高和体重两个维度的数据,而Y是包括跑步能力和跳远能力两个维度的数据,就不能直接使用相关系数的方法。那我们能不能变通一下呢?CCA给了我们变通的方法。

CCA使用的方法是将多维的X和Y都用线性变换为1维的X’和Y’,然后再使用相关系数来看X’和Y’的相关性。将数据从多维变到1位,也可以理解为CCA是在进行降维,将高维数据降到1维,然后再用相关系数进行相关性的分析。下面我们看看CCA的算法思想。
    

CCA算法思想

我们知道,两个随机变量x、y之间的线性关系可以通过对这两个变量的N组样本对进行线性回归求得。但是,如果要求两组随机变量x、y之间的线性关系,则可以用典型关联分析(Canonical correlation analysis)来求解。CCA是寻找两组变量对应的两个线性变换 wx,wy (分别和x,y的维数相等),使得通过线性变换后的两个组合变量(即 wTxx,wTyy )之间的相关系数最大。
典型关联分析CCA

现在我们具体来讨论下CCA的算法思想。假设我们的数据集是X和Y,X为 m×n1 的样本矩阵。Y为 m×n2 的样本矩阵.其中m为样本个数,而 n1,n2 分别为X和Y的特征维度。

对于X矩阵,我们将其投影到1维,或者说进行线性表示,对应的投影向量或者说线性系数向量为 a ;对于Y矩阵,我们将其投影到1维,或者说进行线性表示,对应的投影向量或者说线性系数向量为 b , 这样X ,Y投影后得到的一维向量分别为X’,Y’。我们有 X=aTX,Y=bTY

我们CCA的优化目标是最大化 ρ(X,Y) 得到对应的投影向量 a,b ,即 argmaxa,bcov(X,Y)D(X)D(Y)
在投影前,我们一般会把原始数据进行标准化,得到均值为0而方差为1的数据X和Y。这样我们有:
cov(X,Y)=cov(aTX,bTY)=E(aTX,bTY)=E((aTX)(bTY)T)=aTE(XYT)b D(X)=D(aTX)=aTE(XXT)a D(Y)=D(bTY)=bTE(YYT)b

由于我们的X,Y的均值均为0,则 D(X)=cov(X,X)=E(XXT),D(Y)=cov(Y,Y)=E(YYT) cov(X,Y)=E(XYT),cov(Y,X)=E(YXT)

SXY=cov(X,Y) ,则优化目标可以转化为: argmaxa,baTSXYbaTSXXabTSYYb

由于分子分母增大相同的倍数,优化目标结果不变,我们可以采用和SVM类似的优化方法,固定分母,优化分子,具体的转化为: argmaxa,baTSXYb s.t.aTSXXa=1,bTSYYb=1

也就是说,我们的CCA算法的目标最终转化为一个凸优化过程,只要我们求出了这个优化目标的最大值,就是我们前面提到的多维X和Y的相关性度量,而对应的 a,b 则为降维时的投影向量,或者说线性系数。

这个函数优化一般有两种方法,第一种是奇异值分解SVD,第二种是特征分解,两者得到的结果一样。

CCA算法的SVD求解

对于上面的优化目标,我们可以做一次矩阵标准化,就可以用SVD来求解了。
首先,我们令 a=S1/2XXu,b=S1/2YYv ,这样我们有: aTSXXa=1uTS1/2XXSXXS1/2XXu=1uTu=1 bTSYYb=1vTS1/2YYSYYS1/2YYv=1vTv=1 aTSXYb=uTS1/2XXSXYS1/2YYv
也就是说,我们的优化目标变成下式: argmaxu,vuTS1/2XXSXYS1/2YYv s.t.uTu=1,vTv=1  

仔细一看,如果将u和v看做矩阵 M=S1/2XXSXYS1/2YY 的某一个奇异值对应的左右奇异向量。那么利用奇异值分解,我们可以得到 M=UΣVT ,其中 U,V 分别为M的左奇异向量和右奇异向量组成的矩阵,而 Σ 为M的奇异值组成的对角矩阵。由于 U,V 所有的列都为标准正交基,则 uTU VTv 得到一个只有一个标量值为1,其余标量值为0的向量。此时我们有 uTS1/2XXSXYS1/2YYv=uTUΣVTv=σuv

也就是说我们最大化 uTS1/2XXSXYS1/2YYv ,其实对应的最大值就是某一组左右奇异向量所对应的奇异值的最大值。也就是将M做了奇异值分解后,最大的奇异值就是我们优化目标的最大值,或者说我们的X和Y之间的最大相关系数。利用对应的左右奇异向量 u,v 我们也可以求出我们原始的X和Y的线性系数 a=S1/2XXu,b=S1/2YYv

可以看出,SVD的求解方式非常简洁方便。但是如果不熟悉SVD的话,也可以用传统的拉格朗日函数加上特征分解来完成这个函数的优化。

CCA算法的特征分解求解

特征分解方式就比较传统了,利用拉格朗日函数,优化目标转化为最大化下式: J(a,b)=aTSXYbλ2(aTSXXa1)θ2(bTSYYb1)

分别对 a,b 求导并令结果为0,我们得到: SXYbλSXXa=0 SYXaλSYYb=0
将上面第一个式子左乘 aT ,第二个式子左乘 bT ,并利用 aTSXXa=1,bTSYYb=1 ,我们得到 λ=θ=aTSXYb
其实也就是说我们的拉格朗日系数就是我们要优化的目标。我们继续将上面的两个式子做整理,第一个式子左乘 S1XX ,第二个式子左乘 S1YY ,我们得到: S1XXSXYb=λa S1YYSYXa=λb
将上面第二个式子带入第一个式子,我们得到 S1XXSXYS1YYSYXa=λ2a
这个式子我们就熟悉了,这不就是特征分解吗!要求最大的相关系数 λ ,我们只需要对矩阵 N=S1XXSXYS1YYSYX 做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为X的线性系数 a

同样的办法,我们将上面第一个式子带入第二个式子,我们得到 S1YYSYXS1XXSXYb=λ2b ,只需要对矩阵 N=S1YYSYXS1XXSXY 做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为Y的线性系数 b

可以看出特征分解的方法要比SVD复杂,但是两者求得的结果其实是等价的,只要利用SVD和特征分解之间的关系就很容易发现两者最后的结果相同。

CCA算法流程

这里我们对CCA的算法流程做一个总结,以SVD方法为准。

输入:各为m个的样本X和Y,X和Y的维度都大于1 输出:X,Y的相关系数 ρ ,X和Y的线性系数向量a和b
    1)计算X的方差 SXX , Y的方差 SYY ,X和Y的协方差 SXY ,Y和X的协方差 SYX=STXY
    2) 计算矩阵 M=S1/2XXSXYS1/2YY
    3)对矩阵 M 进行奇异值分解,得到最大的奇异值 ρ ,和最大奇异值对应的左右奇异向量 u,v
    4) 计算X和Y的线性系数向量a和b, a=S1/2XXu,b=S1/2YYv

小结

CCA算法广泛的应用于数据相关度的分析,同时还是偏最小二乘法的基础。但是由于它依赖于数据的线性表示,当我们的数据无法线性表示时,CCA就无法使用,此时我们可以利用核函数的思想,将数据映射到高维后,再利用CCA的思想降维到1维,求对应的相关系数和线性关系,这个算法一般称为KCCA。
   此外,我们在算法里只找了相关度最大的奇异值或者特征值,作为数据的相关系数,实际上我们也可以像PCA一样找出第二大奇异值,第三大奇异值,。。。得到第二相关系数和第三相关系数。然后对数据做进一步的相关性分析。但是一般的应用来说,找出第一相关系数就可以了。
   有时候我们的矩阵 SXX,SYY 不可逆,此时我们得不到对应的逆矩阵,一般遇到这种情况可以对 SXX,SYY 进行正则化,将 SXX,SYY 变化为 SXX+γI,SYY+γI ,然后继续求逆。其中 γ 为正则化系数。

典型关联分析CCA

典型关联分析CCA