典型相关分析(cca)原理_CCA典型关联分析原理与Python案例
文章來源于"腦機接口社區"
CCA典型關聯分析原理與Python案例?mp.weixin.qq.comRose今天分享一下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 qualitativenSubj = 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<thresh] = 0 _ = cortex.quickflat.make_figure(cortex.Volume(corrs, subjName, subjTransform, cmap = cm.PuBuGn_r,vmin = 0., vmax = 1.), with_curvature = True)參考
腦機接口社區:CCA典型關聯分析原理與Python案例
點擊上面動圖掃描二維碼,關注我們總結
以上是生活随笔為你收集整理的典型相关分析(cca)原理_CCA典型关联分析原理与Python案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编程基础怎么学英语_英语不行
- 下一篇: 什么是python自动化脚本_Pytho