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

劉建平Pinard發表於2017-01-16

    典型關聯分析(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的演算法思想。

2. CCA的演算法思想

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

    現在我們具體來討論下CCA的演算法思想。假設我們的資料集是X和Y,X為$n_1 \times m$的樣本矩陣。Y為$n_2 \times m$的樣本矩陣.其中m為樣本個數,而$n_1,n_2$分別為X和Y的特徵維度。

    對於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')}}$$

     在投影前,我們一般會把原始資料進行標準化,得到均值為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. 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$為正則化係數。

       

(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)    

相關文章