典型相關分析(Canonical Correlation Analysis)

典型關聯分析(Canonical Correlation Analysis)


1. 問題

在線性迴歸中,我們使用直線來擬合樣本點,尋找n維特徵向量X和輸出結果(或者叫做label)Y之間的線性關係。其中clip_image002clip_image004。然而當Y也是多維時,或者說Y也有多個特徵時,我們希望分析出X和Y的關係。

當然我們仍然可以使用迴歸的方法來分析,做法如下:

假設clip_image002[1]clip_image006,那麼可以建立等式Y=AX如下

clip_image008

其中clip_image010,形式和線性迴歸一樣,需要訓練m次得到m個clip_image012

這樣做的一個缺點是,Y中的每個特徵都與X的所有特徵關聯,Y中的特徵之間沒有什麼聯繫。

我們想換一種思路來看這個問題,如果將X和Y都看成整體,考察這兩個整體之間的關係。我們將整體表示成X和Y各自特徵間的線性組合,也就是考察clip_image014clip_image016之間的關係。

這樣的應用其實很多,舉個簡單的例子。我們想考察一個人解題能力X(解題速度clip_image018,解題正確率clip_image020)與他/她的閱讀能力Y(閱讀速度clip_image022,理解程度clip_image024)之間的關係,那麼形式化爲:

clip_image026 clip_image028

然後使用Pearson相關係數

clip_image030

來度量u和v的關係,我們期望尋求一組最優的解a和b,使得Corr(u, v)最大,這樣得到的a和b就是使得u和v就有最大關聯的權重。

到這裏,基本上介紹了典型相關分析的目的。

2. CCA表示與求解

給定兩組向量clip_image032clip_image034(替換之前的x爲clip_image032[1],y爲clip_image034[1]),clip_image032[2]維度爲clip_image036clip_image034[2]維度爲clip_image038,默認clip_image040。形式化表示如下:

clip_image042

clip_image044是x的協方差矩陣;左上角是clip_image032[3]自己的協方差矩陣;右上角是clip_image046;左下角是clip_image048,也是clip_image050的轉置;右下角是clip_image034[3]的協方差矩陣。

與之前一樣,我們從clip_image032[4]clip_image034[4]的整體入手,定義

clip_image052 clip_image054

我們可以算出u和v的方差和協方差:

clip_image056 clip_image058 clip_image060

上面的結果其實很好算,推導一下第一個吧:

clip_image062

最後,我們需要算Corr(u,v)了

clip_image064

我們期望Corr(u,v)越大越好,關於Pearson相關係數,《數據挖掘導論》給出了一個很好的圖來說明:

clip_image066

橫軸是u,縱軸是v,這裏我們期望通過調整a和b使得u和v的關係越像最後一個圖越好。其實第一個圖和最後一個圖有聯繫的,我們可以調整a和b的符號,使得從第一個圖變爲最後一個。

接下來我們求解a和b。

回想在LDA中,也得到了類似Corr(u,v)的公式,我們在求解時固定了分母,來求分子(避免a和b同時擴大n倍仍然符號解條件的情況出現)。這裏我們同樣這麼做。

這個優化問題的條件是:

Maximize clip_image068

Subject to: clip_image070

求解方法是構造Lagrangian等式,這裏我簡單推導如下:

clip_image072

求導,得

clip_image074

clip_image076

令導數爲0後,得到方程組:

clip_image078

clip_image080

第一個等式左乘clip_image082,第二個左乘clip_image084,再根據clip_image086,得到

clip_image088

也就是說求出的clip_image090即是Corr(u,v),只需找最大clip_image090[1]即可。

讓我們把上面的方程組進一步簡化,並寫成矩陣形式,得到

clip_image092

clip_image094

寫成矩陣形式

clip_image096

clip_image098

那麼上式可以寫作:

clip_image100

顯然,又回到了求特徵值的老路上了,只要求得clip_image102的最大特徵值clip_image104,那麼Corr(u,v)和a和b都可以求出。

在上面的推導過程中,我們假設了clip_image106clip_image108均可逆。一般情況下都是可逆的,只有存在特徵間線性相關時會出現不可逆的情況,在本文最後會提到不可逆的處理辦法。

再次審視一下,如果直接去計算clip_image102[1]的特徵值,複雜度有點高。我們將第二個式子代入第一個,得

clip_image110

這樣先對clip_image112求特徵值clip_image114和特徵向量clip_image116,然後根據第二個式子求得b。

待會舉個例子說明求解過程。

假設按照上述過程,得到了clip_image090[2]最大時的clip_image118clip_image120。那麼clip_image118[1]clip_image120[1]稱爲典型變量(canonical variates),clip_image090[3]即是u和v的相關係數。

最後,我們得到u和v的等式爲:

clip_image122 clip_image124

我們也可以接着去尋找第二組典型變量對,其最優化條件是

Maximize clip_image126

Subject to: clip_image128

clip_image130

其實第二組約束條件就是clip_image132

計算步驟同第一組計算方法,只不過是clip_image090[4]clip_image112[1]的第二大特徵值。

得到的clip_image134clip_image136其實也滿足

clip_image138 clip_image140

總結一下,i和j分別表示clip_image142clip_image144得到結果

clip_image146

clip_image148

3. CCA計算例子

我們回到之前的評價一個人解題和其閱讀能力的關係的例子。假設我們通過對樣本計算協方差矩陣得到如下結果:

clip_image150

clip_image152

然後求clip_image112[2],得

clip_image154

這裏的A和前面的clip_image156中的A不是一回事(這裏符號有點亂,不好意思)。

然後對A求特徵值和特徵向量,得到

clip_image158

然後求b,之前我們說的方法是根據clip_image160求b,這裏,我們也可以採用類似求a的方法來求b。

回想之前的等式

clip_image092[1]

clip_image094[1]

我們將上面的式子代入下面的,得

clip_image162

然後直接對clip_image164求特徵向量即可,注意clip_image164[1]clip_image112[3]的特徵值相同,這個可以自己證明下。

不管使用哪種方法,

clip_image166

clip_image168

這裏我們得到a和b的兩組向量,到這還沒完,我們需要讓它們滿足之前的約束條件

clip_image170

這裏的clip_image172應該是我們之前得到的VecA中的列向量的m倍,我們只需要求得m,然後將VecA中的列向量乘以m即可。

clip_image174

這裏的clip_image176是VecA的列向量。

clip_image178

因此最後的a和b爲:

clip_image180

第一組典型變量爲

clip_image182

相關係數

clip_image184

第二組典型變量爲

clip_image186

相關係數

clip_image188

這裏的clip_image190(解題速度),clip_image192(解題正確率),clip_image194(閱讀速度),clip_image196(閱讀理解程度)。他們前面的係數意思不是特徵對單個u或v的貢獻比重,而是從u和v整體關係看,當兩者關係最密切時,特徵計算時的權重。

4. Kernel Canonical Correlation Analysis(KCCA)

通常當我們發現特徵的線性組合效果不夠好或者兩組集合關係是非線性的時候,我們會嘗試核函數方法,這裏我們繼續介紹Kernel CCA。

在《支持向量機-核函數》那一篇中,大致介紹了一下核函數,這裏再簡單提一下:

當我們對兩個向量作內積的時候

clip_image198

我們可以使用clip_image200clip_image202來替代clip_image204clip_image206,比如原來的clip_image204[1]特徵向量爲clip_image208,那麼

我們可以定義

clip_image210

如果clip_image202[1]clip_image200[1]的構造一樣,那麼

clip_image212

clip_image214

這樣,僅通過計算x和y的內積的平方就可以達到在高維空間(這裏爲clip_image216)中計算clip_image218clip_image220內積的效果。

由核函數,我們可以得到核矩陣K,其中

clip_image222

即第clip_image224行第clip_image226列的元素是第clip_image224[1]個和第clip_image226[1]個樣例在覈函數下的內積。

一個很好的核函數定義:

clip_image228

其中樣例x有n個特徵,經過clip_image218[1]變換後,從n維特徵上升到了N維特徵,其中每一個特徵是clip_image230

回到CCA,我們在使用核函數之前

clip_image232 clip_image234

這裏假設x和y都是n維的,引入核函數後,clip_image236clip_image238變爲了N維。

使用核函數後,u和v的公式爲:

clip_image240

clip_image242

這裏的c和d都是N維向量。

現在我們有樣本clip_image244,這裏的clip_image246表示樣本x的第i個樣例,是n維向量。

根據前面說過的相關係數,構造拉格朗日公式如下:

clip_image248

其中

clip_image250

clip_image252

然後讓L對a求導,令導數等於0,得到(這一步我沒有驗證,待會從宏觀上解釋一下)

clip_image254

同樣對b求導,令導數等於0,得到

clip_image256

求出c和d幹嘛呢?c和d只是clip_image258的係數而已,按照原始的CCA做法去做就行了唄,爲了再引入clip_image260clip_image262

回答這個問題要從核函數的意義上來說明。核函數初衷是希望在式子中有clip_image264,然後用K替換之,根本沒有打算去計算出實際的clip_image258[1]。因此即是按照原始CCA的方式計算出了c和d,也是沒用的,因爲根本有沒有實際的clip_image258[2]讓我們去做clip_image266。另一個原因是核函數比如高斯徑向基核函數可以上升到無限維,N是無窮的,因此c和d也是無窮維的,根本沒辦法直接計算出來。我們的思路是在原始的空間中構造出權重clip_image260[1]clip_image262[1],然後利用clip_image258[3]clip_image260[2]clip_image262[2]上升到高維,他們在高維對應的權重就是c和d。

雖然clip_image260[3]clip_image262[3]是在原始空間中(維度爲樣例個數M),但其作用點不是在原始特徵上,而是原始樣例上。看上面得出的c和d的公式就知道。clip_image260[4]通過控制每個高維樣例的權重,來控制c。

好了,接下來我們看看使用clip_image260[5]clip_image262[4]後,u和v的變化

clip_image268

clip_image270

clip_image272表示可以將第i個樣例上升到的N維向量,clip_image274意義可以類比原始CCA的x。

鑑於這樣表示接下來會越來越複雜,改用矩陣形式表示。

clip_image276

簡寫爲

clip_image278

其中X(M×N)爲

clip_image280

我們發現

clip_image282

我們可以算出u和v的方差和協方差(這裏實際上事先對樣本clip_image204[2]clip_image284做了均值歸0處理):

clip_image286

clip_image288

clip_image290

這裏clip_image274[1]clip_image292維度可以不一樣。

最後,我們得到Corr(u,v)

clip_image294

可以看到,在將clip_image018[1]clip_image020[1]處理成clip_image296clip_image298後,得到的結果和之前形式基本一樣,只是將clip_image044[1]替換成了兩個K乘積。

因此,得到的結果也是一樣的,之前是

clip_image100[1]

其中

clip_image098[1]

引入核函數後,得到

clip_image100[2]

其中

clip_image300

注意這裏的兩個w有點區別,前面的clip_image116[1]維度和x的特徵數相同,clip_image302維度和y的特徵數相同。後面的clip_image304維度和x的樣例數相同,clip_image306維度和y的樣例數相同,嚴格來說“clip_image304[1]維度=clip_image306[1]維度”。

5. 其他話題

1、當協方差矩陣不可逆時,怎麼辦?

要進行regularization。

一種方法是將前面的KCCA中的拉格朗日等式加上二次正則化項,即:

clip_image308

這樣求導後得到的等式中,等式右邊的矩陣一定是正定矩陣。

第二種方法是在Pearson係數的分母上加入正則化項,同樣結果也一定可逆。

clip_image310

2、求Kernel矩陣效率不高怎麼辦?

使用Cholesky decomposition壓縮法或者部分Gram-Schmidt正交化法,。

3、怎麼使用CCA用來做預測?

  

4、如果有多個集合怎麼辦?X、Y、Z…?怎麼衡量多個樣本集的關係?

這個稱爲Generalization of the Canonical Correlation。方法是使得兩兩集合的距離差之和最小。可以參考文獻2。

6. 參考文獻

1、 http://www.stat.tamu.edu/~rrhocking/stat636/LEC-9.636.pdf

2、 Canonical correlation analysis: An overview with application to learning methods. David R. Hardoon , Sandor Szedmak and John Shawe-Taylor

3、 A kernel method for canonical correlation analysis. Shotaro Akaho

4、 Canonical Correlation a Tutorial. Magnus Borga

5、 Kernel Canonical Correlation Analysis. Max Welling

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章