文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.com

Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用很多,很有必要熟悉其原理。

CCA典型相关分析

CCA(canonical correlation analysis)利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1和V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体相关性。

1936年,Hotelling提出典型相关分析。考虑两组变量的线性组合, 并研究它们之间的相关系数p(u,v).在所有的线性组合中, 找一对相关系数最大的线性组合, 用这个组合的单相关系数来表示两组变量的相关性, 叫做两组变量的典型相关系数, 而这两个线性组合叫做一对典型变量。在两组多变量的情形下, 需要用若干对典型变量才能完全反映出它们之间的相关性。下一步, 再在两组变量的与u1,v1不相关的线性组合中, 找一对相关系数最大的线性组合, 它就是第二对典型变量, 而且p(u2,v2)就是第二个典型相关系数。这样下去, 可以得到若干对典型变量, 从而提取出两组变量间的全部信息。

典型相关分析的实质就是在两组随机变量中选取若干个有代表性的综合指标(变量的线性组合), 用这些指标的相关关系来表示原来的两组变量的相关关系。这在两组变量的相关性分析中, 可以起到合理的简化变量的作用; 当典型相关系数足够大时, 可以像回归分析那样, 由- 组变量的数值预测另一组变量的线性组合的数值。

原理描述

案例实现

# 导入工具包

import h5py

import rcca

import sys

import numpy as np

import cortex

zscore = lambda d: (d-d.mean(0))/d.std(0)

第一步:加载数据

请从CRCNS下载数据:http://crcns.org/data-sets/vc/vim-2以下分析假定该数据位于当前目录中名为“ data”的目录中。

data = []

vdata = []

numSubjects = 3

# subjects 是3个受试者列表.

subjects = ['S1', 'S2', 'S3']

# xfms 是Pycortex中变换名称的列表,该名称用于对齐每个受试者的功能和解剖数据。

xfms = ['S1_xfm', 'S2_xfm', 'S3_xfm']

dataPath ="./data/VoxelResponses_subject%d.mat"

for subj in range(numSubjects):

# 打开数据

f = h5py.File(dataPath % (subj+1),'r')

# 获取数据大小

datasize = (int(f["ei"]["datasize"].value[2]),int(f["ei"]["datasize"].value[1]),int(f["ei"]["datasize"].value[0]))

# 从Pycortex获取皮质面罩

mask = cortex.db.get_mask(subjects[subj], xfms[subj], type = 'thick')

# 获取该受试者的训练数据

data_subj = np.nan_to_num(zscore(np.nan_to_num(f["rt"].value.T)))

data.append(data_subj.reshape((data_subj.shape[0],)+datasize)[:, mask])

# 获取受试者的验证数据

vdata_subj = np.nan_to_num(zscore(np.nan_to_num(f["rv"].value.T)))

vdata.append(vdata_subj.reshape((vdata_subj.shape[0],)+datasize)[:, mask])

第二步:定义CCA参数

# 这里设置1e-4和1e2之间的一系列正则化值

regs = np.array(np.logspace(-4, 2, 10))

# 这里考虑3到10之间的成分数量

numCCs = np.arange(3, 11)

# 初始化cca模型

cca = rcca.CCACrossValidate(numCCs=numCCs, regs=regs)

第三步:对数据训练,分析并保存分析结果

"""

说明:

由于数据量大,此分析的计算量很大。

在笔记本中运行它会花费大量时间,因此建议对其进行并行化和/或在计算机群集上运行它,然后加载结果以进行可视化。

"""

# 利用cca训练数据

cca.train(data)

# 利用cca对验证数据进行验证

cca.validate(vdata)

# 计算方差,解释每个体素中的验证响应

cca.compute_ev(vdata)

# 保存分析结果

cca.save("./data/CCA_results.hdf5")

第四步:可视化分析结果

# 导入可视化工具包

%matplotlib inline

import matplotlib.pyplot as plt

# 导入Brewer色彩图以进行可视化

from brewer2mpl import qualitative

nSubj = len(cca.corrs)

nBins = 30

bmap = qualitative.Set1[nSubj]

f = plt.figure(figsize = (8, 6))

ax = f.add_subplot(111)

for s in range(nSubj):

# 绘制所有三个对象的所有体素之间的相关性直方图

ax.hist(cca.corrs[s], bins = nBins, color = bmap.mpl_colors[s], histtype="stepfilled", alpha = 0.6)

plt.legend(['Subject 1', 'Subject 2', 'Subject 3'], fontsize = 16)

ax.set_xlabel('Prediction correlation', fontsize = 20)

ax.set_ylabel('Number of voxels', fontsize = 20)

ax.set_title("Prediction performance across voxels", fontsize = 20)

# p <0.05时的显着性阈值(针对多次比较进行了校正)

# 重要性是使用渐近方法计算的(有关详细信息,请参见论文文本)

thresh = 0.0893

ax.axvline(x = thresh, ymin = 0, ymax = 7000, linewidth = 2, color = 'k')

ax.text(thresh+0.05, 5000, 'p<0.05', fontsize = 16)

ax.set_xticklabels(0.1*np.arange(-8, 11, 2), fontsize = 16)

ax.set_yticklabels(np.arange(0, 10000, 1000), fontsize = 16)

该图显示了皮质图上一个对象的跨学科预测结果,即预测的验证响应和实际的验证响应之间的相关性。不重要的相关性(p <0.05,已针对多个比较进行校正)设置为0。

import cortex

from matplotlib import cm

from copy import deepcopy

subj = 0

subjName = "S1"

subjTransform = "S1_xfm"

corrs = deepcopy(cca.corrs[subj])

# 将所有低于显着性阈值的体素设置为0

corrs[corrs

_ = cortex.quickflat.make_figure(cortex.Volume(corrs, subjName,

subjTransform,

cmap = cm.PuBuGn_r,

vmin = 0., vmax = 1.), with_curvature = True)

参考点击上面动图扫描二维码,关注我们

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

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

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

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

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

  3. CCA典型关联分析原理与Python案例

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

  4. 典型相关分析_微生物多样研究—微生物深度分析概述

    一.微生物深度分析方法核心思想 复杂微生物群落解构的核心思想: 不预设任何假定,客观地观测整个微生物组所发生的一系列结构性变化特征,最终识别出与疾病或所关注的表型相关的关键微生物物种.基因和代谢产物. ...

  5. anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...

  6. 关联分析——关联规则应用及案例

    数据挖掘最早使用的方法是关联分析,主要应用于零售业.其中最有名的是售货 篮分析,帮助售货商制定销售策略.数据挖掘是从海量的数据里寻找有价值的信息和数据.数据挖掘中常用的算法有:关联规则分析法(解决事件 ...

  7. 随机森林分类算法python代码_随机森林的原理及Python代码实现

    原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...

  8. python相关性分析模型,相关性分析原理及Python实战

    本文阅读时间大概在8分钟. 相关性分析 我们常说的相关性分析是分析两个变量之间线性相关程度的方法,其相关性强度的度量即为相关性系数.现实中很多事物间都拥有或多或少的相关性,例如,房屋面积对价格的影响, ...

  9. 用python对股票进行可视化分析_使用Python对股票进行可视化分析

    前言 本文通过对 一.数据爬取 博主采用的数据爬取方式是:利用python的财经数据包tushare,就直接可以将你想获取的数据下载下来,它也是有接口的,利用不同的接口可以获取不同的数据. 代码如下: ...

最新文章

  1. 连接网络计算机密码错误,局域网电脑连接提示网络错误怎么解决
  2. 《从零开始学Swift》学习笔记(Day 6)——哎呀常量和变量都该什么时候用啊?...
  3. 小白科普:Java EE vs J2EE vs Jakarta EE
  4. Spring MVC防御CSRF、XSS和SQL注入攻击
  5. 修改Jupyter Notebook默认工作目录
  6. linux创建了目录复制不存在,Linux:复制并创建目标目录,如果它不存在
  7. [入门系列]什么是面向服务的体系结构(SOA)?
  8. 保险公司智能运营系统——软件需求规格说明
  9. 坚守,一个烂俗的词,驱动人生带它走过了15年
  10. 色彩心理学在网站设计中的运用
  11. 计算机按电源键无法反应,笔记本无法正常开机,按下电源键无任何反应要过一段时间才可以开机...
  12. 微信小程序:点marker,线polyline,面polygons的渲染
  13. React 接入 Ueditor + xiumi
  14. 类的初始化以及实例化
  15. JavaScript工具函数宝典(内含95个函数)
  16. 代码: 0x80131500:应用商店打不开
  17. js实现轮播图(简单滚动轮播)
  18. charles 过期了怎么办
  19. 【电力负荷预测】模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测【含Matlab源码 1454期】
  20. 农行计算机类笔试好过吗,2020中国农业银行招聘笔试要多少分才能进入面试?...

热门文章

  1. 南京邮电大学C语言实验报告六
  2. pc串口调试工具与安卓app通讯,pc及手机串口配对方法
  3. 【调剂】国家蛋白质科学中心·北京贺福初院士课题组招收硕士研究生
  4. [翻译]利用顶点位移的VR畸变校正
  5. 【Codecs系列】AVS3关键技术、性能和复杂度分析
  6. 基于javaweb+mysql的校园快递物流管理系统
  7. 基于SSM+Redis+RocketMQ实现的校园快递配送代拿管理系统
  8. mysql dbhelper 下载_DbHelperMySQL
  9. java 时间转换工具类 yyyyMMdd HH:mm
  10. 微信小程序自定义导航栏机型适配--底部Tabbar--view高度--底部按钮适配