典型关联分析(CCA)原理总结

  典型关联分析(Canonical Correlation Analysis,以下简称CCA)是最常用的挖掘数据关联关系的算法之一。比如我们拿到两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么我们能不能说这两组数据是相关的呢?CCA可以帮助我们分析这个问题。

1. CCA概述

    在数理统计里面,我们都知道相关系数这个概念。假设有两组一维的数据集X和Y,则相关系数ρρ的定义为:

ρ(X,Y)=cov(X,Y)D(X)?????√D(Y)?????√ρ(X,Y)=cov(X,Y)D(X)D(Y)

    其中cov(X,Y)cov(X,Y)是X和Y的协方差,而D(X),D(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的算法思想。

2. CCA的算法思想

    上面我们提到CCA是将高维的两组数据分别降维到1维,然后用相关系数分析相关性。但是有一个问题是,降维的标准是如何选择的呢?回想下主成分分析PCA,降维的原则是投影方差最大;再回想下线性判别分析LDA,降维的原则是同类的投影方差小,异类间的投影方差大。对于我们的CCA,它选择的投影标准是降维到1维后,两组数据的相关系数最大。

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

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

X′=aTX,Y′=bTYX′=aTX,Y′=bTY

    我们CCA的优化目标是最大化ρ(X′,Y′)ρ(X′,Y′)得到对应的投影向量a,ba,b,即

argmaxa,bcov(X′,Y′)D(X′)?????√D(Y′)?????√argmax?a,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)bcov(X′,Y′)=cov(aTX,bTY)=E(<aTX,bTY>)=E((aTX)(bTY)T)=aTE(XYT)b

D(X′)=D(aTX)=aTE(XXT)aD(X′)=D(aTX)=aTE(XXT)a

D(Y′)=D(bTY)=bTE(YYT)bD(Y′)=D(bTY)=bTE(YYT)b

    由于我们的X,Y的均值均为0,则

D(X)=cov(X,X)=E(XXT),D(Y)=cov(Y,Y)=E(YYT)D(X)=cov(X,X)=E(XXT),D(Y)=cov(Y,Y)=E(YYT)

cov(X,Y)=E(XYT),cov(Y,X)=E(YXT)cov(X,Y)=E(XYT),cov(Y,X)=E(YXT)

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

argmaxa,baTSXYbaTSXXa???????√bTSYYb??????√argmax?a,baTSXYbaTSXXabTSYYb

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

argmaxa,baTSXYbargmax?a,baTSXYb

s.t.aTSXXa=1,bTSYYb=1s.t.aTSXXa=1,bTSYYb=1

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

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

3. CCA算法的SVD求解

    对于上面的优化目标,我们可以做一次矩阵标准化,就可以用SVD来求解了。

    首先,我们令a=S?1/2XXu,b=S?1/2YYva=SXX?1/2u,b=SYY?1/2v,这样我们有:

aTSXXa=1?uTS?1/2XXSXXS?1/2XXu=1?uTu=1aTSXXa=1?uTSXX?1/2SXXSXX?1/2u=1?uTu=1

bTSYYb=1?vTS?1/2YYSYYS?1/2YYv=1?vTv=1bTSYYb=1?vTSYY?1/2SYYSYY?1/2v=1?vTv=1

aTSXYb=uTS?1/2XXSXYS?1/2YYvaTSXYb=uTSXX?1/2SXYSYY?1/2v

 

    也就是说,我们的优化目标变成下式:

argmaxu,vuTS?1/2XXSXYS?1/2YYvargmax?u,vuTSXX?1/2SXYSYY?1/2v

s.t.uTu=1,vTv=1s.t.uTu=1,vTv=1

   

    仔细一看,如果将u和v看做矩阵M=S?1/2XXSXYS?1/2YYM=SXX?1/2SXYSYY?1/2的某一个奇异值对应的左右奇异向量。那么利用奇异值分解,我们可以得到M=UΣVTM=UΣVT,其中U,VU,V分别为M的左奇异向量和右奇异向量组成的矩阵,而ΣΣ为M的奇异值组成的对角矩阵。由于U,VU,V所有的列都为标准正交基,则uTUuTU和VTvVTv得到一个只有一个标量值为1,其余标量值为0的向量。此时我们有

uTS?1/2XXSXYS?1/2YYv=uTUΣVTv=σuvuTSXX?1/2SXYSYY?1/2v=uTUΣVTv=σuv

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

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

4. CCA算法的特征分解求解  

    特征分解方式就比较传统了,利用拉格朗日函数,优化目标转化为最大化下式:

J(a,b)=aTSXYb?λ2(aTSXXa?1)?θ2(bTSYYb?1)J(a,b)=aTSXYb?λ2(aTSXXa?1)?θ2(bTSYYb?1)

    分别对a,ba,b求导并令结果为0,我们得到:

SXYb?λSXXa=0SXYb?λSXXa=0

SYXa?λSYYb=0SYXa?λSYYb=0

    将上面第一个式子左乘aTaT,第二个式子左乘bTbT,并利用aTSXXa=1,bTSYYb=1aTSXXa=1,bTSYYb=1,我们得到

λ=θ=aTSXYbλ=θ=aTSXYb

    其实也就是说我们的拉格朗日系数就是我们要优化的目标。我们继续将上面的两个式子做整理,第一个式子左乘S?1XXSXX?1,第二个式子左乘S?1YYSYY?1,我们得到:

S?1XXSXYb=λaSXX?1SXYb=λa

S?1YYSYXa=λbSYY?1SYXa=λb

    将上面第二个式子带入第一个式子,我们得到

S?1XXSXYS?1YYSYXa=λ2aSXX?1SXYSYY?1SYXa=λ2a

    这个式子我们就熟悉了,这不就是特征分解吗!要求最大的相关系数λλ,我们只需要对矩阵N=S?1XXSXYS?1YYSYXN=SXX?1SXYSYY?1SYX做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为X的线性系数aa。

    同样的办法,我们将上面第一个式子带入第二个式子,我们得到

S?1YYSYXS?1XXSXYb=λ2bSYY?1SYXSXX?1SXYb=λ2b

, 我们只需要对矩阵N′=S?1YYSYXS?1XXSXYN′=SYY?1SYXSXX?1SXY做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为Y的线性系数bb。

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

5. CCA算法流程

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

    输入:各为m个的样本X和Y,X和Y的维度都大于1

    输出:X,Y的相关系数ρρ,X和Y的线性系数向量a和b

    1)计算X的方差SXXSXX, Y的方差SYYSYY,X和Y的协方差SXYSXY, Y和X的协方差SYX=STXYSYX=SXYT

    2)  计算矩阵M=S?1/2XXSXYS?1/2YYM=SXX?1/2SXYSYY?1/2

    3)对矩阵MM进行奇异值分解,得到最大的奇异值ρρ,和最大奇异值对应的左右奇异向量u,vu,v

    4) 计算X和Y的线性系数向量a和b, a=S?1/2XXu,b=S?1/2YYva=SXX?1/2u,b=SYY?1/2v

    

    可见算法流程并不复杂,但是要理解这个算法需要了解一些背景知识。

6. CCA算法小结

    CCA算法广泛的应用于数据相关度的分析,同时还是偏最小二乘法的基础。但是由于它依赖于数据的线性表示,当我们的数据无法线性表示时,CCA就无法使用,此时我们可以利用核函数的思想,将数据映射到高维后,再利用CCA的思想降维到1维,求对应的相关系数和线性关系,这个算法一般称为KCCA。

    此外,我们在算法里只找了相关度最大的奇异值或者特征值,作为数据的相关系数,实际上我们也可以像PCA一样找出第二大奇异值,第三大奇异值,。。。得到第二相关系数和第三相关系数。然后对数据做进一步的相关性分析。但是一般的应用来说,找出第一相关系数就可以了。

    有时候我们的矩阵SXX,SYYSXX,SYY不可逆,此时我们得不到对应的逆矩阵,一般遇到这种情况可以对SXX,SYYSXX,SYY进行正则化,将SXX,SYYSXX,SYY变化为SXX+γI,SYY+γISXX+γI,SYY+γI,然后继续求逆。其中γγ为正则化系数。

时间: 2024-10-15 20:18:56

典型关联分析(CCA)原理总结的相关文章

【转载】典型关联分析(Canonical Correlation Analysis)

典型关联分析(Canonical Correlation Analysis) [pdf版本] 典型相关分析.pdf 1. 问题 在线性回归中,我们使用直线来拟合样本点,寻找n维特征向量X和输出结果(或者叫做label)Y之间的线性关系.其中,.然而当Y也是多维时,或者说Y也有多个特征时,我们希望分析出X和Y的关系. 当然我们仍然可以使用回归的方法来分析,做法如下: 假设,,那么可以建立等式Y=AX如下 其中,形式和线性回归一样,需要训练m次得到m个. 这样做的一个缺点是,Y中的每个特征都与X的所

第十四篇:Apriori 关联分析算法原理分析与代码实现

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

Apriori 关联分析算法原理分析与代码实现

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

典型关联分析

对于线性回归式Y=wtX,y中的每个特征都与x的所有特征相关联,但无法表示y的各个特征之间的联系. 为此需要将整体表示成Y和X各自特征间的线性组合,也就是考察aTx和bTy之间的关系,用相关系数表示, 因此,问题就转化为求一组a,b使得相关系数最大,用拉格朗日求解.

关联分析原理小结

1. 关联 关联, 指的是关联分析, 这里引用百度百科的定义. 关联分析又称关联挖掘,就是在交易数据.关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式.关联.相关性或因果结构. 通过关联分析, 可以挖掘出"由于某些事件的发生而引起另外一些事件的发生"之类的规则, 比如说"炸鸡>>啤酒", 其中炸鸡被称为规则的前项, 而啤酒则被称为规则的后项. 常用于关联分析的算法有Apriori算法, FP-growth算法, Eclat算法, 灰色

使用Apriori进行关联分析(一)

大型超市有海量交易数据,我们可以通过聚类算法寻找购买相似物品的人群,从而为特定人群提供更具个性化的服务.但是对于超市来讲,更有价值的是如何找出商品的隐藏关联,从而打包促销,以增加营业收入.其中最经典的案例就是关于尿不湿和啤酒的故事.怎样在繁杂的数据中寻找到数据之间的隐藏关系?当然可以使用穷举法,但代价高昂,所以需要使用更加智能的方法在合理时间内找到答案.Apriori就是其中的一种关联分析算法. 基本概念 关联分析是一种在大规模数据集中寻找有趣关系的非监督学习算法.这些关系可以有两种形式:频繁项

OSSIM平台安全事件关联分析实践

OSSIM平台安全事件关联分析实践 在<开源安全运维平台OSSIM最佳实践>一书中叙述到,事件关联是整个OSSIM关联分析的核心,对于OSSIM的事件关联需要海量处理能力,主要便于现在需要及时存储从设备采集到的日志,并能关联匹配和输出,进而通过Web UI展示.从实时性上看,关联分析的整个处理过程不能间断,这对系统的实时性要求较高,另外Ossim系统是基于规则的,Ossim内部具有多套高速规则分析引擎,以实现模式匹配和对关联分析结果调用.所以系统的关联引擎是一个典型数据处理系统,必须依靠强大的

使用Apriori算法和FP-growth算法进行关联分析(Python版)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

机器学习day16 机器学习实战Apriori算法进行关联分析

上一章学习了非监督学习的聚类,聚类算法可以将不同性质的分类分开.这两天学习了apriori算法进行关联分析,感觉是目前最难理解的一章了,并且书中还有个很坑爹的错误,作者存在很大的疏忽. Apriori算法关联分析:从大规模数据集中寻找物品间的隐含关系被称作关联分析或者关联规则学习. 关联分析应用1:我们以前学习的是根据特性进行分类或者回归预测,并没有挖掘特性之间的关系,关联分析可以用于分析数据集中特性之间的关系,可以得到哪些特性频繁的共同出现或者特性之间的关系(比如出现特性A就会很大几率出现特性