典型关联分析(Canonical Correlation Analysis)

[pdf版本] 典型相关分析.pdf

1. 问题

      在线性回归中,我们使用直线来拟合样本点,寻找n维特征向量X和输出结果(或者叫做label)Y之间的线性关系。其中clip_image002clip_image004。然而当Y也是多维时,或者说Y也有多个特征时,我们希望分析出X和Y的关系。

      当然我们仍然可以使用回归的方法来分析,做法如下:

      假设clip_image002[1]clip_image006,那么可以建立等式Y=AX如下

      clip_image008

      其中clip_image010,形式和线性回归一样,需要训练m次得到m个clip_image012

      这样做的一个缺点是,Y中的每个特征都与X的所有特征关联,Y中的特征之间没有什么联系。

      我们想换一种思路来看这个问题,如果将X和Y都看成整体,考察这两个整体之间的关系。我们将整体表示成X和Y各自特征间的线性组合,也就是考察clip_image014clip_image016之间的关系。

      这样的应用其实很多,举个简单的例子。我们想考察一个人解题能力X(解题速度clip_image018,解题正确率clip_image020)与他/她的阅读能力Y(阅读速度clip_image022,理解程度clip_image024)之间的关系,那么形式化为:

      clip_image026clip_image028

      然后使用Pearson相关系数

      clip_image030

      来度量u和v的关系,我们期望寻求一组最优的解a和b,使得Corr(u, v)最大,这样得到的a和b就是使得u和v就有最大关联的权重。

      到这里,基本上介绍了典型相关分析的目的。

2. CCA表示与求解

      给定两组向量clip_image032clip_image034(替换之前的x为clip_image032[1],y为clip_image034[1]),clip_image032[2]维度为clip_image036clip_image034[2]维度为clip_image038,默认clip_image040。形式化表示如下:

      clip_image042

      clip_image044是x的协方差矩阵;左上角是clip_image032[3]自己的协方差矩阵;右上角是clip_image046;左下角是clip_image048,也是clip_image050的转置;右下角是clip_image034[3]的协方差矩阵。

      与之前一样,我们从clip_image032[4]clip_image034[4]的整体入手,定义

      clip_image052 clip_image054

      我们可以算出u和v的方差和协方差:

      clip_image056 clip_image058 clip_image060

      上面的结果其实很好算,推导一下第一个吧:

      clip_image062

      最后,我们需要算Corr(u,v)了

      clip_image064

      我们期望Corr(u,v)越大越好,关于Pearson相关系数,《数据挖掘导论》给出了一个很好的图来说明:

      clip_image066

      横轴是u,纵轴是v,这里我们期望通过调整a和b使得u和v的关系越像最后一个图越好。其实第一个图和最后一个图有联系的,我们可以调整a和b的符号,使得从第一个图变为最后一个。

      接下来我们求解a和b。

      回想在LDA中,也得到了类似Corr(u,v)的公式,我们在求解时固定了分母,来求分子(避免a和b同时扩大n倍仍然符号解条件的情况出现)。这里我们同样这么做。

      这个优化问题的条件是:

      Maximize clip_image068

      Subject to: clip_image070

      求解方法是构造Lagrangian等式,这里我简单推导如下:

      clip_image072

      求导,得

      clip_image074

      clip_image076

      令导数为0后,得到方程组:

      clip_image078

      clip_image080

      第一个等式左乘clip_image082,第二个左乘clip_image084,再根据clip_image086,得到

      clip_image088

      也就是说求出的clip_image090即是Corr(u,v),只需找最大clip_image090[1]即可。

      让我们把上面的方程组进一步简化,并写成矩阵形式,得到

      clip_image092

      clip_image094

      写成矩阵形式

      clip_image096

      令

      clip_image098

      那么上式可以写作:

      clip_image100

      显然,又回到了求特征值的老路上了,只要求得clip_image102的最大特征值clip_image104,那么Corr(u,v)和a和b都可以求出。

      在上面的推导过程中,我们假设了clip_image106clip_image108均可逆。一般情况下都是可逆的,只有存在特征间线性相关时会出现不可逆的情况,在本文最后会提到不可逆的处理办法。

      再次审视一下,如果直接去计算clip_image102[1]的特征值,复杂度有点高。我们将第二个式子代入第一个,得

      clip_image110

      这样先对clip_image112求特征值clip_image114和特征向量clip_image116,然后根据第二个式子求得b。

待会举个例子说明求解过程。

      假设按照上述过程,得到了clip_image090[2]最大时的clip_image118clip_image120。那么clip_image118[1]clip_image120[1]称为典型变量(canonical variates),clip_image090[3]即是u和v的相关系数。

      最后,我们得到u和v的等式为:

      clip_image122 clip_image124

      我们也可以接着去寻找第二组典型变量对,其最优化条件是

      Maximize       clip_image126

      Subject to:   clip_image128

                        clip_image130

      其实第二组约束条件就是clip_image132

      计算步骤同第一组计算方法,只不过是clip_image090[4]clip_image112[1]的第二大特征值。

      得到的clip_image134clip_image136其实也满足

      clip_image138clip_image140

      总结一下,i和j分别表示clip_image142clip_image144得到结果

      clip_image146

      clip_image148

3. CCA计算例子

      我们回到之前的评价一个人解题和其阅读能力的关系的例子。假设我们通过对样本计算协方差矩阵得到如下结果:

      clip_image150

      clip_image152

      然后求clip_image112[2],得

      clip_image154

      这里的A和前面的clip_image156中的A不是一回事(这里符号有点乱,不好意思)。

      然后对A求特征值和特征向量,得到

      clip_image158

      然后求b,之前我们说的方法是根据clip_image160求b,这里,我们也可以采用类似求a的方法来求b。

      回想之前的等式

      clip_image092[1]

      clip_image094[1]

      我们将上面的式子代入下面的,得

      clip_image162

      然后直接对clip_image164求特征向量即可,注意clip_image164[1]clip_image112[3]的特征值相同,这个可以自己证明下。

      不管使用哪种方法,

      clip_image166

      clip_image168

      这里我们得到a和b的两组向量,到这还没完,我们需要让它们满足之前的约束条件

      clip_image170

      这里的clip_image172应该是我们之前得到的VecA中的列向量的m倍,我们只需要求得m,然后将VecA中的列向量乘以m即可。

      clip_image174

      这里的clip_image176是VecA的列向量。

      clip_image178

      因此最后的a和b为:

      clip_image180

      第一组典型变量为

      clip_image182

      相关系数

      clip_image184

      第二组典型变量为

      clip_image186

      相关系数

      clip_image188

      这里的clip_image190(解题速度),clip_image192(解题正确率),clip_image194(阅读速度),clip_image196(阅读理解程度)。他们前面的系数意思不是特征对单个u或v的贡献比重,而是从u和v整体关系看,当两者关系最密切时,特征计算时的权重。

4. Kernel Canonical Correlation Analysis(KCCA)

      通常当我们发现特征的线性组合效果不够好或者两组集合关系是非线性的时候,我们会尝试核函数方法,这里我们继续介绍Kernel CCA。

      在《支持向量机-核函数》那一篇中,大致介绍了一下核函数,这里再简单提一下:

      当我们对两个向量作内积的时候

      clip_image198

      我们可以使用clip_image200clip_image202来替代clip_image204clip_image206,比如原来的clip_image204[1]特征向量为clip_image208,那么

      我们可以定义

      clip_image210

      如果clip_image202[1]clip_image200[1]的构造一样,那么

      clip_image212

                        clip_image214

      这样,仅通过计算x和y的内积的平方就可以达到在高维空间(这里为clip_image216)中计算clip_image218clip_image220内积的效果。

      由核函数,我们可以得到核矩阵K,其中

      clip_image222

      即第clip_image224行第clip_image226列的元素是第clip_image224[1]个和第clip_image226[1]个样例在核函数下的内积。

      一个很好的核函数定义:

      clip_image228

      其中样例x有n个特征,经过clip_image218[1]变换后,从n维特征上升到了N维特征,其中每一个特征是clip_image230

      回到CCA,我们在使用核函数之前

      clip_image232 clip_image234

      这里假设x和y都是n维的,引入核函数后,clip_image236clip_image238变为了N维。

      使用核函数后,u和v的公式为:

      clip_image240

      clip_image242

      这里的c和d都是N维向量。

      现在我们有样本clip_image244,这里的clip_image246表示样本x的第i个样例,是n维向量。

根据前面说过的相关系数,构造拉格朗日公式如下:

      clip_image248

      其中

      clip_image250

      clip_image252

      然后让L对a求导,令导数等于0,得到(这一步我没有验证,待会从宏观上解释一下)

      clip_image254

      同样对b求导,令导数等于0,得到

      clip_image256

      求出c和d干嘛呢?c和d只是clip_image258的系数而已,按照原始的CCA做法去做就行了呗,为了再引入clip_image260clip_image262

      回答这个问题要从核函数的意义上来说明。核函数初衷是希望在式子中有clip_image264,然后用K替换之,根本没有打算去计算出实际的clip_image258[1]。因此即是按照原始CCA的方式计算出了c和d,也是没用的,因为根本有没有实际的clip_image258[2]让我们去做clip_image266。另一个原因是核函数比如高斯径向基核函数可以上升到无限维,N是无穷的,因此c和d也是无穷维的,根本没办法直接计算出来。我们的思路是在原始的空间中构造出权重clip_image260[1]clip_image262[1],然后利用clip_image258[3]clip_image260[2]clip_image262[2]上升到高维,他们在高维对应的权重就是c和d。

      虽然clip_image260[3]clip_image262[3]是在原始空间中(维度为样例个数M),但其作用点不是在原始特征上,而是原始样例上。看上面得出的c和d的公式就知道。clip_image260[4]通过控制每个高维样例的权重,来控制c。

      好了,接下来我们看看使用clip_image260[5]clip_image262[4]后,u和v的变化

      clip_image268

      clip_image270

      clip_image272表示可以将第i个样例上升到的N维向量,clip_image274意义可以类比原始CCA的x。

      鉴于这样表示接下来会越来越复杂,改用矩阵形式表示。

      clip_image276

      简写为

      clip_image278

      其中X(M×N)为

            clip_image280

      我们发现

      clip_image282

      我们可以算出u和v的方差和协方差(这里实际上事先对样本clip_image204[2]clip_image284做了均值归0处理):

      clip_image286

      clip_image288

      clip_image290

      这里clip_image274[1]clip_image292维度可以不一样。

      最后,我们得到Corr(u,v)

      clip_image294

      可以看到,在将clip_image018[1]clip_image020[1]处理成clip_image296clip_image298后,得到的结果和之前形式基本一样,只是将clip_image044[1]替换成了两个K乘积。

      因此,得到的结果也是一样的,之前是

      clip_image100[1]

      其中

      clip_image098[1]

      引入核函数后,得到

      clip_image100[2]

      其中

      clip_image300

      注意这里的两个w有点区别,前面的clip_image116[1]维度和x的特征数相同,clip_image302维度和y的特征数相同。后面的clip_image304维度和x的样例数相同,clip_image306维度和y的样例数相同,严格来说“clip_image304[1]维度=clip_image306[1]维度”。

5. 其他话题

      1、当协方差矩阵不可逆时,怎么办?

      要进行regularization。

      一种方法是将前面的KCCA中的拉格朗日等式加上二次正则化项,即:

      clip_image308

      这样求导后得到的等式中,等式右边的矩阵一定是正定矩阵。

      第二种方法是在Pearson系数的分母上加入正则化项,同样结果也一定可逆。

      clip_image310

      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

posted on 2011-06-20 20:17  JerryLead  阅读(69479)  评论(12编辑  收藏  举报

导航