精华内容
下载资源
问答
  • 典型关联分析

    2015-01-07 19:24:08
    典型关联分析.pdf》详细的介绍了相关分析的问题,以及典型关联分析的表示与求解计算例子,以及KCCA讲解
  • 典型关联分析 CCA

    2020-09-16 17:40:26
    典型关联分析(Canonical Correlation Analysis,以下简称CCA)是最常用的挖掘数据关联关系的算法之一。比如我们拿到两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么我们能不能...

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

     

    1. CCA概述

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

    \rho(X,Y) = \frac{cov(X,Y)}{\sqrt{D(X)}\sqrt{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的算法思想。

    2. CCA的算法思想

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

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

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

    X' = a^TX, Y'=b^TY

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

    \underbrace{arg\;max}_{a,b}\frac{cov(X',Y')}{\sqrt{D(X')}\sqrt{D(Y')}}

         在投影前,我们一般会把原始数据进行标准化,得到均值为0而方差为1的数据X和Y。这样我们有:

    cov(X',Y') = cov(a^TX, b^TY) = E(<a^TX, b^TY>) = E((a^TX)(b^TY)^T) =a^TE(XY^T)b

    D(X') = D(a^TX) = a^TE(XX^T)a

    D(Y') = D(b^TY) = b^TE(YY^T)b

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

    D(X) = cov(X,X) = E(XX^T), D(Y)= cov(Y,Y) = E(YY^T)

    cov(X,Y) = E(XY^T), cov(Y,X) = E(YX^T)

        令S_{XY} =cov(X,Y),则优化目标可以转化为:

    \underbrace{arg\;max}_{a,b}\frac{a^TS_{XY}b}{\sqrt{ a^TS_{XX}a}\sqrt{b^TS_{YY}b}}

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

    \underbrace{arg\;max}_{a,b}\;\;{a^TS_{XY}b}

    s.t. a^TS_{XX}a =1,\; b^TS_{YY}b =1

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

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

     

    原文地址:https://www.cnblogs.com/pinard/p/6288716.html

    展开全文
  • 典型关联分析(CCA)

    千次阅读 2018-12-03 19:56:46
    文章目录典型关联分析(CCA)CCA概述CCA的算法思想CCA算法的SVD求解CCA算法的特征分解求解CCA算法流程CCA算法小结 典型关联分析(CCA) 转载来自 刘建平Pinard https://www.cnblogs.com/pinard/p/6288716.html 典型...

    典型关联分析(CCA)

    转载来自 刘建平Pinard
    https://www.cnblogs.com/pinard/p/6288716.html

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

    CCA概述

    在数理统计里面,我们都知道相关系数这个概念。假设有两组一维的数据集X和Y,则相关系数ρ的定义为:
    ρ(X,Y)=cov(X,Y)D(X)D(Y)\rho(X,Y) = \frac{cov(X,Y)}{\sqrt{D(X)}\sqrt{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的算法思想

    上面我们提到CCA是将高维的两组数据分别降维到1维,然后用相关系数分析相关性。但是有一个问题是,降维的标准是如何选择的呢?

    回想下主成分分析PCA,降维的原则是投影方差最大;再回想下线性判别分析LDA,降维的原则是同类的投影方差小异类间的投影方差大。对于我们的CCA,它选择的投影标准是降维到1维后,两组数据的相关系数最大

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

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

    我们CCA的优化目标是最大化相关系数ρ(X′,Y′)得到对应的投影向量a,b,即
    arg&ThickSpace;maxa,bcov(X,Y)D(X)D(Y)\underbrace{arg\;max}_{a,b}\frac{cov(X&#x27;,Y&#x27;)}{\sqrt{D(X&#x27;)}\sqrt{D(Y&#x27;)}}

    投影前,我们一般会把原始数据进行标准化,得到均值为0而方差为1的数据X和Y。这样我们有:
    cov(X,Y)=cov(aTX,bTY)=E(&lt;aTX,bTY&gt;)=E((aTX)(bTY)T)=aTE(XYT)bcov(X&#x27;,Y&#x27;) = cov(a^TX, b^TY) = E(&lt;a^TX, b^TY&gt;) = E((a^TX)(b^TY)^T) = a^TE(XY^T)b

    D(X)=D(aTX)=aTE(XXT)aD(X&#x27;) = D(a^TX) = a^TE(XX^T)a

    D(Y)=D(bTY)=bTE(YYT)bD(Y&#x27;) = D(b^TY) = b^TE(YY^T)b

    由于我们的X,Y的均值均为0,则
    D(X)=cov(X,X)=E(XXT),D(Y)=cov(Y,Y)=E(YYT)D(X) = cov(X,X) = E(XX^T), D(Y)= cov(Y,Y) = E(YY^T)

    cov(X,Y)=E(XYT),cov(Y,X)=E(YXT)cov(X,Y) = E(XY^T), cov(Y,X) = E(YX^T)

    SXY=cov(X,Y)S_{XY} =cov(X,Y),则优化目标可以转化为:
    arg&ThickSpace;maxa,baTSXYbaTSXXabTSYYb\underbrace{arg\;max}_{a,b}\frac{a^TS_{XY}b}{\sqrt{ a^TS_{XX}a}\sqrt{b^TS_{YY}b}}

    由于分子分母增大相同的倍数,优化目标结果不变,我们可以采用和SVM类似的优化方法,固定分母,优化分子,具体的转化为:
    arg&ThickSpace;maxa,b&ThickSpace;&ThickSpace;aTSXYb\underbrace{arg\;max}_{a,b}\;\;{a^TS_{XY}b}

    s.t.aTSXXa=1,&ThickSpace;bTSYYb=1s.t. a^TS_{XX}a =1,\; b^TS_{YY}b =1

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

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

    CCA算法的SVD求解

    对于上面的优化目标,我们可以做一次矩阵标准化,就可以用SVD来求解了。
    首先,我们令a=SXX1/2u,b=SYY1/2va=S_{XX}^{-1/2}u, b=S_{YY}^{-1/2}v这样我们有:
    aTSXXa=1uTSXX1/2SXXSXX1/2u=1uTu=1a^TS_{XX}a =1 \Rightarrow u^TS_{XX}^{-1/2}S_{XX}S_{XX}^{-1/2}u =1 \Rightarrow u^Tu=1

    bTSYYb=1vTSYY1/2SYYSYY1/2v=1vTv=1b^TS_{YY}b =1 \Rightarrow v^TS_{YY}^{-1/2}S_{YY}S_{YY}^{-1/2}v=1 \Rightarrow v^Tv=1

    aTSXYb=uTSXX1/2SXYSYY1/2va^TS_{XY}b = u^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v

    也就是说,我们的优化目标变成下式:
    arg&ThickSpace;maxu,vuTSXX1/2SXYSYY1/2v\underbrace{arg\;max}_{u,v}u^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v

    s.t.uTu=1,&ThickSpace;vTv=1s.t. u^Tu =1,\; v^Tv =1

    仔细一看,如果将u和v看做矩阵M=SXX1/2SXYSYY1/2M=S_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}的某一个奇异值对应的左右奇异向量。那么利用奇异值分解,我们可以得到M=UΣVTM=UΣV^T,其中U,V分别为M的左奇异向量和右奇异向量组成的矩阵,而Σ为M的奇异值组成的对角矩阵。由于U,V所有的列都为标准正交基,则uTU和VTv得到一个只有一个标量值为1,其余标量值为0的向量。此时我们有;
    uTSXX1/2SXYSYY1/2v=uTUΣVTv=σuvu^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v = u^TU\Sigma V^Tv = \sigma_{uv}

    也就是说我们最大化uTSXX1/2SXYSYY1/2vu^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v,其实对应的最大值就是某一组左右奇异向量所对应的奇异值的最大值。也就是将M做了奇异值分解后,最大的奇异值就是我们优化目标的最大值,或者说我们的X和Y之间的最大相关系数。利用对应的左右奇异向量u,v我们也可以求出我们原始的X和Y的线性系数a=SXX1/2u,b=SYY1/2va=S_{XX}^{-1/2}u, b=S_{YY}^{-1/2}v

    CCA算法的特征分解求解

    特征分解方式就比较传统了,利用拉格朗日函数,优化目标转化为最大化下式:
    J(a,b)=aTSXYbλ2(aTSXXa1)θ2(bTSYYb1)J(a,b) = a^TS_{XY}b -\frac{\lambda}{2}(a^TS_{XX}a-1)-\frac{\theta}{2}(b^TS_{YY}b-1)
    分别对a,b求导并令结果为0,我们得到:
    SXYbλSXXa=0S_{XY}b-\lambda S_{XX}a=0

    SYXaθSYYb=0S_{YX}a-\theta S_{YY}b=0

    将上面第一个式子左乘aTa^T,第二个式子左乘bTb^T,并利用aTSXXa=1,&ThickSpace;bTSYYb=1a^TS_{XX}a =1,\; b^TS_{YY}b =1,我们得到
    λ=θ=aTSXYb\lambda = \theta = a^TS_{XY}b

    其实也就是说我们的拉格朗日系数就是我们要优化的目标。我们继续将上面的两个式子做整理,第一个式子左乘SXX1S_{XX}^{-1},第二个式子左乘SYY1S_{YY}^{-1},我们得到:
    SXX1SXYb=λaS_{XX}^{-1}S_{XY}b=\lambda a
    SYY1SYXa=λbS_{YY}^{-1}S_{YX}a = \lambda b
    将上面第二个式子带入第一个式子,我们得到
    SXX1SXYSYY1SYXa=λ2aS_{XX}^{-1}S_{XY}S_{YY}^{-1}S_{YX}a=\lambda^2a

    这个式子我们就熟悉了,这不就是特征分解吗!要求最大的相关系数λ,我们只需要对矩阵N=SXX1SXYSYY1SYXN=S_{XX}^{-1}S_{XY}S_{YY}^{-1}S_{YX}做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为X的线性系数a。

    同样的办法,我们将上面第一个式子带入第二个式子,我们得到
    SYY1SYXSXX1SXYb=λ2bS_{YY}^{-1}S_{YX}S_{XX}^{-1}S_{XY}b=\lambda^2b

    我们只需要对矩阵N=SYY1SYXSXX1SXYN’=S_{YY}^{-1}S_{YX}S_{XX}^{-1}S_{XY}做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为Y的线性系数b。

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

    CCA算法流程

    这里我们对CCA的算法流程做一个总结,以SVD方法为准。
    输入:各为m个的样本X和Y,X和Y的维度都大于1
    输出:X,Y的相关系数ρ,X和Y的线性系数向量a和b

    1. 计算X的方差SXXS_{XX}, Y的方差SYYS_{YY},X和Y的协方差SXYS_{XY}, Y和X的协方差SYX=SXYTS_{YX}=S^T_{XY}
    2. 计算矩阵M=SXX1/2SXYSYY1/2M=S_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}
    3. 对矩阵M进行奇异值分解,得到最大的奇异值ρ,和最大奇异值对应的左右奇异向量u,v
    4. 算X和Y的线性系数向量a和b,a=SXX1/2u,b=SYY1/2va=S_{XX}^{-1/2}u, b=S_{YY}^{-1/2}v

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

    CCA算法小结

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

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

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

    展开全文
  • CCA典型关联分析

    千次阅读 2017-09-05 18:36:54
    典型关联分析(Canonical Correlation Analysis) [pdf版本] 典型相关分析.pdf 1. 问题  在线性回归中,我们使用直线来拟合样本点,寻找n维特征向量X和输出结果(或者叫做label)Y之间的线性关系。其中,。...

    典型关联分析(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_image026 和 clip_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_image138 即 clip_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

    展开全文
  • 文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.comRose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用很多,很有必要熟悉其原理。CCA典型相关分析CCA...

    文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.com

    Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用很多,很有必要熟悉其原理。

    CCA典型相关分析

    CCA(canonical correlation analysis)利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1和V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体相关性。

    1936年,Hotelling提出典型相关分析。考虑两组变量的线性组合, 并研究它们之间的相关系数p(u,v).在所有的线性组合中, 找一对相关系数最大的线性组合, 用这个组合的单相关系数来表示两组变量的相关性, 叫做两组变量的典型相关系数, 而这两个线性组合叫做一对典型变量。在两组多变量的情形下, 需要用若干对典型变量才能完全反映出它们之间的相关性。下一步, 再在两组变量的与u1,v1不相关的线性组合中, 找一对相关系数最大的线性组合, 它就是第二对典型变量, 而且p(u2,v2)就是第二个典型相关系数。这样下去, 可以得到若干对典型变量, 从而提取出两组变量间的全部信息。

    典型相关分析的实质就是在两组随机变量中选取若干个有代表性的综合指标(变量的线性组合), 用这些指标的相关关系来表示原来的两组变量的相关关系。这在两组变量的相关性分析中, 可以起到合理的简化变量的作用; 当典型相关系数足够大时, 可以像回归分析那样, 由- 组变量的数值预测另一组变量的线性组合的数值。

    原理描述

    案例实现

    # 导入工具包

    import h5py

    import rcca

    import sys

    import numpy as np

    import cortex

    zscore = lambda d: (d-d.mean(0))/d.std(0)

    第一步:加载数据

    请从CRCNS下载数据:http://crcns.org/data-sets/vc/vim-2以下分析假定该数据位于当前目录中名为“ data”的目录中。

    data = []

    vdata = []

    numSubjects = 3

    # subjects 是3个受试者列表.

    subjects = ['S1', 'S2', 'S3']

    # xfms 是Pycortex中变换名称的列表,该名称用于对齐每个受试者的功能和解剖数据。

    xfms = ['S1_xfm', 'S2_xfm', 'S3_xfm']

    dataPath ="./data/VoxelResponses_subject%d.mat"

    for subj in range(numSubjects):

    # 打开数据

    f = h5py.File(dataPath % (subj+1),'r')

    # 获取数据大小

    datasize = (int(f["ei"]["datasize"].value[2]),int(f["ei"]["datasize"].value[1]),int(f["ei"]["datasize"].value[0]))

    # 从Pycortex获取皮质面罩

    mask = cortex.db.get_mask(subjects[subj], xfms[subj], type = 'thick')

    # 获取该受试者的训练数据

    data_subj = np.nan_to_num(zscore(np.nan_to_num(f["rt"].value.T)))

    data.append(data_subj.reshape((data_subj.shape[0],)+datasize)[:, mask])

    # 获取受试者的验证数据

    vdata_subj = np.nan_to_num(zscore(np.nan_to_num(f["rv"].value.T)))

    vdata.append(vdata_subj.reshape((vdata_subj.shape[0],)+datasize)[:, mask])

    第二步:定义CCA参数

    # 这里设置1e-4和1e2之间的一系列正则化值

    regs = np.array(np.logspace(-4, 2, 10))

    # 这里考虑3到10之间的成分数量

    numCCs = np.arange(3, 11)

    # 初始化cca模型

    cca = rcca.CCACrossValidate(numCCs=numCCs, regs=regs)

    第三步:对数据训练,分析并保存分析结果

    """

    说明:

    由于数据量大,此分析的计算量很大。

    在笔记本中运行它会花费大量时间,因此建议对其进行并行化和/或在计算机群集上运行它,然后加载结果以进行可视化。

    """

    # 利用cca训练数据

    cca.train(data)

    # 利用cca对验证数据进行验证

    cca.validate(vdata)

    # 计算方差,解释每个体素中的验证响应

    cca.compute_ev(vdata)

    # 保存分析结果

    cca.save("./data/CCA_results.hdf5")

    第四步:可视化分析结果

    # 导入可视化工具包

    %matplotlib inline

    import matplotlib.pyplot as plt

    # 导入Brewer色彩图以进行可视化

    from brewer2mpl import qualitative

    nSubj = len(cca.corrs)

    nBins = 30

    bmap = qualitative.Set1[nSubj]

    f = plt.figure(figsize = (8, 6))

    ax = f.add_subplot(111)

    for s in range(nSubj):

    # 绘制所有三个对象的所有体素之间的相关性直方图

    ax.hist(cca.corrs[s], bins = nBins, color = bmap.mpl_colors[s], histtype="stepfilled", alpha = 0.6)

    plt.legend(['Subject 1', 'Subject 2', 'Subject 3'], fontsize = 16)

    ax.set_xlabel('Prediction correlation', fontsize = 20)

    ax.set_ylabel('Number of voxels', fontsize = 20)

    ax.set_title("Prediction performance across voxels", fontsize = 20)

    # p <0.05时的显着性阈值(针对多次比较进行了校正)

    # 重要性是使用渐近方法计算的(有关详细信息,请参见论文文本)

    thresh = 0.0893

    ax.axvline(x = thresh, ymin = 0, ymax = 7000, linewidth = 2, color = 'k')

    ax.text(thresh+0.05, 5000, 'p<0.05', fontsize = 16)

    ax.set_xticklabels(0.1*np.arange(-8, 11, 2), fontsize = 16)

    ax.set_yticklabels(np.arange(0, 10000, 1000), fontsize = 16)

    该图显示了皮质图上一个对象的跨学科预测结果,即预测的验证响应和实际的验证响应之间的相关性。不重要的相关性(p <0.05,已针对多个比较进行校正)设置为0。

    import cortex

    from matplotlib import cm

    from copy import deepcopy

    subj = 0

    subjName = "S1"

    subjTransform = "S1_xfm"

    corrs = deepcopy(cca.corrs[subj])

    # 将所有低于显着性阈值的体素设置为0

    corrs[corrs

    _ = cortex.quickflat.make_figure(cortex.Volume(corrs, subjName,

    subjTransform,

    cmap = cm.PuBuGn_r,

    vmin = 0., vmax = 1.), with_curvature = True)

    参考点击上面动图扫描二维码,关注我们

    展开全文
  • 文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.comRose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用很多,很有必要熟悉其原理。CCA典型相关分析CCA...
  • 典型关联分析(CCA)原理总结

    千次阅读 2019-09-07 19:03:35
      典型关联分析(Canonical Correlation Analysis,以下简称CCA)是最常用的挖掘数据关联关系的算法之一。比如我们拿到两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么我们能...
  • 典型关联分析(CCA)算法原理

    万次阅读 2015-07-24 16:13:43
    典型关联分析(CCA)算法原理、问题的提出、算法实现
  • 典型关联分析(Canonical Correlation Analysis) [pdf版本] 典型相关分析.pdf 1. 问题  在线性回归中,我们使用直线来拟合样本点,寻找n维特征向量X和输出结果(或者叫做label)Y之间的线性关系。其中,。然而...
  • 典型关联分析CCA

    千次阅读 2017-05-17 13:15:41
    在实际问题中,需要研究多个变量之间的相关关系,此时,可以应用典型相关分析(Canonical Correlation Analysis)。这个算法由H.Hotelling于1936年提出,在1970年代趋于成熟。早期由于需要大量的矩阵运算所以没有广泛...
  • 典型关联分析(Canonical Correlation Analysis) [pdf版本]典型相关分析.pdf 1. 问题 在线性回归中,我们使用直线来拟合样本点,寻找n维特征向量X和输出结果(或者叫做label)Y之间的线性关系。其中,。...
  • 我想我还是从以下这几个方面来全面、通俗地为大家介绍典型相关分析 Canonical Correlation Analysis (以下简称,CCA),如果有任何问题,欢迎评论,互相学习讨论! CCA详解目录Why CCA emerges?What is CCA?...
  • CCA典型关联分析原理与Python案例

    千次阅读 2020-07-02 09:03:08
    CCA典型相关分析 CCA(canonical correlation analysis)利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量...
  • Rose今天分享一下CCA的相关原理以及Python应用,...CCA典型相关分析CCA(canonical correlation analysis)利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总...
  • 关联分析,从线性回归开始! 同样是找样本之间的关系,在线性回归中是找通过拟合找出x和y的关系,当有多个维度时,也是一样找出Y=WX就可以了,但是这样我们会发现一个事实,那就是这个式子所代表的意义是Y的每个特征...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 690
精华内容 276
关键字:

典型关联分析