PCA是一種經典的降維方法,相信大家都很熟悉PCA的原理了,PCO其實只是PCA換一種角度來做,都是在做奇異值分解。PCA做法:原始數據矩陣 , , 先做中心化處理得到 ,計算方差矩陣 ,然後計算 的最大 個特徵值對應的特徵向量,然後和原始特徵相乘,即得到降維的結果。爲了更清楚的顯示它的本質,將這個過程表示成矩陣。
將 中心化表示成矩陣的形式, 表示單位矩陣, 表示全1 的 維列向量:
記 , 我們稱之爲中心矩陣,它的本質就是對數據做中心化處理,即數據矩陣,減去均值矩陣。它有一個很好的性質就是,即它是等冪的,可以手動驗證一下。那麼我們終於可以得到方差矩陣理想的形式了。 ,希望大家沒有暈。PCA其實就是在對 操作。好,重點來了,PCO馬上就呼之欲出了,它就是,是是是真的是,對求特徵值,然後就可以直接得到降維結果了,連和數據矩陣相乘都不需要。下面來證明這一點。
假設 , 那麼 ,即與 的特徵值一樣,特徵向量之間存在一定的關係,後面的kernel pca還要要用到這個關係。我們把看作, 把看作。原來我們做pca時是求出 個特徵向量之後,將其排成矩陣 , 然後 就是我們的結果。現在由於與的特徵值之間存在一定的關係,所以如果 是 原來方差矩陣的特徵值,那麼的特徵值就是,這說明直接對求特徵值就得到了pca的結果,這樣是不是就直接得到了結果,有沒有很神奇呢?這裏本質上就是對與做奇異值分解,奇異值是一樣的。還沒有結束,我們還需要對的特徵值做歸一化處理,這裏不是歸一化到1,我們記的特徵值爲 , 要讓 , 是對應的第 個特徵值。我們再來總結一下PCO的做法:
記 ,令 是 的第 個特徵值,即 ,對其做歸一化處理,,,那麼就是在維空間的principal coordinates。
注意上面矩陣中存在,是樣本之間的內積,可以看作是一個線性核的核矩陣,是不是馬上就感覺可以用強大的kernel方法呢,kernel函數本質上是某個高維空間的內積,如果我們將上面的數據矩陣內積用kernel矩陣代替,是不是就可以看作是在某個高維空間進行pca處理呢,因此kernel
pca 也呼之欲出了,鼓掌...。kernel方法只需要提供kernel就行了,並不需要直接用到低維空間特徵在高維空間的表示。下面來介紹一波kernel pca。
假設高維空間特徵矩陣爲,kernel 矩陣,注意這裏只是假定高維空間矩陣,它的形式我們根本不需要知道。那麼現在是對來做PCA,但是我們根本就不知道 是什麼,因此方差矩陣沒辦法來求,但是,還記得前面PCO的做法嗎,做不了,我們可以來做啊,而是已知的,就是kernel 矩陣,到這裏,是不是就一下子光明起來了呢?
, 即對應特徵值爲的特徵向量是,做歸一化處理,
這就是pca降維時要用到的特徵向量,當對一個高維空間特徵 進行降維時,首先減去均值,,然後乘,
得到投影 :,是 與中每一個特徵的內積,可以利用核函數求出來,而就是kernel ,是已知的,因此整個結果也就可以求出來的,這就是kernel pca, 這個過程中儘管我們用到了 ,但我們不需要具體知道它們是什麼,只需要一個核函數就行了,這樣就等價於在一個高維空間做了pca降維。
最後來一個總結,pca利用方差矩陣求得特徵值,pco利用直接可以得到降維結果,因爲它們的特徵值相同,特徵向量存在對應關係,而kpca是在變換後的高維特徵空間進行pca,即需要求得的特徵值,然而我們不知道 的具體形式,從而藉助 來求特徵值,做到最後,只需要核矩陣,就可以完成在高維空間的降維。