典型關聯分析(CCA)原理總結

典型關聯分析(Canonical Correlation Analysis,如下簡稱CCA)是最經常使用的挖掘數據關聯關係的算法之一。好比咱們拿到兩組數據,第一組是人身高和體重的數據,第二組是對應的跑步能力和跳遠能力的數據。那麼咱們能不能說這兩組數據是相關的呢?CCA能夠幫助咱們分析這個問題。算法

1、CCA概述

    在數理統計裏面,咱們都知道相關係數這個概念。假設有兩組一維的數據集X和Y,則相關係數\(\rho\)的定義爲:
\[ \rho(X,Y) = \frac{cov(X,Y)}{\sqrt{D(X)}\sqrt{D(Y)}} \]微信

    其中\(cov(X,Y)\)是X和Y的協方差,而\(D(X), D(Y)\)分別是X和Y的方差。相關係數\(\rho\)的取值爲[-1,1], \(\rho\)的絕對值越接近於1,則X和Y的線性相關性越高。越接近於0,則X和Y的線性相關性越低。函數

    雖然相關係數能夠很好的幫咱們分析一維數據的相關性,可是對於高維數據就不能直接使用了。拿上面咱們提到的,若是X是包括人身高和體重兩個維度的數據,而Y是包括跑步能力和跳遠能力兩個維度的數據,就不能直接使用相關係數的方法。那咱們能不能變通一下呢?CCA給了咱們變通的方法。優化

    CCA使用的方法是將多維的X和Y都用線性變換爲1維的X'和Y',而後再使用相關係數來看X'和Y'的相關性。將數據從多維變到1位,也能夠理解爲CCA是在進行降維,將高維數據降到1維,而後再用相關係數進行相關性的分析。下面咱們看看CCA的算法思想。spa

2、CCA的算法思想

    上面咱們提到CCA是將高維的兩組數據分別降維到1維,而後用相關係數分析相關性。可是有一個問題是,降維的標準是如何選擇的呢?回想下主成分分析PCA,降維的原則是投影方差最大;再回想下線性判別分析LDA,降維的原則是同類的投影方差小,異類間的投影方差大。對於咱們的CCA,它選擇的投影標準是降維到1維後,兩組數據的相關係數最大。io

    如今咱們具體來討論下CCA的算法思想。假設咱們的數據集是X和Y,X爲\(n_1 \times m\)的樣本矩陣。Y爲\(n_2 \times m\)的樣本矩陣.其中m爲樣本個數,而\(n_1,n_2\)分別爲X和Y的特徵維度。class

    對於X矩陣,咱們將其投影到1維,或者說進行線性表示,對應的投影向量或者說線性係數向量爲\(a\), 對於Y矩陣,咱們將其投影到1維,或者說進行線性表示,對應的投影向量或者說線性係數向量爲\(b\), 這樣X ,Y投影后獲得的一維向量分別爲X',Y'。咱們有
\[ X' = a^TX, Y'=b^TY \]基礎

    咱們CCA的優化目標是最大化\(\rho(X',Y')\)獲得對應的投影向量\(a,b\),即
\[ \underbrace{arg\;max}_{a,b}\frac{cov(X',Y')}{\sqrt{D(X')}\sqrt{D(Y')}} \]lambda

     在投影前,咱們通常會把原始數據進行標準化,獲得均值爲0而方差爲1的數據X和Y。這樣咱們有:
\[ cov(X',Y') = cov(a^TX, b^TY) = E(<;a^TX, b^TY>;) = E((a^TX)(b^TY)^T) = a^TE(XY^T)b \]方法

\[ D(X') = D(a^TX) = a^TE(XX^T)a \]
\[ D(Y') = D(b^TY) = b^TE(YY^T)b \]

    因爲咱們的X,Y的均值均爲0,則
\[ D(X) = cov(X,X) = E(XX^T), D(Y)= cov(Y,Y) = E(YY^T) \]
\[ cov(X,Y) = E(XY^T),  cov(Y,X) = E(YX^T) \]

    令\(S_{XY} =cov(X,Y)\),則優化目標能夠轉化爲:
\[ \underbrace{arg\;max}_{a,b}\frac{a^TS_{XY}b}{\sqrt{ a^TS_{XX}a}\sqrt{b^TS_{YY}b}} \]

    因爲分子分母增大相同的倍數,優化目標結果不變,咱們能夠採用和SVM相似的優化方法,固定分母,優化分子,具體的轉化爲:
\[ \underbrace{arg\;max}_{a,b}\;\;{a^TS_{XY}b} \]
\[ s.t. a^TS_{XX}a =1,\; b^TS_{YY}b =1 \]

     也就是說,咱們的CCA算法的目標最終轉化爲一個凸優化過程,只要咱們求出了這個優化目標的最大值,就是咱們前面提到的多維X和Y的相關性度量,而對應的\(a,b\)則爲降維時的投影向量,或者說線性係數。

    這個函數優化通常有兩種方法,第一種是奇異值分解SVD,第二種是特徵分解,二者獲得的結果同樣,下面咱們分別講解。

3、CCA算法的SVD求解

    對於上面的優化目標,咱們能夠作一次矩陣標準化,就能夠用SVD來求解了。

    首先,咱們令\(a=S_{XX}^{-1/2}u, b=S_{YY}^{-1/2}v\),這樣咱們有:
\[ a^TS_{XX}a =1 \Rightarrow u^TS_{XX}^{-1/2}S_{XX}S_{XX}^{-1/2}u =1  \Rightarrow  u^Tu=1 \]
\[ b^TS_{YY}b =1 \Rightarrow v^TS_{YY}^{-1/2}S_{YY}S_{YY}^{-1/2}v=1  \Rightarrow  v^Tv=1  \]
\[ a^TS_{XY}b = u^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v  \]
 

    也就是說,咱們的優化目標變成下式:
\[ \underbrace{arg\;max}_{u,v}u^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v \]
\[ s.t. u^Tu =1,\; v^Tv =1 \]
   

    仔細一看,若是將u和v看作矩陣\(M=S_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}\)的某一個奇異值對應的左右奇異向量。那麼利用奇異值分解,咱們能夠獲得\(M=U\Sigma V^T\),其中\(U,V\)分別爲M的左奇異向量和右奇異向量組成的矩陣,而\(\Sigma\)爲M的奇異值組成的對角矩陣。因爲\(U,V\)全部的列都爲標準正交基,則\(u^TU\)\(V^Tv\)獲得一個只有一個標量值爲1,其他標量值爲0的向量。此時咱們有
\[ u^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v = u^TU\Sigma V^Tv = \sigma_{uv} \]

    也就是說咱們最大化\(u^TS_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}v\),其實對應的最大值就是某一組左右奇異向量所對應的奇異值的最大值。也就是將M作了奇異值分解後,最大的奇異值就是咱們優化目標的最大值,或者說咱們的X和Y之間的最大相關係數。利用對應的左右奇異向量\(u,v\)咱們也能夠求出咱們原始的X和Y的線性係數\(a=S_{XX}^{-1/2}u, b=S_{YY}^{-1/2}v\)

    能夠看出,SVD的求解方式很是簡潔方便。可是若是你不熟悉SVD的話,咱們也能夠用傳統的拉格朗日函數加上特徵分解來完成這個函數的優化。

4、4. CCA算法的特徵分解求解  

    特徵分解方式就比較傳統了,利用拉格朗日函數,優化目標轉化爲最大化下式:
\[ J(a,b) = a^TS_{XY}b -\frac{\lambda}{2}(a^TS_{XX}a-1)-\frac{\theta}{2}(b^TS_{YY}b-1) \]

    分別對\(a,b\)求導並令結果爲0,咱們獲得:
\[ S_{XY}b-\lambda S_{XX}a=0 \]
\[ S_{YX}a-\theta S_{YY}b=0 \]

    將上面第一個式子左乘\(a^T\),第二個式子左乘\(b^T\),並利用\(a^TS_{XX}a =1,\; b^TS_{YY}b =1\),咱們獲得
\[ \lambda = \theta = a^TS_{XY}b \]

    其實也就是說咱們的拉格朗日系數就是咱們要優化的目標。咱們繼續將上面的兩個式子作整理,第一個式子左乘\(S_{XX}^{-1}\),第二個式子左乘\(S_{YY}^{-1}\),咱們獲得:
\[ S_{XX}^{-1}S_{XY}b=\lambda a \]
\[ S_{YY}^{-1}S_{YX}a = \lambda b \]

    將上面第二個式子帶入第一個式子,咱們獲得
\[ S_{XX}^{-1}S_{XY}S_{YY}^{-1}S_{YX}a=\lambda^2a \]

    這個式子咱們就熟悉了,這不就是特徵分解嗎!要求最大的相關係數\(\lambda \),咱們只須要對矩陣\(N=S_{XX}^{-1}S_{XY}S_{YY}^{-1}S_{YX}\)作特徵分解,找出最大的特徵值取平方根便可,此時最大特徵值對應的特徵向量即爲X的線性係數\(a\)

    一樣的辦法,咱們將上面第一個式子帶入第二個式子,咱們獲得
\[ S_{YY}^{-1}S_{YX}S_{XX}^{-1}S_{XY}b=\lambda^2b \]
, 咱們只須要對矩陣\(N’=S_{YY}^{-1}S_{YX}S_{XX}^{-1}S_{XY}\)作特徵分解,找出最大的特徵值取平方根便可,此時最大特徵值對應的特徵向量即爲Y的線性係數\(b\)

    能夠看出特徵分解的方法要比SVD複雜,可是二者求得的結果實際上是等價的,只要利用SVD和特徵分解之間的關係就很容易發現二者最後的結果相同。

5、CCA算法流程

    這裏咱們對CCA的算法流程作一個總結,以SVD方法爲準。

    輸入:各爲m個的樣本X和Y,X和Y的維度都大於1

    輸出:X,Y的相關係數\(\rho\),X和Y的線性係數向量a和b

    1)計算X的方差\(S_{XX}\), Y的方差\(S_{YY}\),X和Y的協方差\(S_{XY}\), Y和X的協方差\(S_{YX}=S_{XY}^T\)

    2)  計算矩陣\(M=S_{XX}^{-1/2}S_{XY}S_{YY}^{-1/2}\)

    3)對矩陣\(M\)進行奇異值分解,獲得最大的奇異值\(\rho\),和最大奇異值對應的左右奇異向量\(u,v\)

    4) 計算X和Y的線性係數向量a和b, \(a=S_{XX}^{-1/2}u, b=S_{YY}^{-1/2}v\)

    

    可見算法流程並不複雜,可是要理解這個算法須要瞭解一些背景知識。

6、CCA算法小結

    CCA算法普遍的應用於數據相關度的分析,同時仍是偏最小二乘法的基礎。可是因爲它依賴於數據的線性表示,當咱們的數據沒法線性表示時,CCA就沒法使用,此時咱們能夠利用核函數的思想,將數據映射到高維後,再利用CCA的思想降維到1維,求對應的相關係數和線性關係,這個算法通常稱爲KCCA。

    此外,咱們在算法裏只找了相關度最大的奇異值或者特徵值,做爲數據的相關係數,實際上咱們也能夠像PCA同樣找出第二大奇異值,第三大奇異值,。。。獲得第二相關係數和第三相關係數。而後對數據作進一步的相關性分析。可是通常的應用來講,找出第一相關係數就能夠了。

    有時候咱們的矩陣\(S_{XX},S_{YY}\)不可逆,此時咱們得不到對應的逆矩陣,通常遇到這種狀況能夠對\(S_{XX},S_{YY}\)進行正則化,將\(S_{XX},S_{YY}\)變化爲\(S_{XX}+\gamma I,S_{YY}+\gamma I\),而後繼續求逆。其中\(\gamma\)爲正則化係數。

       

(歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)

相關文章
相關標籤/搜索