原文地址:https://www.cnblogs.com/pinard/p/6288716.html
典型關聯分析(Canonical Correlation Analysis,以下簡稱CCA)是最常用的挖掘數據關聯關系的算法之一。比如我們拿到兩組數據,第一組是人身高和體重的數據,第二組是對應的跑步能力和跳遠能力的數據。那么我們能不能說這兩組數據是相關的呢?CCA可以幫助我們分析這個問題。
1. CCA概述
在數理統計里面,我們都知道相關系數這個概念。假設有兩組一維的數據集X和Y,則相關系數ρρ 的定義為:
其中cov(X,Y)cov(X,Y) 是X和Y的協方差,而D(X),D(Y)D(X),D(Y) 分別是X和Y的方差。相關系數ρρ 的取值為[-1,1], ρρ 的絕對值越接近於1,則X和Y的線性相關性越高。越接近於0,則X和Y的線性相關性越低。
雖然相關系數可以很好的幫我們分析一維數據的相關性,但是對於高維數據就不能直接使用了。拿上面我們提到的,如果X是包括人身高和體重兩個維度的數據,而Y是包括跑步能力和跳遠能力兩個維度的數據,就不能直接使用相關系數的方法。那我們能不能變通一下呢?CCA給了我們變通的方法。
CCA使用的方法是將多維的X和Y都用線性變換為1維的X'和Y',然后再使用相關系數來看X'和Y'的相關性。將數據從多維變到1位,也可以理解為CCA是在進行降維,將高維數據降到1維,然后再用相關系數進行相關性的分析。下面我們看看CCA的算法思想。
2. CCA的算法思想
上面我們提到CCA是將高維的兩組數據分別降維到1維,然后用相關系數分析相關性。但是有一個問題是,降維的標准是如何選擇的呢?回想下主成分分析PCA,降維的原則是投影方差最大;再回想下線性判別分析LDA,降維的原則是同類的投影方差小,異類間的投影方差大。對於我們的CCA,它選擇的投影標准是降維到1維后,兩組數據的相關系數最大。
現在我們具體來討論下CCA的算法思想。假設我們的數據集是X和Y,X為n1×mn1×m 的樣本矩陣。Y為n2×mn2×m 的樣本矩陣.其中m為樣本個數,而n1,n2n1,n2 分別為X和Y的特征維度。
對於X矩陣,我們將其投影到1維,或者說進行線性表示,對應的投影向量或者說線性系數向量為aa , 對於Y矩陣,我們將其投影到1維,或者說進行線性表示,對應的投影向量或者說線性系數向量為bb , 這樣X ,Y投影后得到的一維向量分別為X',Y'。我們有
我們CCA的優化目標是最大化ρ(X′,Y′)ρ(X′,Y′) 得到對應的投影向量a,ba,b ,即
在投影前,我們一般會把原始數據進行標准化,得到均值為0而方差為1的數據X和Y。這樣我們有:
由於我們的X,Y的均值均為0,則
令SXY=cov(X,Y)SXY=cov(X,Y) ,則優化目標可以轉化為:
由於分子分母增大相同的倍數,優化目標結果不變,我們可以采用和SVM類似的優化方法,固定分母,優化分子,具體的轉化為:
也就是說,我們的CCA算法的目標最終轉化為一個凸優化過程,只要我們求出了這個優化目標的最大值,就是我們前面提到的多維X和Y的相關性度量,而對應的a,ba,b 則為降維時的投影向量,或者說線性系數。
這個函數優化一般有兩種方法,第一種是奇異值分解SVD,第二種是特征分解,兩者得到的結果一樣,下面我們分別講解。
3. CCA算法的SVD求解
對於上面的優化目標,我們可以做一次矩陣標准化,就可以用SVD來求解了。
首先,我們令a=S−1/2XXu,b=S−1/2YYva=SXX−1/2u,b=SYY−1/2v ,這樣我們有:
也就是說,我們的優化目標變成下式:
仔細一看,如果將u和v看做矩陣M=S−1/2XXSXYS−1/2YYM=SXX−1/2SXYSYY−1/2 的某一個奇異值對應的左右奇異向量。那么利用奇異值分解,我們可以得到M=UΣVTM=UΣVT ,其中U,VU,V 分別為M的左奇異向量和右奇異向量組成的矩陣,而ΣΣ 為M的奇異值組成的對角矩陣。由於U,VU,V 所有的列都為標准正交基,則uTUuTU 和VTvVTv 得到一個只有一個標量值為1,其余標量值為0的向量。此時我們有
也就是說我們最大化uTS−1/2XXSXYS−1/2YYvuTSXX−1/2SXYSYY−1/2v ,其實對應的最大值就是某一組左右奇異向量所對應的奇異值的最大值。也就是將M做了奇異值分解后,最大的奇異值就是我們優化目標的最大值,或者說我們的X和Y之間的最大相關系數。利用對應的左右奇異向量u,vu,v 我們也可以求出我們原始的X和Y的線性系數a=S−1/2XXu,b=S−1/2YYva=SXX−1/2u,b=SYY−1/2v 。
可以看出,SVD的求解方式非常簡潔方便。但是如果你不熟悉SVD的話,我們也可以用傳統的拉格朗日函數加上特征分解來完成這個函數的優化。
4. CCA算法的特征分解求解
特征分解方式就比較傳統了,利用拉格朗日函數,優化目標轉化為最大化下式:
分別對a,ba,b 求導並令結果為0,我們得到:
將上面第一個式子左乘aTaT ,第二個式子左乘bTbT ,並利用aTSXXa=1,bTSYYb=1aTSXXa=1,bTSYYb=1 ,我們得到
其實也就是說我們的拉格朗日系數就是我們要優化的目標。我們繼續將上面的兩個式子做整理,第一個式子左乘S−1XXSXX−1 ,第二個式子左乘S−1YYSYY−1 ,我們得到:
將上面第二個式子帶入第一個式子,我們得到
這個式子我們就熟悉了,這不就是特征分解嗎!要求最大的相關系數λλ ,我們只需要對矩陣N=S−1XXSXYS−1YYSYXN=SXX−1SXYSYY−1SYX 做特征分解,找出最大的特征值取平方根即可,此時最大特征值對應的特征向量即為X的線性系數aa 。
同樣的辦法,我們將上面第一個式子帶入第二個式子,我們得到
, 我們只需要對矩陣N′=S−1YYSYXS−1XXSXYN′=SYY−1SYXSXX−1SXY 做特征分解,找出最大的特征值取平方根即可,此時最大特征值對應的特征向量即為Y的線性系數bb 。
可以看出特征分解的方法要比SVD復雜,但是兩者求得的結果其實是等價的,只要利用SVD和特征分解之間的關系就很容易發現兩者最后的結果相同。
5. CCA算法流程
這里我們對CCA的算法流程做一個總結,以SVD方法為准。
輸入:各為m個的樣本X和Y,X和Y的維度都大於1
輸出:X,Y的相關系數ρρ ,X和Y的線性系數向量a和b
1)計算X的方差SXXSXX , Y的方差SYYSYY ,X和Y的協方差SXYSXY , Y和X的協方差SYX=STXYSYX=SXYT
2) 計算矩陣M=S−1/2XXSXYS−1/2YYM=SXX−1/2SXYSYY−1/2
3)對矩陣MM 進行奇異值分解,得到最大的奇異值ρρ ,和最大奇異值對應的左右奇異向量u,vu,v
4) 計算X和Y的線性系數向量a和b, a=S−1/2XXu,b=S−1/2YYva=SXX−1/2u,b=SYY−1/2v
可見算法流程並不復雜,但是要理解這個算法需要了解一些背景知識。
6. CCA算法小結
CCA算法廣泛的應用於數據相關度的分析,同時還是偏最小二乘法的基礎。但是由於它依賴於數據的線性表示,當我們的數據無法線性表示時,CCA就無法使用,此時我們可以利用核函數的思想,將數據映射到高維后,再利用CCA的思想降維到1維,求對應的相關系數和線性關系,這個算法一般稱為KCCA。
此外,我們在算法里只找了相關度最大的奇異值或者特征值,作為數據的相關系數,實際上我們也可以像PCA一樣找出第二大奇異值,第三大奇異值,。。。得到第二相關系數和第三相關系數。然后對數據做進一步的相關性分析。但是一般的應用來說,找出第一相關系數就可以了。
有時候我們的矩陣SXX,SYYSXX,SYY 不可逆,此時我們得不到對應的逆矩陣,一般遇到這種情況可以對SXX,SYYSXX,SYY 進行正則化,將SXX,SYYSXX,SYY 變化為SXX+γI,SYY+γISXX+γI,SYY+γI ,然后繼續求逆。其中γγ 為正則化系數。