典型相关分析(Canonical Correlation Analysis)是一种分析多变量与多变量之间关系的统计方法。比如我们现在有自变量(x1,x2,x3)=((x_1,x_2,x_3)=((x1​,x2​,x3​)=(身高,体重,肺活量))),因变量(y1,y2)=(50(y_1,y_2)=(50(y1​,y2​)=(50米成绩,立定跳远成绩))),我们想要研究自变量对因变量的作用。如果分别求取xix_ixi​对yjy_jyj​的相关系数,在变量个数较多时比较麻烦。CCA与主成分分析的思想(见上一篇文章)类似,它利用原变量的线性组合来简化分析。

基本思想

设nnn维自变量X=(x1,x2,...,xn)X=(x_1,x_2,...,x_n)X=(x1​,x2​,...,xn​),mmm维因变量Y=(y1,y2,...,ym)Y=(y_1,y_2,...,y_m)Y=(y1​,y2​,...,ym​),我们想确定若干对典型相关变量(Ui,Vi)(U_i,V_i)(Ui​,Vi​),使得

Ui=ai1x1+ai2x2+...+ainxnU_i=a_{i1}x_1+a_{i2}x_2+...+a_{in}x_nUi​=ai1​x1​+ai2​x2​+...+ain​xn​
Vi=bi1y1+bi2y2+...+bimymV_i=b_{i1}y_1+b_{i2}y_2+...+b_{im}y_mVi​=bi1​y1​+bi2​y2​+...+bim​ym​

之间有最大的相关系数。此外,不同组的典型相关变量对之间应该不相关,即

ρ(Ui,Vj)=0(i≠j).\rho(U_i,V_j)=0(i \neq j).ρ(Ui​,Vj​)=0(i=j).

约定Ui,ViU_i,V_iUi​,Vi​均为标准化变量,即

var(Ui)=var(Vi)=1,var(U_i)=var(V_i)=1,var(Ui​)=var(Vi​)=1,其中var(X)var(X)var(X)为XXX的方差。

求解过程

1.设X为标准化后的自变量样本矩阵(x11⋯x1t⋮⋮xn1⋯xnt),其中n为自变量维数,t为样本数;1.设X为标准化后的自变量样本矩阵\begin{pmatrix}x_{11} &\cdots &x_{1t} \\ \vdots & & \vdots \\ x_{n1} & \cdots & x_{nt}\end{pmatrix},其中n为自变量维数,t为样本数;1.设X为标准化后的自变量样本矩阵⎝⎛​x11​⋮xn1​​⋯⋯​x1t​⋮xnt​​⎠⎞​,其中n为自变量维数,t为样本数;
2.设Y为标准化后的因变量样本矩阵(y11⋯y1t⋮⋮ym1⋯ymt),其中m为因变量维数,t为样本数;2.设Y为标准化后的因变量样本矩阵\begin{pmatrix}y_{11} &\cdots &y_{1t} \\ \vdots & & \vdots \\ y_{m1} & \cdots & y_{mt}\end{pmatrix},其中m为因变量维数,t为样本数;2.设Y为标准化后的因变量样本矩阵⎝⎛​y11​⋮ym1​​⋯⋯​y1t​⋮ymt​​⎠⎞​,其中m为因变量维数,t为样本数;
3.计算A=(XY)的协方差矩阵Cov(A);3.计算A=\begin{pmatrix}X\\ Y \end{pmatrix}的协方差矩阵Cov(A);3.计算A=(XY​)的协方差矩阵Cov(A);
4.设Cov(A)=(R11R12R21R22),其中R11为n×n矩阵,R22为m×m矩阵,R12和R21分别为n×m和m×n矩阵;4.设Cov(A)=\begin{pmatrix}R_{11} & R_{12} \\ R_{21} & R_{22}\end{pmatrix},其中R_{11}为n\times n 矩阵,R_{22}为m \times m 矩阵,R_{12}和R_{21}分别为n \times m 和 m \times n 矩阵;4.设Cov(A)=(R11​R21​​R12​R22​​),其中R11​为n×n矩阵,R22​为m×m矩阵,R12​和R21​分别为n×m和m×n矩阵;
5.令M=R11−1R12R22−1R21,计算M的所有正特征值λ1,λ2,...,λs(默认已经从大到小排序);5.令M=R_{11}^{-1}R_{12}R_{22}^{-1}R_{21},计算M的所有正特征值\lambda_1,\lambda_2,...,\lambda_s(默认已经从大到小排序);5.令M=R11−1​R12​R22−1​R21​,计算M的所有正特征值λ1​,λ2​,...,λs​(默认已经从大到小排序);
6.设αi为M的对应特征值λi的特征向量,k=1/αiTR11αi,将αi乘以k;6.设\pmb \alpha_i为M的对应特征值\lambda_i的特征向量,k=1/\sqrt{\pmb \alpha_i^TR_{11}\pmb\alpha_i},将\pmb \alpha_i 乘以k;6.设ααi​为M的对应特征值λi​的特征向量,k=1/ααiT​R11​ααi​​,将ααi​乘以k;
7.令βi=R22−1R21αi/ρi,其中ρi=λi即为第i对典型变量的相关系数;7.令\pmb \beta_i=R_{22}^{-1}R_{21}\pmb\alpha_i/\rho_i,其中\rho_i=\sqrt\lambda_i即为第i对典型变量的相关系数;7.令ββi​=R22−1​R21​ααi​/ρi​,其中ρi​=λ​i​即为第i对典型变量的相关系数;
8.αi,βi即为自变量和因变量各个变量前的系数(已经标准化).8.\pmb \alpha_i,\pmb\beta_i即为自变量和因变量各个变量前的系数(已经标准化).8.ααi​,ββi​即为自变量和因变量各个变量前的系数(已经标准化).

说明:
(1)(1)(1)在第444步中,RijR_{ij}Rij​代表协方差矩阵,111为自变量,222为因变量;
(2)(2)(2)第666步将特征向量乘以kkk是为了标准化典型变量(注意是直接乘在αi\pmb \alpha_iααi​上的)。

经过上述过程,我们求出了三个我们关心的参数:αi,βi和ρi(i=1,2,...,s)\pmb \alpha_i,\pmb \beta_i和\rho_i(i=1,2,...,s)ααi​,ββi​和ρi​(i=1,2,...,s).

证明过程很多资料都已经给出了(见最后参考材料部分),这里不再证明。

python实现

这里采用参考材料3(ppt)中的一个例子,要分析x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​与y1,y2,y3y_1,y_2,y_3y1​,y2​,y3​的关系,下面我们用python来实现一下:

样本一共20组,代码中再给出。

from math import sqrt
import numpy as npclass CCA:'''# 说明该类用于典型相关分析。# 参数x_dataset 自变量数据,以[样本1, 样本2, ..., 样本t] 给出。y_dataset 因变量数据,以[样本1, 样本2, ..., 样本t] 给出。x_dataset 和 y_dataset 的样本应该一一对应。(第i个自变量决定第i个因变量)'''def __init__(self, x_dataset, y_dataset):# 需要对数据转置一下,才能跟上文对上self.x_dataset = np.array(x_dataset, dtype = 'float64').Tself.y_dataset = np.array(y_dataset, dtype = 'float64').T'''结果以三元组(rho, alpha, beta)形式给出:- rho: 典型变量的相关系数- alpha: 自变量系数- beta: 因变量系数'''def fit(self):A = []for sample in self.x_dataset:A.append(list(sample))for sample in self.y_dataset:A.append(list(sample))# 构造上面提到的A矩阵A = np.array(A, dtype = 'float64')# 标准化: 减去每行均值再除以标准差 for i in range(A.shape[0]):avg = np.mean(A[i])std = np.std(A[i])A[i] = (A[i] - avg) / std# bias = True 即计算时不采用对方差的无偏修正(除以n-1,样本方差)# 这里只是为了跟ppt里的数据对上,实际可以取消这个可选参数Cov = np.cov(A, bias = True)n = self.x_dataset.shape[0]R_11 = np.matrix(Cov[:n, :n])R_12 = np.matrix(Cov[:n, n:])R_21 = np.matrix(Cov[n:, :n])R_22 = np.matrix(Cov[n:, n:])M = np.linalg.inv(R_11) * R_12 * np.linalg.inv(R_22) * R_21N = np.linalg.inv(R_22) * R_21 * np.linalg.inv(R_11) * R_12eig1, vector1 = np.linalg.eig(M)data = []for i in range(len(eig1)):# 若为0(精度误差,改为"绝对值小于一个很小的值")if abs(eig1[i]) < 1e-10:continue# 下面变量与上面步骤中的意义相同rho = np.round(sqrt(eig1[i]), decimals = 5)alpha = np.round(vector1[:, i], decimals = 5)k = 1 / (alpha.T * R_11 * alpha)alpha *= sqrt(k)beta = np.round(np.linalg.inv(R_22) * R_21 * alpha / rho, decimals = 5)# 三元组分别为相关系数, 自变量系数, 因变量系数data.append((rho, alpha, beta))data.sort(key = lambda x: x[0], reverse = True)return data

结果:

# 为了便于观察做了格式调整
[
(0.79561,    # 第一对典型变量
array([[ 0.7753969 ],[-1.5793479 ],[ 0.05911508]]),    # 自变量系数(第一对)
array([[ 0.3495 ],[ 1.05401],[-0.71642]])),            # 因变量系数(第一对)
(0.20056,    # 第二对
array([[-1.88437283],[ 1.18065335],[-0.23110043]]),
array([[-0.37555],[ 0.12347],[ 1.06216]])),
(0.07257,    # 第三对
array([[-0.19098071],[ 0.50601614],[ 1.05078388]]),
array([[-1.29659],[ 1.23682],[-0.41883]]))
]

结论:
我们得到了第一对典型变量
U1=0.7754x1−1.5793x2+0.0591x3U_1=0.7754x_1-1.5793x_2+0.0591x_3U1​=0.7754x1​−1.5793x2​+0.0591x3​
V1=0.3495y1+1.054y2−0.7164y3V_1=0.3495y_1+1.054y_2-0.7164y_3V1​=0.3495y1​+1.054y2​−0.7164y3​,
且它们的相关系数ρ1=0.79561\rho_1=0.79561ρ1​=0.79561,是高度相关的。此外,x2x_2x2​即腰围的系数为−1.5793,-1.5793,−1.5793,是绝对值最大的,说明腰围对成绩会有很大影响;x3x_3x3​即脉搏的系数仅为0.0590.0590.059,它的贡献比较低,说明脉搏这个自变量对成绩的影响可能不太大。可以类似地分析其它结果。如果一对典型变量不足以说明,还可以取第二对ρ2=0.20056\rho_2=0.20056ρ2​=0.20056继续分析。

参考材料

1.https://blog.csdn.net/weixin_44333889/article/details/119379776
2.https://zhuanlan.zhihu.com/p/372774724
3.https://max.book118.com/html/2019/0828/5343340333002121.shtm(这里提供该ppt的下载。)

典型相关分析(CCA)及其python实现相关推荐

  1. 典型相关分析(cca)原理_CCA典型关联分析原理与Python案例

    文章来源于"脑机接口社区" CCA典型关联分析原理与Python案例​mp.weixin.qq.com Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑 ...

  2. 基于典型相关分析(CCA)的多元变化检测算法(MAD)

    基于典型相关分析的多元变化检测算法 1 典型相关分析(CCA) 2 多元变化检测(MAD) 3 实验 链接 多元变化检测算法(Multivariate Alteration Detection,MAD ...

  3. matlab CCA标准化,典型相关分析(CCA)附算法应用及程序

    <典型相关分析(CCA)附算法应用及程序>由会员分享,可在线阅读,更多相关<典型相关分析(CCA)附算法应用及程序(15页珍藏版)>请在人人文库网上搜索. 1.典范相关分析摘要 ...

  4. 典型相关分析(CCA)相关资料

    典型相关分析的基本思想 Canonical Correlation Analysis CCA典型相关分析 (canonical correlation analysis)利用综合变量对之间的相关关系来 ...

  5. 典型相关分析介绍及python实现

    在处理单个高维数据时,通过可以通过LDA,PCA,等等方法进行降维处理,但是如果某两个数据来自同一个样本,但是数据类型不同,差距巨大时,怎么办呢?这个时候就是典型相关性分析(Canonical Cor ...

  6. 典型相关分析 python_CCA典型关联分析原理与Python案例

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Hello,大家好! Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用 ...

  7. 典型相关分析python实现_CCA典型关联分析原理与Python案例

    文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.com Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电 ...

  8. 数学建模 典型相关分析Canonical Correlation analysis

    典型相关分析CCA和主成分分析PCA非常相似,都是通过现有变量的线性组合构造新的综合变量以实现减少变量数目但代表几乎同样多的信息的目的.只是CCA分析的是两组变量,是要把每一组变量用一个线性组合综合变 ...

  9. 典型相关分析(Canonical Correlation Analysis,CCA)原理及Python、MATLAB实现

    随着对CCA的深入研究,是时候对CCA进行一下总结了. 本菜鸡主要研究方向为故障诊断,故会带着从应用角度进行理解. 典型相关分析 基本原理 从字面意义上理解CCA,我们可以知道,简单说来就是对不同变量 ...

  10. CCA:典型相关分析

    1.典型相关分析的基本思想 首先,什么是非典型的即经典的相关分析.给你两组变量X=[x1,x2,...,xm],Y=[y1,y2,...,yn],要研究X和Y之间的相关性,就是要得到一个X和Y的协方差 ...

最新文章

  1. repomd.xml错误14 not found
  2. WeakReference类详解
  3. vscode上传GitHub
  4. loader与plugin,module与chunk,compiler与compilation
  5. 10.1 意境级讲解关系抽取
  6. php遍历目录与文件夹的多种方法详解
  7. php list() ecah(),PHP each()与list()函数
  8. 通达信资金净流入公式_净流入副图源码指标 通达信 贴图
  9. python修改第三方库重写_对Python第三方库,再次封装
  10. nodejs轻量型个人文档管理系统
  11. 深度剖析JAVA软件工程师
  12. 现代测试技术与软件关系大吗,2013.现代测试技术.复习要点.docx
  13. 入门阿里云Dataphin(1)
  14. 计算机二级c++考试
  15. 华为各类工程师通信基础面试题库以及答案
  16. javaWeb重定向
  17. 编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。
  18. tp5 接收图片_TP5框架实现上传多张图片的方法分析
  19. apicloud 心得 绝对路径
  20. PHP 使用 hprose RPC 服务 系列文章之二——Codeigniter3中使用Hprose

热门文章

  1. Node.js下载与安装教程
  2. 高质量程序好文分享之王垠《编程的智慧》
  3. linux安装windows常用中文字体库
  4. fx2n4ad模块中文手册_特殊功能模块FX2N-4AD用户指南手册三菱FX2N-4AD手册 - 广州凌控...
  5. 常用算法案例之贪心法(C语言)
  6. java 显示数据库_java连接数据库并显示数据
  7. pycharm和python解释器安装
  8. 数学建模常用模型和算法介绍
  9. 考研数据结构代码总结
  10. keil+flymcu+CubeMX开发STM32F407