首页 > 代码库 > 【转载】典型关联分析(Canonical Correlation Analysis)
【转载】典型关联分析(Canonical Correlation Analysis)
典型关联分析(Canonical Correlation Analysis)
[pdf版本] 典型相关分析.pdf
1. 问题
在线性回归中,我们使用直线来拟合样本点,寻找n维特征向量X和输出结果(或者叫做label)Y之间的线性关系。其中,。然而当Y也是多维时,或者说Y也有多个特征时,我们希望分析出X和Y的关系。
当然我们仍然可以使用回归的方法来分析,做法如下:
假设,,那么可以建立等式Y=AX如下
其中,形式和线性回归一样,需要训练m次得到m个。
这样做的一个缺点是,Y中的每个特征都与X的所有特征关联,Y中的特征之间没有什么联系。
我们想换一种思路来看这个问题,如果将X和Y都看成整体,考察这两个整体之间的关系。我们将整体表示成X和Y各自特征间的线性组合,也就是考察和之间的关系。
这样的应用其实很多,举个简单的例子。我们想考察一个人解题能力X(解题速度,解题正确率)与他/她的阅读能力Y(阅读速度,理解程度)之间的关系,那么形式化为:
和
然后使用Pearson相关系数
来度量u和v的关系,我们期望寻求一组最优的解a和b,使得Corr(u, v)最大,这样得到的a和b就是使得u和v就有最大关联的权重。
到这里,基本上介绍了典型相关分析的目的。
2. CCA表示与求解
给定两组向量和(替换之前的x为,y为),维度为,维度为,默认。形式化表示如下:
是x的协方差矩阵;左上角是自己的协方差矩阵;右上角是;左下角是,也是的转置;右下角是的协方差矩阵。
与之前一样,我们从和的整体入手,定义
我们可以算出u和v的方差和协方差:
上面的结果其实很好算,推导一下第一个吧:
最后,我们需要算Corr(u,v)了
我们期望Corr(u,v)越大越好,关于Pearson相关系数,《数据挖掘导论》给出了一个很好的图来说明:
横轴是u,纵轴是v,这里我们期望通过调整a和b使得u和v的关系越像最后一个图越好。其实第一个图和最后一个图有联系的,我们可以调整a和b的符号,使得从第一个图变为最后一个。
接下来我们求解a和b。
回想在LDA中,也得到了类似Corr(u,v)的公式,我们在求解时固定了分母,来求分子(避免a和b同时扩大n倍仍然符号解条件的情况出现)。这里我们同样这么做。
这个优化问题的条件是:
Maximize Subject to: |
求解方法是构造Lagrangian等式,这里我简单推导如下:
求导,得
令导数为0后,得到方程组:
第一个等式左乘,第二个左乘,再根据,得到
也就是说求出的即是Corr(u,v),只需找最大即可。
让我们把上面的方程组进一步简化,并写成矩阵形式,得到
写成矩阵形式
令
那么上式可以写作:
显然,又回到了求特征值的老路上了,只要求得的最大特征值,那么Corr(u,v)和a和b都可以求出。
在上面的推导过程中,我们假设了和均可逆。一般情况下都是可逆的,只有存在特征间线性相关时会出现不可逆的情况,在本文最后会提到不可逆的处理办法。
再次审视一下,如果直接去计算的特征值,复杂度有点高。我们将第二个式子代入第一个,得
这样先对求特征值和特征向量,然后根据第二个式子求得b。
待会举个例子说明求解过程。
假设按照上述过程,得到了最大时的和。那么和称为典型变量(canonical variates),即是u和v的相关系数。
最后,我们得到u和v的等式为:
我们也可以接着去寻找第二组典型变量对,其最优化条件是
Maximize Subject to:
|
其实第二组约束条件就是。
计算步骤同第一组计算方法,只不过是取的第二大特征值。
得到的和其实也满足
即
总结一下,i和j分别表示和得到结果
3. CCA计算例子
我们回到之前的评价一个人解题和其阅读能力的关系的例子。假设我们通过对样本计算协方差矩阵得到如下结果:
然后求,得
这里的A和前面的中的A不是一回事(这里符号有点乱,不好意思)。
然后对A求特征值和特征向量,得到
然后求b,之前我们说的方法是根据求b,这里,我们也可以采用类似求a的方法来求b。
回想之前的等式
我们将上面的式子代入下面的,得
然后直接对求特征向量即可,注意和的特征值相同,这个可以自己证明下。
不管使用哪种方法,
这里我们得到a和b的两组向量,到这还没完,我们需要让它们满足之前的约束条件
这里的应该是我们之前得到的VecA中的列向量的m倍,我们只需要求得m,然后将VecA中的列向量乘以m即可。
这里的是VecA的列向量。
因此最后的a和b为:
第一组典型变量为
相关系数
第二组典型变量为
相关系数
这里的(解题速度),(解题正确率),(阅读速度),(阅读理解程度)。他们前面的系数意思不是特征对单个u或v的贡献比重,而是从u和v整体关系看,当两者关系最密切时,特征计算时的权重。
4. Kernel Canonical Correlation Analysis(KCCA)
通常当我们发现特征的线性组合效果不够好或者两组集合关系是非线性的时候,我们会尝试核函数方法,这里我们继续介绍Kernel CCA。
在《支持向量机-核函数》那一篇中,大致介绍了一下核函数,这里再简单提一下:
当我们对两个向量作内积的时候
我们可以使用,来替代和,比如原来的特征向量为,那么
我们可以定义
如果与的构造一样,那么
这样,仅通过计算x和y的内积的平方就可以达到在高维空间(这里为)中计算和内积的效果。
由核函数,我们可以得到核矩阵K,其中
即第行第列的元素是第个和第个样例在核函数下的内积。
一个很好的核函数定义:
其中样例x有n个特征,经过变换后,从n维特征上升到了N维特征,其中每一个特征是。
回到CCA,我们在使用核函数之前
这里假设x和y都是n维的,引入核函数后,和变为了N维。
使用核函数后,u和v的公式为:
这里的c和d都是N维向量。
现在我们有样本,这里的表示样本x的第i个样例,是n维向量。
根据前面说过的相关系数,构造拉格朗日公式如下:
其中
然后让L对a求导,令导数等于0,得到(这一步我没有验证,待会从宏观上解释一下)
同样对b求导,令导数等于0,得到
求出c和d干嘛呢?c和d只是的系数而已,按照原始的CCA做法去做就行了呗,为了再引入和?
回答这个问题要从核函数的意义上来说明。核函数初衷是希望在式子中有,然后用K替换之,根本没有打算去计算出实际的。因此即是按照原始CCA的方式计算出了c和d,也是没用的,因为根本有没有实际的让我们去做。另一个原因是核函数比如高斯径向基核函数可以上升到无限维,N是无穷的,因此c和d也是无穷维的,根本没办法直接计算出来。我们的思路是在原始的空间中构造出权重和,然后利用将和上升到高维,他们在高维对应的权重就是c和d。
虽然和是在原始空间中(维度为样例个数M),但其作用点不是在原始特征上,而是原始样例上。看上面得出的c和d的公式就知道。通过控制每个高维样例的权重,来控制c。
好了,接下来我们看看使用和后,u和v的变化
表示可以将第i个样例上升到的N维向量,意义可以类比原始CCA的x。
鉴于这样表示接下来会越来越复杂,改用矩阵形式表示。
简写为
其中X(M×N)为
我们发现
我们可以算出u和v的方差和协方差(这里实际上事先对样本和做了均值归0处理):
这里和维度可以不一样。
最后,我们得到Corr(u,v)
可以看到,在将和处理成,后,得到的结果和之前形式基本一样,只是将替换成了两个K乘积。
因此,得到的结果也是一样的,之前是
其中
引入核函数后,得到
其中
注意这里的两个w有点区别,前面的维度和x的特征数相同,维度和y的特征数相同。后面的维度和x的样例数相同,维度和y的样例数相同,严格来说“维度=维度”。
5. 其他话题
1、当协方差矩阵不可逆时,怎么办?
要进行regularization。
一种方法是将前面的KCCA中的拉格朗日等式加上二次正则化项,即:
这样求导后得到的等式中,等式右边的矩阵一定是正定矩阵。
第二种方法是在Pearson系数的分母上加入正则化项,同样结果也一定可逆。
2、求Kernel矩阵效率不高怎么办?
使用Cholesky decomposition压缩法或者部分Gram-Schmidt正交化法,。
3、怎么使用CCA用来做预测?
4、如果有多个集合怎么办?X、Y、Z…?怎么衡量多个样本集的关系?
这个称为Generalization of the Canonical Correlation。方法是使得两两集合的距离差之和最小。可以参考文献2。
6. 参考文献
1、 http://www.stat.tamu.edu/~rrhocking/stat636/LEC-9.636.pdf
2、 Canonical correlation analysis: An overview with application to learning methods. David R. Hardoon , Sandor Szedmak and John Shawe-Taylor
3、 A kernel method for canonical correlation analysis. Shotaro Akaho
4、 Canonical Correlation a Tutorial. Magnus Borga
5、 Kernel Canonical Correlation Analysis. Max Welling
【转载】典型关联分析(Canonical Correlation Analysis)