在線的PCA算法

1、離線PCA

PCA是一種最基本的降維算法,在機器學習中被廣泛使用。它是一種線性降維,其基本思想是:

對大量的數據,找到其主成分,主成分的個數小於原始數據的維度,然後將原始數據投影到主成分張成的空間中,

可減小數據的維度。

         從上面的描述我們可以總結出:

1.      原始數據(x1,x2,x3,…,xn)(列向量)是一個n維的數據,它是在n個基(1,0,0,…,0),(0,1,0,…,0),… ,(0,0,…0,1)下的表示。

2.      我們要找到k個主成分,每個主成分的維度是n,組成一個n×k的矩陣M,即每個主成分是M的一列。

3.      將原始數據投影到k個主成分張成的空間中,即可得到降維後的k維度的數據(x’1,x’2,x’3,…,x’k)(列向量),即(x’1,x’2,x’3,…,x’k)= (x1,x2,x3,…,xn) M。

         可以看到,PCA的主要工作是找到主成分。可是如何尋找呢?下圖是一個簡單例子:

原始的數據落在f_1,f_2爲基的空間中,顯然數據的維度爲2。要對數據進行降維,只能降到1維,即我們只需要找到一個主成分。圖中,f’_1和f’_2是兩個主成分的候選,若選擇f’_2作爲主成分,我們把數據點投影到f’_2代表的線上後,數據之間的間隔將非常小,有些數據甚至會重合,這對於區分數據是不利的,因此f’_2並不是一個好的主成分。而f’_1這個主成分就相對好得多,數據投影到f’_1後,依然可以被區分。而“被區分”怎麼樣才能在數學上被表示呢?就是要求投影(降維)後的數據方差最大。

         本文主要講述在線PCA算法,基本的PCA算法請參考http://blog.codinglabs.org/articles/pca-tutorial.html

         我們在這裏只是簡單地總結一下離線PCA。假設數據矩陣爲X,其中X的每一行是一個數據,cov(X)是X的協方差矩陣,則離線PCA通過優化一下問題來尋找主成分M:


通過一些推導,可以通過解下列特徵問題:


其中m_j是M的某一列,可以看到,要求解的主成分即爲cov(X)的特徵向量,對應着特徵值λ_j。

2、在線PCA

上述離線PCA在大規模機器學習中,有一個問題:我們需要首先收集所有的數據,形成數據矩陣X,計算協方差矩陣cov(X),如果數據非常大,或者是以流的形式出現,我們就無法收集所有數據,那離線PCA算法也自然無法應用。因此,我們需要在線的PCA算法。

         爲此,我們查閱資料,發現一種在線的PCA算法[1]。我們打算使用spark streaming進行實現。

         首先,假設我們已經利用n個數據x_1,x_2,…,x_n獲得了U=[u_j],j=1,…,p等p個主成分,其對應的特徵值集合爲Λ。每個數據降維後的表示爲a_i,其維度爲k,降維前數據爲m維。

         當第n+1個數據到來時,我們首先計算所有數據的均值


然後計算第n+1個數據在當前的主成分下表示的誤差:


並將其歸一化:

新的主成分矩陣U’,爲m×(k+1)的矩陣,即主成分相比k多了一個。它等於


其中R是(k+1)×(k+1)的一個旋轉矩陣,它可以由下面的特徵問題得到:


其中Λ’是新的特徵值集合,並且D等於:



由此,我們得到新的主成分和新的特徵值,其個數比原來的個數多1,如果我們爲了保持主成分的個數不變,可以選擇捨棄一個最小的特徵值和其對應的特徵向量。

3、在線PCA和離線PCA的運算量比較

         如果使用離線的PCA來得到新到達的數據x_n後的特徵向量,我們將重新計算cov(X)的特徵向量,cov(X)的規模是m×m,而使用上述在線的PCA算法,需要求D的特徵向量,D的規模是(k+1)×(k+1),注意m>>k,所以在線PCA的算法運算量要小很多。

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