cca中的特征值

cca中的特征值,第1张

典型相关(CCA)手册1.典型相关分析(CCA)介绍典型相关分析(CCA)是研究两组多维变量之间的线性关系的一种统计方法。它寻找两个线性组合,使得两组多维变量通过此线性组合后,其相关最大。CCA可以定义为如下问题:有两组多维变量和。分别寻找向量和,使得和在向量和上的投影和之间的相关值最大。也就是使得下式中的最大:约束条件为.典型相关分析是主成分分析和因子分析的进一步发展, 是研究两组变量间的相互依赖关系, 把两组变量之间的相互关系变为研究两个新的变量之间的相关, 而且又不抛弃原来变量的信息, 这两个新的变量分别由第一组变量和第二组变量的线性组合构成, 并且两组变量的个数可以是不同的, 两组变量所代表的内容也可以是不同的。因此, 典型相关分析在实际问题中应用是十分广泛的。典型性相关分析与简单相关分析相比, 简单相关分析有时可能受某些因素的影响, 反映的是表面的而非本质的联系, 甚至有时是假象。所以, 典型性相关分析在相关分析中有其独特的作用。CCA在数据统计和信息挖掘方面有广泛应用[1-2]。CCA的介绍可以参阅basic文件夹中的文献。2. CCA计算步骤通过拉格朗日方法,构建如下拉格朗日算子:通过对Wx和Wy的求导可以得到:(1)(2)等式一两边乘以Wx,等式2两边乘以Wy,通过约束条件,可以解得.继续求解可以得到:其中X的自相关矩阵Cxx,Y的自相关矩阵Cyy,以及X和Y的互相关矩阵Cxy。至此,CCA问题求解可以转化为如下特征值分解问题,可以通过特征值分解取得Wx和Wy。3. CCA方法matlab实现在matlab中函数canoncorr 被用于实现CCA分析。该函数的表达形式为:[A,B,r,U,V] = canoncorr(X,Y)输入X,Y 为待分析的两组数据。它们具有相同的长度(行),但是特征维数(列)可以不同。令X的特征维数为m,Y的特征维数为n。

输出: r为一组相关值,其长度为min(m,n). A大小为m×min(m,n),其每一列为一组与X对应的权重系数。B大小为n×min(m,n),其每一列为一组与Y对应的权重系数。U和V为典型变量。U的每一列为数据X加权后的结果。V的每一列为数据Y加权后的结果。4.VC实现目前CCA方法的VC实现采用Matcom工具。MATCOM是MathWorks公司开发的为MATLAB中的M文件进行高效解释和调试的集成开发环境。Matcom可以把M文件编译成C++代码。因此使用十分方便。Matcom提供一种矩阵类Mm,该矩阵类封装了许多矩阵的基本 *** 作,使用十分方便。Code文件夹中,包含了原始M文件,和编译后的.CPP,.H文件,以及使用所需的库文件。并附带一个使用例子程序。5 仿真分析%% 产生矩阵X,Y,0-s5为一系列源信号。N=100s0=4*cos(2*pi*(0:N-1)*0.05)'s1=randn(100,1)s2=randn(100,1)s3=s0+randn(100,1)s4=randn(100,1)s5=randn(100,1)S=[s0,s1,s2,s3,s4,s5]% X,Y为源信号通过不同的线性组合C1,C2而得到的观测信号C1=randn(size(S,2),3)C2=randn(size(S,2),2)X=S*C1Y=S*C2% X,Y都由相同的源信号通过线性组合而成,因此他们之间在某些坐标系下是十分相关的。[A,B,r,U,V] = canoncorr(X,Y)% 通过典型相关分析,可以分别求得权重A,B.使得U,V之间的相关最大。figurefor ii=1:3subplot(3,3,(ii-1)*3+1)plot(X(:,ii))endfor ii=1:2subplot(3,3,(ii-1)*3+1+1)plot(Y(:,ii))

endfor ii=1:size(U,2)subplot(3,3,(ii-1)*3+3)plot(U(:,ii))end6. CCA方法在脑电处理中的应用Application文件夹中有两篇论文,分别介绍了CCA方法在脑电处理中的两种应用。第一篇为CCA方法在SSVEP-based BCI中的应用。第二篇为CCA方法被用于EEG成分分离。具体应用方法请参阅文献。7. CCA方法扩展1. Kernel Canonical Correlation Analysis(kCCA) [],[]为了提取两组变量之间的非线性关系,kCCA被提出来,该方法和SVM类似,具体算法和应用请才考文献。kCCA文件夹中有关于kCCA的介绍。2. Generalized canonical correlations analysis(CANCOR)为了解决超过两组变量之间的相关问题,提出了CANCOR方法。具体参阅文件夹CANCOR中的文献.参考文献[1] M. Borga, O. Friman, P. Lundberg, and H. Knutsson. A canonical correlation approach to exploratory data analysis in fMRI. In Proceedings of the ISMRM Annual Meeting, Honolulu, Hawaii, May 2002.[2] M. Borga and H. Knutsson. A canonical correlation approach to blind source separation. Tech-nical Report LiU-IMT-EX-0062, Department of Biomedical Engineering, Linkping Univer-sity, 2001.

5.9

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

CCA导读

典型相关(CCA)手册

1.典型相关分析(CCA)介绍

典型相关分析(CCA)是研究两组多维变量之间的线性关系的一种统计方法。它寻找两个线性组合,使得两组多维变量通过此线性组合后,其相关最大。CCA可以定义为如下问题:有两组多维变量和。分别寻找向量和,使得和在向量和上的投影和之间的相关值最大。也就是使得下式中的最大:

约束条件为.

第 1 页

典型相关分析是主成分分析和因子分析的进一步发展, 是研究两组变量间的相互依赖关系, 把两组变量之间的相互关系变为研究两个新的变量之间的相关, 而且又不抛弃原来变量的信息, 这两个新的变量分别由第一组变量和第二组变量的线性组合构成, 并且两组变量的个数可以是不同的, 两组变量所代表的内容也可以是不同的。因此, 典型相关分析在实际问题中应用是十分广泛的。典型性相关分析与简单相关分析相比, 简单相关分析有时可能受某些因素的影响, 反映的是表面的而非本质的联系, 甚至有时是假象。所以, 典型性相关分析在相关分析中有其独特的作用。CCA在数据统计和信息挖掘方面有广泛应用[1-2]。CCA的介绍可以参阅basic文件夹中的文献。

第 2 页

2. CCA计算步骤

通过拉格朗日方法,构建如下拉格朗日算子:

通过对Wx和Wy的求导可以得到:

(1)

(2)

等式一两边乘以Wx,等式2两边乘以Wy,通过约束条件,可以解得.继续求解可以得到:

其中X的自相关矩阵Cxx,Y的自相关矩阵Cyy,以及X和Y的互相关矩阵Cxy。

第 3 页

至此,CCA问题求解可以转化为如下特征值分解问题,可以通过特征值分解取得Wx和Wy。

3. CCA方法matlab实现

在matlab中函数canoncorr 被用于实现CCA分析。该函数的表达形式为:

[A,B,r,U,V] = canoncorr(X,Y)

输入X,Y 为待分析的两组数据。它们具有相同的长度(行),但是特征维数(列)可以不同。令X的特征维数为m,Y的特征维数为n。

输出: r为一组相关值,其长度为min(m,n). A大小为m×min(m,n),其每一列为一组与X对应的权重系数。B大小为n×min(m,n),其每一列为一组与Y对应的权重系数。U和V为典型变量。U的每一列为数据X加权后的结果。V的每一列为数据Y加权后的结果。

基于典型相关分析(Canonical Correlation Analysis, CCA)提出了一种特征融合方法。

首先,提取具有相同模式的两组特征向量,建立两组特征向量之间的相关准则函数,提取他们的规范相关特征,提取它们的规范相关特征,形成有效的判别向量;然后,当两个散射矩阵是奇异的时,解决了规范投影向量的问题,使得它适用于高维空间和小样本的情况,在这种意义上,CCA的适用范围被扩展。

信息融合包含三种级别:

在多变量统计分析中,通常需要研究两个随机向量的相关问题,即将两个随机向量的相关性研究转换为几对变量的相关性,这些变量是不相关的。

考虑到两个零均值随机向量X和Y,CCA找到一对方向a和b,最大化投影a1 =a^TX和b1 =a^TY之间的相关性,投影a1和b1被称为第一对规范变量。然后找到第二对规范变量a2和b2,它们与规范a1和b1不相关,并最大化它们之间的相关性。以此类推,直到提取出X和Y的所有相关特征。

为了研究X和Y的相关性,我们只需要分析几对规范变量的相关性

本人深度学习小白,想用matlab做两组传感器数据的神经网络特征融合,不知道我的想法对不对,我在工具箱里这么编写了一个基于AlexNet的神经网络模型,两组数据经过相同的卷积层,再通过一个additionLayer连接层绑两组数据连接起来,再通过三个全连接层,最后输出三个分类。

代码是通过深度学习工具箱生成的,如下

lgraph = layerGraph()

tempLayers = [

imageInputLayer([227 227 3],"Name","data1")

convolution2dLayer([11 11],96,"Name","conv1_1","BiasLearnRateFactor",2,"Stride",[4 4])

reluLayer("Name","relu1_1")

crossChannelNormalizationLayer(5,"Name","norm1_1","K",1)

maxPooling2dLayer([3 3],"Name","pool1_1","Stride",[2 2])

groupedConvolution2dLayer([5 5],128,2,"Name","conv1_2","BiasLearnRateFactor",2,"Padding",[2 2 2 2])

reluLayer("Name","relu1_2")

crossChannelNormalizationLayer(5,"Name","norm1_2","K",1)

maxPooling2dLayer([3 3],"Name","pool1_2","Stride",[2 2])

convolution2dLayer([3 3],384,"Name","conv1_3","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu1_3")

groupedConvolution2dLayer([3 3],192,2,"Name","conv1_4","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu1_4")

groupedConvolution2dLayer([3 3],128,2,"Name","conv1_5","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu1_5")

maxPooling2dLayer([3 3],"Name","pool1_5","Stride",[2 2])]

lgraph = addLayers(lgraph,tempLayers)

tempLayers = [

imageInputLayer([227 227 3],"Name","data2")

convolution2dLayer([11 11],96,"Name","conv2_1","BiasLearnRateFactor",2,"Stride",[4 4])

reluLayer("Name","relu2_1")

crossChannelNormalizationLayer(5,"Name","norm2_1","K",1)

maxPooling2dLayer([3 3],"Name","pool2_1","Stride",[2 2])

groupedConvolution2dLayer([5 5],128,2,"Name","conv2_2","BiasLearnRateFactor",2,"Padding",[2 2 2 2])

reluLayer("Name","relu2_2")

crossChannelNormalizationLayer(5,"Name","norm2_2","K",1)

maxPooling2dLayer([3 3],"Name","pool2_2","Stride",[2 2])

convolution2dLayer([3 3],384,"Name","conv2_3","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu2_3")

groupedConvolution2dLayer([3 3],192,2,"Name","conv2_4","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu2_4")

groupedConvolution2dLayer([3 3],128,2,"Name","conv2_5","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu2_5")

maxPooling2dLayer([3 3],"Name","pool2_5","Stride",[2 2])]

lgraph = addLayers(lgraph,tempLayers)

tempLayers = [

additionLayer(2,"Name","addition")

fullyConnectedLayer(4096,"Name","fc6","BiasLearnRateFactor",2)

reluLayer("Name","relu6")

dropoutLayer(0.5,"Name","drop6")

fullyConnectedLayer(4096,"Name","fc7","BiasLearnRateFactor",2)

reluLayer("Name","relu7")

dropoutLayer(0.5,"Name","drop7")

fullyConnectedLayer(3,"Name","fc8","BiasLearnRateFactor",2)

softmaxLayer("Name","prob")

classificationLayer("Name","classoutput")]

lgraph = addLayers(lgraph,tempLayers)

% 清理辅助变量

clear tempLayers

lgraph = connectLayers(lgraph,"pool1_5","addition/in1")

lgraph = connectLayers(lgraph,"pool2_5","addition/in2")

figure

plot(lgraph)

layers = lgraph.Layers

复制

画出来的图如下

输入图片读取处理的代码如下

%% 训练数据存储;

allImages1 = imageDatastore("E:\Data\old-new\CWT\1\",...

'IncludeSubfolders',true,...

'LabelSource','foldernames')

allImages2= imageDatastore("E:\Data\old-new\CWT\2\",...

'IncludeSubfolders',true,...

'LabelSource','foldernames')

%% 数据处理;

rng default

[imgsTrain1,imgsValidation1] = splitEachLabel(allImages1,0.8,'randomized')%按比例拆分 ImageDatastore 标签

disp(['Number of training images: ',num2str(numel(imgsTrain1.Files))])

disp(['Number of validation images: ',num2str(numel(imgsValidation1.Files))])

[imgsTrain2,imgsValidation2] = splitEachLabel(allImages2,0.8,'randomized')%按比例拆分 ImageDatastore 标签

disp(['Number of training images: ',num2str(numel(imgsTrain2.Files))])

disp(['Number of validation images: ',num2str(numel(imgsValidation2.Files))])

%% 处理输入的图片;

inputSize = layers(1).InputSize

augimgsTrain1 = augmentedImageDatastore(inputSize(1:2),imgsTrain1)% 调整图像大小以匹配网络输入层

augimgsValidation1 = augmentedImageDatastore(inputSize(1:2),imgsValidation1)

augimgsTrain2 = augmentedImageDatastore(inputSize(1:2),imgsTrain2)% 调整图像大小以匹配网络输入层

augimgsValidation2 = augmentedImageDatastore(inputSize(1:2),imgsValidation2)

augimgsTrain = combine(augimgsTrain1,augimgsTrain2)

% augimgsValidation = combine(augimgsValidation1,augimgsValidation2)

复制

但是训练时会一直报错,ValidationData设置为空因为我不知道怎么把augimgsValidation1 augimgsValidation2两个结构体的验证集放到一块,‘opts =’ 这行会报错误,所以上面也就注掉了

训练的代码如下

%% 设置参数进行训练

rng default

mbSize = 40

mxEpochs = 40

ilr = 1e-4

plt = 'training-progress'

opts = trainingOptions('sgdm',...

'InitialLearnRate',ilr, ...

'MaxEpochs',mxEpochs ,...

'MiniBatchSize',mbSize, ...

'ValidationData',[],...

'ExecutionEnvironment','multi-gpu',...

'Plots',plt)

[trainedAN,info2] = trainNetwork(augimgsTrain,layers,opts)

复制

报的错误如下图

有没有会用matlab做深度学习的大佬,帮我看看这个,万分感谢!

深度学习

matlab

神经网络

机器学习

迁移学习

一分钟了解直流变频空调

精选推荐

广告

mcca特征融合matlab代码

78下载·0评论

2019年1月26日

【火灾检测】基于matlab连通区域+SVM特征融合火灾检测【含Matlab源码 1223期】

1498阅读·3评论·7点赞

2021年8月17日

总结与归纳:深度神经网络中的数据融合方法

8124阅读·4评论·51点赞

2020年4月9日

基于SIFT特征的图像拼接融合(matlab+vlfeat实现)

1.2W阅读·6评论·4点赞

2019年4月27日

分类预测 | MATLAB实现CNN卷积神经网络多特征分类预测

1313阅读·0评论·1点赞

2022年9月7日

MATLAB中深度学习的多级神经网络构建

1349阅读·0评论·1点赞

2021年12月17日

灭菌器供应厂家

精选推荐

广告

(Note)神经网络中的特征融合方式(add/concate)

1733阅读·0评论·1点赞

2022年7月19日

在 Matlab 中连接不同大小的数组:此函数允许您连接不同大小的数组,并在需要时使用 NaN 填充。-matlab开发

22下载·0评论

2021年6月1日

【MATLAB强化学习工具箱】学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent

3883阅读·8评论·4点赞

2021年11月15日

python将大量图片拼接千面图_11. 图像合成与图像融合

426阅读·0评论·1点赞

2020年12月10日

图像融合方法

3098阅读·1评论·3点赞

2020年11月11日

MATLAB的图像融合设计

1004阅读·1评论·1点赞

2021年8月30日

matlab图像融合sift,基于SIFT特征的图像拼接融合(matlab+vlfeat实现)

403阅读·0评论·0点赞

2021年4月24日

【matlab】机器学习与人工智能期末课设,基于融合特征的以图搜图应用

209阅读·0评论·1点赞

2022年6月1日

回归预测 | MATLAB实现CNN-GRU(卷积门控循环单元)多输入单输出

2884阅读·1评论·0点赞

2022年4月13日

Matlab之深度学习工作流程

1521阅读·0评论·3点赞

2020年9月29日

Matlab实现CCA多模特征融合

2752阅读·8评论·3点赞

2020年12月30日

Matlab深度学习上手初探

3976阅读·0评论·1点赞

2022年4月10日

(多模态 / 多维度)特征融合

1.4W阅读·0评论·16点赞

2020年12月2日

去首页

看看更多热门内容

评论4

m0_62482485

兄嘚,这个问题解决了么?

2022.10.24

m0_62482485

兄嘚,这个问题解决了么?

2022.10.24

程序猿_悟空

呵呵


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12145650.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存