Canonical Correlation Analysis(CCA)典型相关分析也是一种常用的降维算法。我们知道,PCA(Principal Component Analysis) 主分量分析将数据从高维映射到低维空间同时,保证了数据的分散性尽可能地大, 也就是数据的方差或者协方差尽可能大。而LDA(Linear Discriminant Analysis) 线性判别分析则利用了类标签,利用一种监督学习的方法,将数据从高维空间映射到低维空间时,让不同类的数据尽可能地分开而同一类的数据尽可能地聚合。

但是,有的时候,我们想探讨多个线性空间之间的相关性。比如有的时候我们会从图像中提取各种特征,每一种特征都可以构成一个线性空间,为了分析这些空间之间的相关性,我们可以利用CCA 来做分析。

假设我们有两个特征空间,S1=x1∈Rd1, S2=x2∈Rd2, 我们可以将两个特征向量合并。

x=(x1x2)E(x)=(μ1μ2)Σ=(Σ11Σ21Σ12Σ22)

可以看到,Σ12=ΣT21,Σ 称为协方差矩阵。我们引入投影向量 a, b, 假设投影之后的变量满足:

u=aTx1v=bTx2

可以进一步算出 u,v 的方差和协方差:

var(u)=aTΣ11a,var(v)=bTΣ2b,cov(u,v)=aTΣ12b

可以计算出 u,v 的相关系数:

Corr(u,v)=cov(u,v)var(u)−−−−−√var(v)−−−−−√

将u,v的表达式代入,可以得到:

Corr(u,v)=aTΣ12baTΣ11a−−−−−−√bTΣ22b−−−−−−−√

我们的目标是让相关系数Corr(u,v) 尽可能地大。为了求解a,b, 可以固定分母而让分子最大化,所以上面的函数可以变成:

maxa,baTΣ12b
s.t.aTΣ11a=1,bTΣ22b=1

构造拉格朗日等式:

L=aTΣ12b−λ12(aTΣ11a−1)−λ22(bTΣ22b−1)

L 分别对a,b 求导,可以得到:

∂L∂a=Σ12b−λ1Σ11a=0
∂L∂b=Σ21a−λ2Σ22b=0

根据约束条件,可以得到:

λ1=λ2=aTΣ12b

所以只要求出 λ1 或者 λ2 就可以得到最大的相关系数。令 λ=λ1=λ2.

通过上面的偏导数,我们可以得到:

Σ−111Σ12b=λa
Σ−122Σ21a=λb

写成矩阵形式:

(Σ−11100Σ−122)(0Σ21Σ120)(ab)=λ(ab)

令:

B=(Σ1100Σ22),A=(0Σ21Σ120)w=(ab)

,

那么,上式可以表示成:

B−1Aw=λw

所以,λ 和 w 就是B−1A 的特征值和特征向量。我们可以求出 B−1A 的特征值和特征向量,然后利用特征向量将原来的特征

x1,x2做映射。对应特征值 λ 的求解,可以有更简单的方法,从上面的偏导数,我们可以得到如下等式:

Σ−111Σ12Σ−122Σ21a=λ2a

我们可以利用上面的表达式求出 λ 和 a,然后再待会上面的偏导数等式求出 b.

λ 就是 u,v的相关系数,u,v 就是一对典型变量(canonical variables)。按照 B−1A 的特征值从大到小排列,可以求出一系列的典型变量。特征值越大,说明典型变量的相关性越强。

参考来源:

http://www.cnblogs.com/jerrylead/archive/2011/06/20/2085491.html

https://en.wikipedia.org/wiki/Canonical_correlation

机器学习: Canonical Correlation Analysis 典型相关分析的更多相关文章

  1. Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).

    Kernel典型相关分析 (一)KCCA 同样,我们可以引入Kernel函数,通过非线性的坐标变换达到之前CCA所寻求的目标.首先,假设映射$\Phi_X: x\rightarrow \Phi_X(x ...

  2. Jordan Lecture Note-11: 典型相关分析(Canonical Correlation Analysis, CCA).

    典型相关分析 (一)引入 典型相关分析(Canonical Correlation Analysis)是研究两组变量之间相关关系的一种多元统计方法.他能够揭示出两组变量之间的内在联系. 我们知道,在一 ...

  3. 经典相关分析,典型关分析, CCA,Canonical Correlation Analysis,多元变量分析,线性组合,相关系数最大化

    1.从概率论中相关系数推广而来 在概率论中,研究两个变量之间的线性相关情况时,提出了 相关系数 这个概念.做一下推广,如果研究一个变量和多个随机变量之间的线性相关关系时,提出了 全相关系数(或者复相关 ...

  4. 多视图学习利器----CCA(典型相关分析)及MATLAB实现

    Hello,我是你们人见人爱花见花开的小花.又和大家见面了,今天我们来聊一聊多视图学习利器------CCA. 一 典型相关分析的基本思想 当我们研究两个变量x和y之间的相关关系的时候,相关系数(相关 ...

  5. 典型相关分析CCA计算过程

      本文介绍了CCA解决的问题,CCA原理的推导过程,以及对计算结果物理意义的解释.并且通过SPSS和R操作演示了一个关于CCA的例子.数据文件下载参考[8],SPSS输出结果文件下载参考[9],R代 ...

  6. SPSS数据分析—典型相关分析

    我们已经知道,两个随机变量间的相关关系可以用简单相关系数表示,一个随机变量和多个随机变量的相关关系可以用复相关系数表示,而如果需要研究多个随机变量和多个随机变量间的相关关系,则需要使用典型相关分析. ...

  7. SPSS数据分析—基于最优尺度变换的典型相关分析

    传统的典型相关分析只能考虑变量之间的线性相关情况,且必须为连续变量,而我们依然可以使用最优尺度变换来拓展其应用范围,使其可以分析非线性相关.数据为分类数据等情况,并且不再仅限于两个变量间的分析, 虽然 ...

  8. R语言 典型相关分析

    1.关键点 #典型相关分析##典型相关分析是用于分析两组随机变量之间的相关程度的一种统计方法,它能够有效地揭示两组随机变量之间的相互(线性依赖)关系#例如 研究生入学考试成绩与本科阶段一些主要课程成绩 ...

  9. CCA(典型相关分析)

    https://www.cnblogs.com/pinard/p/6288716.html

随机推荐

  1. sqlite数据库转换为mysql数据库

    SQLite工具我用的SQLiteStudio2.1.5 下载地址 http://sqlitestudio.pl/?act=download SQLiteStudio打开数据库文件,点工具->导 ...

  2. VirtualApp技术黑产利用研究报告

    一. 前言 VirtualApp(以下称VA)是一个App虚拟化引擎(简称VA).VirtualApp创建了一个虚拟空间,你可以在虚拟空间内任意的安装.启动和卸载APK,这一切都与外部隔离,如同一个沙 ...

  3. class文件无论是32位还是64位jdk编译出来的,都可以通用

    class文件无论是32位还是64位jdk编译出来的,都可以通用 学习了:https://blog.csdn.net/z3111001358/article/details/53364066 java ...

  4. margin: 0 auto; 元素水平居中布局无效

    失效原因: 要给居中的元素一个宽度,否则无效. 该元素一定不能浮动或绝对定位,否则无效. 在HTML中使用<center></center>标签,需考虑好整体构架,否者全部元素 ...

  5. python入门之搭建环境

    进入以下网站:python.org 选择你喜欢(需要)的版本下载 点击下载即可,本次提供下载:python3.6.3 (国外架设,非常慢) ,用百度的平台吧:python3.6.1,多谢百度. 开始安 ...

  6. docker 容器 日志占用空间过大问题处理

    docker 容器 日志占用空间过大问题处理 # 2017 10 09 优化docker 运行产生的日志 path=/var/lib/docker/containers/ cd $path for f ...

  7. Android相关工具下载(ADT、NDK等等)

    一个非常牛掰的网站,可以下载很多Android相关的工具等 网址为: http://www.androiddevtools.cn/

  8. windows 平台 ffmeg h264 硬编码

    本文讲述windows 平台下ffmpeg如何利用intel media SDK 进行 h264硬编码(测试版本为3.2.2). ffmeg硬编编码的流程与软件编码流程相同,唯一不同的地方在初始化en ...

  9. 排序&匿名函数

    nums=[11,34234,23,344,123,1,23,124,523,4,12342341,423,43545] nums.sort() print(nums) #这个就是排序,从小到到 匿名 ...

  10. android自己定义渐变进度条

    项目中须要用到一个弧形渐变的进度条,通过android自带是不能实现的.我是没有找到实现的方法,有大神知道的能够指点.效果图是以下这种 这是通过继承VIew来绘制出来的,网上也有相似的,可是代码那是相 ...