溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

發(fā)布時(shí)間:2021-10-26 14:46:17 來(lái)源:億速云 閱讀:269 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了CCA的相關(guān)原理以及Python應(yīng)用是怎樣的,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

今天分享一下CCA的相關(guān)原理以及Python應(yīng)用,CCA在EEG等腦電數(shù)據(jù)的特征提取中使用很多,很有必要熟悉其原理。

CCA典型相關(guān)分析

CCA(canonical correlation analysis)利用綜合變量對(duì)之間的相關(guān)關(guān)系來(lái)反映兩組指標(biāo)之間的整體相關(guān)性的多元統(tǒng)計(jì)分析方法。它的基本原理是:為了從總體上把握兩組指標(biāo)之間的相關(guān)關(guān)系,分別在兩組變量中提取有代表性的兩個(gè)綜合變量U1和V1(分別為兩個(gè)變量組中各變量的線性組合),利用這兩個(gè)綜合變量之間的相關(guān)關(guān)系來(lái)反映兩組指標(biāo)之間的整體相關(guān)性。


1936年,Hotelling提出典型相關(guān)分析。考慮兩組變量的線性組合, 并研究它們之間的相關(guān)系數(shù)p(u,v).在所有的線性組合中, 找一對(duì)相關(guān)系數(shù)最大的線性組合, 用這個(gè)組合的單相關(guān)系數(shù)來(lái)表示兩組變量的相關(guān)性, 叫做兩組變量的典型相關(guān)系數(shù), 而這兩個(gè)線性組合叫做一對(duì)典型變量。在兩組多變量的情形下, 需要用若干對(duì)典型變量才能完全反映出它們之間的相關(guān)性。下一步, 再在兩組變量的與u1,v1不相關(guān)的線性組合中, 找一對(duì)相關(guān)系數(shù)最大的線性組合, 它就是第二對(duì)典型變量, 而且p(u2,v2)就是第二個(gè)典型相關(guān)系數(shù)。這樣下去, 可以得到若干對(duì)典型變量, 從而提取出兩組變量間的全部信息。

典型相關(guān)分析的實(shí)質(zhì)就是在兩組隨機(jī)變量中選取若干個(gè)有代表性的綜合指標(biāo)(變量的線性組合), 用這些指標(biāo)的相關(guān)關(guān)系來(lái)表示原來(lái)的兩組變量的相關(guān)關(guān)系。這在兩組變量的相關(guān)性分析中, 可以起到合理的簡(jiǎn)化變量的作用; 當(dāng)?shù)湫拖嚓P(guān)系數(shù)足夠大時(shí), 可以像回歸分析那樣, 由- 組變量的數(shù)值預(yù)測(cè)另一組變量的線性組合的數(shù)值。

原理描述


CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

案例實(shí)現(xiàn)

# 導(dǎo)入工具包import h6pyimport rccaimport sysimport numpy as npimport cortexzscore = lambda d: (d-d.mean(0))/d.std(0)

第一步:加載數(shù)據(jù)

請(qǐng)從CRCNS下載數(shù)據(jù):http://crcns.org/data-sets/vc/vim-2以下分析假定該數(shù)據(jù)位于當(dāng)前目錄中名為“ data”的目錄中。

data = []vdata = []numSubjects = 3# subjects 是3個(gè)受試者列表.subjects = ['S1', 'S2', 'S3']# xfms 是Pycortex中變換名稱的列表,該名稱用于對(duì)齊每個(gè)受試者的功能和解剖數(shù)據(jù)。xfms = ['S1_xfm', 'S2_xfm', 'S3_xfm']dataPath ="./data/VoxelResponses_subject%d.mat"for subj in range(numSubjects):    # 打開(kāi)數(shù)據(jù)    f = h6py.File(dataPath % (subj+1),'r')    #  獲取數(shù)據(jù)大小    datasize = (int(f["ei"]["datasize"].value[2]),int(f["ei"]["datasize"].value[1]),int(f["ei"]["datasize"].value[0]))    # 從Pycortex獲取皮質(zhì)面罩    mask = cortex.db.get_mask(subjects[subj], xfms[subj], type = 'thick')    # 獲取該受試者的訓(xùn)練數(shù)據(jù)    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])    # 獲取受試者的驗(yàn)證數(shù)據(jù)    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參數(shù)

# 這里設(shè)置1e-4和1e2之間的一系列正則化值regs = np.array(np.logspace(-4, 2, 10))# 這里考慮3到10之間的成分?jǐn)?shù)量numCCs = np.arange(3, 11)# 初始化cca模型cca = rcca.CCACrossValidate(numCCs=numCCs, regs=regs)

第三步:對(duì)數(shù)據(jù)訓(xùn)練,分析并保存分析結(jié)果

"""說(shuō)明:由于數(shù)據(jù)量大,此分析的計(jì)算量很大。在筆記本中運(yùn)行它會(huì)花費(fèi)大量時(shí)間,因此建議對(duì)其進(jìn)行并行化和/或在計(jì)算機(jī)群集上運(yùn)行它,然后加載結(jié)果以進(jìn)行可視化。"""# 利用cca訓(xùn)練數(shù)據(jù)cca.train(data)# 利用cca對(duì)驗(yàn)證數(shù)據(jù)進(jìn)行驗(yàn)證cca.validate(vdata)# 計(jì)算方差,解釋每個(gè)體素中的驗(yàn)證響應(yīng)cca.compute_ev(vdata)# 保存分析結(jié)果cca.save("./data/CCA_results.hdf5")

第四步:可視化分析結(jié)果

# 導(dǎo)入可視化工具包%matplotlib inlineimport matplotlib.pyplot as plt# 導(dǎo)入Brewer色彩圖以進(jìn)行可視化from brewer2mpl import qualitativenSubj = len(cca.corrs)nBins = 30bmap = qualitative.Set1[nSubj]f = plt.figure(figsize = (8, 6))ax = f.add_subplot(111)for s in range(nSubj):    # 繪制所有三個(gè)對(duì)象的所有體素之間的相關(guān)性直方圖    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時(shí)的顯著性閾值(針對(duì)多次比較進(jìn)行了校正)# 重要性是使用漸近方法計(jì)算的(有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)論文文本)thresh = 0.0893ax.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)

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

該圖顯示了皮質(zhì)圖上一個(gè)對(duì)象的跨學(xué)科預(yù)測(cè)結(jié)果,即預(yù)測(cè)的驗(yàn)證響應(yīng)和實(shí)際的驗(yàn)證響應(yīng)之間的相關(guān)性。不重要的相關(guān)性(p <0.05,已針對(duì)多個(gè)比較進(jìn)行校正)設(shè)置為0。

import cortexfrom matplotlib import cmfrom copy import deepcopysubj = 0subjName = "S1"subjTransform = "S1_xfm"corrs = deepcopy(cca.corrs[subj])# 將所有低于顯著性閾值的體素設(shè)置為0corrs[corrs<thresh] = 0_ = cortex.quickflat.make_figure(cortex.Volume(corrs, subjName,                                                subjTransform,                                                cmap = cm.PuBuGn_r,                                               vmin = 0., vmax = 1.), with_curvature = True)

CCA的相關(guān)原理以及Python應(yīng)用是怎樣的

上述內(nèi)容就是CCA的相關(guān)原理以及Python應(yīng)用是怎樣的,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI