深度典型关联分析总结

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

基础知识https://www.cnblogs.com/pinard/p/6288716.html
对于上面这篇文章对于降维是降到1维,即假设X,Y都有n个样本 X = [ x 1 , x 2 , x 3 , . . . , x n ] x i ∈ R n 1 , y = [ y 1 , y 2 , y 3 , . . . . y n ] y i ∈ R n 2 X = [x_1, x_2, x_3, ..., x_n] x_i \in R^{n_1}, y = [y_1, y_2, y_3, .... y_n] y_i\in R^{n_2} X=[x1,x2,x3,...,xn]xiRn1,y=[y1,y2,y3,....yn]yiRn2 通过投影向量a,b投影到1维即
X ′ = [ x 1 ′ , x 2 ′ , x 3 ′ , . . . . x n ′ ] , x i ′ ∈ R 1 , Y ′ = [ y 1 ′ , y 2 ′ , y 3 ′ , . . . . y n ′ ] , y i ′ ∈ R 1 X' = [x'_1, x'_2, x'_3, ....x'_n], x'_i\in R^1, Y' = [y'_1, y'_2, y'_3, ....y'_n], y'_i\in R^1 X=[x1,x2,x3,....xn],xiR1,Y=[y1,y2,y3,....yn],yiR1此时可以通过奇异值分解或者特征值分解去求最大的相关性系数,此时如果投影到o维, A = [ a 1 , a 2 , . . . . a o ] T , a i ∈ R n A = [a_1, a_2,....a_o]^T, a_i \in R^n A=[a1,a2,....ao]T,aiRn,B也同理。此时该目标函数就可以写为 m a x i m i z e : t r ( A T S x y B ) s u b j e c t t o : A T S x x A = B T S y y B = I maximize: tr(A^T S_{xy}B)\\subjectto: A^TS_{xx}A=B^TS_{yy}B=I maximize:tr(ATSxyB)subjectto:ATSxxA=BTSyyB=I
这里沿用了上面文章的符号即S代表协方差,同时计算相关性系数的时候就选取top-o个奇异值的和

深度典型相关分析(Deep Canonical Correlation Analysis, DCCA)

深度典型相关分析呢是采用神经网络来代替投影过程,(这里采用的图片和说法都来自论文Deep Canonical Correlation Analysis)
网络结构
当输入的数据 X ∈ R n ∗ d 1 X \in R^{n*d1} XRnd1输出为o维即 X ′ ∈ R n ∗ o X' \in R^{n*o} XRno,Y也同理。此时在去计算CCA得到的值就是top-o个奇异值的和这里的目标函数使用的是 ( θ 1 , θ 2 ) = a r g m a x ( θ 1 , θ 2 ) c o r r ( f 1 ( X ; θ 1 ) , f 2 ( Y ; θ 2 ) ) ( \theta_1, \theta_2)=argmax_{ ( \theta_1, \theta_2)} corr(f_1(X;\theta_1), f_2(Y; \theta_2)) (θ1,θ2)=argmax(θ1,θ2)corr(f1(X;θ1),f2(Y;θ2)) θ \theta θ是指网络模型的参数,论文采取奇异值解法令 T = S x x − 1 / 2 S x y S y y − 1 / 2 T = S^{-1/2}_{xx}S_{xy}S^{-1/2}_{yy} T=Sxx1/2SxySyy1/2
c o r r ( X ′ , Y ′ ) = ∣ ∣ T ∣ ∣ t r = t r ( T ′ T ) − 1 / 2 corr(X', Y') = ||T||_{tr} = tr(T'T)^{-1/2} corr(X,Y)=∣∣Ttr=tr(TT)1/2
为什么求T的奇异值要这么算因为,A’A 的迹等于A 的奇异值的平方和。详见https://zhuanlan.zhihu.com/p/29846048

基于深度典型相关分析的脑网络特征和眼动特征的融合,可以使用Python中的多个库来实现。以下是一个简单的实现示例: 1. 导入所需的库 ``` python import numpy as np from sklearn.cross_decomposition import CCA from keras.layers import Input, Dense, concatenate from keras.models import Model ``` 2. 准备数据 假设我们有两个数据集,一个是脑网络特征,另一个是眼动特征。每个数据集都有N个样本和D1或D2个特征。我们可以将这两个数据集分别存储在numpy数组X1和X2中。 ``` python X1 = np.random.rand(N, D1) X2 = np.random.rand(N, D2) ``` 3. 进行深度典型相关分析 使用sklearn库中的CCA函数进行深度典型相关分析。我们可以设置n_components参数为1,以获得一个典型变量。然后,我们可以使用transform函数将数据集转换为新的典型变量表示形式。 ``` python cca = CCA(n_components=1) cca.fit(X1, X2) X1_c, X2_c = cca.transform(X1, X2) ``` 4. 构建深度神经网络 使用Keras库中的函数构建深度神经网络模型。我们可以使用Input函数定义输入层,Dense函数定义隐藏层和输出层,并使用concatenate函数将两个输入层连接起来。 ``` python input1 = Input(shape=(1,)) hidden1 = Dense(10, activation='relu')(input1) output1 = Dense(1)(hidden1) input2 = Input(shape=(1,)) hidden2 = Dense(10, activation='relu')(input2) output2 = Dense(1)(hidden2) merge = concatenate([output1, output2]) model = Model(inputs=[input1, input2], outputs=merge) ``` 5. 训练模型 使用Keras库中的函数编译和训练模型。我们可以使用mean_squared_error作为损失函数,使用adam作为优化器,并设置epoch和batch_size参数。 ``` python model.compile(loss='mean_squared_error', optimizer='adam') model.fit([X1_c, X2_c], y, epochs=100, batch_size=32) ``` 在这个示例中,y是我们的目标变量,可以是任何我们想要预测的变量。 6. 预测结果 使用训练好的模型进行预测。我们可以使用predict函数将X1和X2转换为典型变量表示形式,并将它们输入到我们的模型中进行预测。 ``` python X1_pred, X2_pred = cca.transform(X1, X2) y_pred = model.predict([X1_pred, X2_pred]) ``` 这是一个简单的实现示例,可以根据实际情况进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值