典型相关分析(Canonical Correlation Analysis, CCA)

一 什么是典型相关分析

用来探索两个向量之间的关联关系的,这两个向量来自于同一个个体。比如说,我们需要判定健康和锻炼的关系,一方面观察身体指标如血压血脂作为健康的指标,另一方面观察跑步速度等作为锻炼的指标。然后观察二者的关联关系,分析健康与锻炼有何关系。

二 基本概念

1 典型变量(Canonical Variates)

首先,两个变量集合X和Y:
在这里插入图片描述
接着,定义两个线性关系的集合U和V,其中U是X的线性组合,V是Y的线性组合:
在这里插入图片描述
其中,U为p行p列(X为p列,对每一维都线性组合),V为p行q列(Y为q列,对每一维都线性组合),至于都是p行,是为了形成典型变量对

典型变量对(canonical variate pair):
在这里插入图片描述
显然,典型变量对共有p对(p ≤ q),比如,(U2, V2) = (a21X1 + a22X2 + ··· + a2pXp, b21Y1 + b22Y2 + ··· + b2qYq)

2 补充概念

(1)协方差:

期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为:

在这里插入图片描述
如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值;如果两个变量的变化趋势相反,即其中一个变量大于自身的期望值时另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值;如果X与Y是统计独立的,那么二者之间的协方差就是0,因为两个独立的随机变量满足E[XY] = E[X]E[Y],但是注意反过来并不一定成立,协方差为0时并不一定相互独立,但称协方差为0的两个随机变量不相关。

(2)相关系数:
在这里插入图片描述
若ρXY=0,则称X与Y不线性相关。

三 典型相关分析

典型相关是一种特定的相关,它指的是 i th 典型变量对中Ui和Vi的相关性
在这里插入图片描述
典型相关分析的目的就是将ρi*最大化,需要找到一种关于X和Y的线性组合,使得上述的关联系数最大化。

### MATLAB 实现深度规范相关分析 (DeepCCA) #### 背景介绍 深度规范相关分析(Deep Canonical Correlation Analysis, DeepCCA)是一种用于学习两个视图之间深层特征表示的方法。这种方法通过神经网络来提取数据的不同视角之间的复杂关系,从而找到两者间的最大相关性[^1]。 #### 方法概述 为了在MATLAB中实现DeepCCA,可以采用以下策略: - 使用MATLAB内置的`trainNetwork`函数构建并训练多层感知器作为映射函数; - 定义损失函数为负的最大似然估计或其变体形式以优化模型参数; - 利用双线性变换将输入样本投影到低维空间,在该空间内计算两组变量的相关系数矩阵;最后最大化这些系数之和。 #### 示例代码 下面是一个简单的例子展示如何利用MATLAB搭建一个基本版本的DeepCCA框架: ```matlab % 加载所需工具箱 addpath('toolbox_path'); % 添加必要的路径 % 初始化随机种子以便重复实验结果 rng(0); % 假设X1,X2分别为来自不同模态的数据集 [X1Train,YTrain] = load_data(); [X2Train,~ ] = load_data(); numFeatures1 = size(X1Train, 2); numFeatures2 = size(X2Train, 2); layers_1 = [ featureInputLayer(numFeatures1,'Name','input1') fullyConnectedLayer(hiddenSize,'Name','fc1') reluLayer('Name','relu1')]; layers_2 = [ featureInputLayer(numFeatures2,'Name','input2') fullyConnectedLayer(hiddenSize,'Name','fcc2') reluLayer('Name','reluc2')]; lgraph = layerGraph(layers_1); lgraph = addLayers(lgraph,layers_2); dlnet = dlnetwork(lgraph); options = trainingOptions('sgdm',... 'MaxEpochs',max_epochs,... 'MiniBatchSize',mini_batch_size,... function loss = modelLoss(dlnet,X1,X2) [Y1,Y2] =~ forward(dlnet,{X1; X2}); corrMatrix = computeCorr(Y1,Y2); %[N x N], where N is batchsize loss = -sum(sum(corrMatrix)); end % 开始训练过程... doTrainingLoop(...); ``` 此段伪代码展示了创建两个独立但共享相同隐藏维度大小(`hiddenSize`)的全连接层结构,并将其组合成单个网络架构的过程。接着定义了一个自定义损失函数`modelLoss()`用来衡量两个输出向量间的关系强度。实际应用时还需要考虑更多细节如正则化项加入、更复杂的激活函数选择以及有效的初始化方案等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值