主成分分析 (Principal Component Analysis, PCA) 基於輸入數據的協方差矩陣,可實現“去除數據集的相關性” —— 在數據處理中常用於通過“高維數據的降維”來實現特徵提取,在信號處理中被稱爲 K-L 變換,常用於實現“數據壓縮”。
這裏的“相關性”是指數據集各維度之間的“線性”依賴關係,採用“協方差”來描述
以二維數據 x=(x1,x2)T 爲例,“觀測數據集不相關”是指協方差 cov(x1,x2)=0,即:x1 和 x2 兩個分量不是線性相關的。此時,協方差矩陣爲對角陣
詳細內容可參考《協方差矩陣與二維高斯分佈》
1. 主成分分析 —— 基於最大方差的描述
考慮觀測數據集 {xi}i=1K∈RN,將每個觀測數據投影到某個單位方向 u∈RN,uTu=1。從數據處理的角度來看,如果觀測數據集在單位方向 u 上的投影值具有最大方差,那麼方向 u 就爲主成分 (Principal Component)。
1.1 投影數據的方差
如圖 1 所示,(二維)數據集 {xi}i=1K (紅色點)在投影之後,變成了單位方向 u 上的向量集 {x~i}i=1K(綠色點)。
圖1 取自於《PRML》Fig 12.2
觀測數據點 xi 經過投影之後爲 x~i=(uTxi)u,即方向爲 u,長度爲 uTxi
投影后數據 {x~i}i=1K (在 u 方向上)的方差可定義爲:
K1i=1∑K{uTxi−uTxˉ}2=uTSu
其中,xˉ=K1i=1∑Kxi 爲觀測數據集的樣本均值
S=K1i=1∑K(xi−xˉ)(xi−xˉ)T 爲觀測數據集的協方差矩陣
對於觀測數據集 {x1,x2,⋯,xK}, ∀xi∈RN,記 xˉ 爲數據集的樣本均值
若將“去掉均值的數據集”寫成矩陣形式,記爲 X=[x1−xˉ,x2−xˉ,⋯,xK−xˉ]N×K
那麼,數據集的協方差矩陣爲: S=K1XTX
可參考《PCA圖像壓縮的matlab實現》
爲了求使得方差 uTSu 最大的 u 方向,採用以下步驟:
(1) 採用拉格朗日乘子法構造最優化問題:
max { uTSu+λ(1−uTu) }
(2) 令其對 u 的偏導爲 0,可得到:
Su=λu
顯然,u 是協方差矩陣 S 的特徵向量
λ 是 u 所對應的特徵值
(3) 將等式兩端左乘 uT,可得到:
uTSu=uTλu=λuTu=λ
這就說明,觀測數據集在 S 的特徵向量 u 方向上投影后,“投影數據的方差值”正好等於對應的特徵值 λ。
如圖 2 所示,若將協方差矩陣 S 的特徵值按從大到小的順序排列,最大特徵值 λ1 所對應特徵向量 u1 的方向,即爲第一主成分,該觀測數據集“最主要的特徵”體現在 u1 方向上,投影后的數據在該方向上分佈的散佈程度最大;λ2 所對應特徵向量 u2 的方向,爲第二主成分,“次主要的特徵”體現在 u2 方向上;⋯⋯。
圖2 從一個均值爲 0,協方差矩陣爲 [2−2−24] 的正態分佈採樣了 100 個數據(藍色的 ‘+’ 號)組成觀測數據集 {xi}i=1100∈R2
通過對協方差矩陣進行特徵分解,可求出:
(1) 第一主成分爲 u1=[0.5257−0.8507](黑色箭頭),觀測數據集在該方向上的投影具有更大的
方差
對應了協方差矩陣的最大特徵值 λ1=5.2360
(2) 第二主成分爲 u2=[−0.8507−0.5257](紅色箭頭),觀測數據集在該方向上的投影具有更小的
方差
對應了協方差矩陣較小的特徵值 λ2=0.7639
由 100 個觀測點計算得到的“觀測數據集的協方差矩陣”S=[1.7809−1.7640−1.76403.6450],特徵分解之後的兩個主成分分別爲:
(1) 第一主成分爲 u1′=[0.5162−0.8565],較大的特徵值 λ1′=4.7081(右圖爲投影數據)
可以看出,觀測數據的主要變化特徵(y 隨 x 的線性變化)是沿着 u1′ 方向(可參考《協方差矩陣與二維高斯分佈》)
(2) 第二主成分爲 u2′=[−0.8565−0.5162],較小的特徵值 λ2′=0.7178
可以看出,即使只採樣了 100 個數據,兩組主成分的方向也是非常接近的
1.2 高維數據的降維
考慮 N 維觀測數據集 {xi}i=1K,當 N 值比較大時,會極大增加運算量。例如,一幅 100×100 大小的圖像實際上是 R10000 空間中的一個元素(N=10000)。
然而,數據通常都是包含一些冗餘的,“高維數據中的有效成分”實際上只包含在一個比較小的 M 維子空間(RM⊂RN, M<N)中。
採用 PCA 提取出最重要的 M 個成分( 最大的 M 個特徵值所對應的成分)組成 x~i∈RM 來表示完整的 N 維數據 xi∈RN,從而實現了高維數據的降維。
2. K-L變換 —— 基於最小誤差的描述
主成分分析,在信號處理領域也被稱爲 K-L 變換。也就是說,一個信號可以在 K-L 基上展開。
2.1 內積空間中的正交變換
由線性代數理論可知,實對稱矩陣 SN×N 可以通過一個正交矩陣 A 實現對角化(實對稱矩陣的特徵分解,可參考本文):
ASA−1=ASAT=⎣⎢⎢⎡λ0λ1⋱λN−1⎦⎥⎥⎤
Spi=λipi (i=0,1,⋯,N−1) 【 pi 爲特徵值 λi 所對應的特徵向量】
其中,正交矩陣 A=[p0,p1,⋯,pN−1] 滿足 A−1=AT
正交矩陣 A 的主要特點在於:A 中各列是兩兩正交的。
A−1=AT⟹ATA=I ⟹⎩⎪⎨⎪⎧ piTpjpiTpj=0=1,i=j,i=j
若將正交矩陣 A 看成兩個內積空間 X,Y 之間的線性變換,那麼
A:X⟶Y
x⟶y=Ax (正變換)
正交變換可以保證信號在變換前後的能量保持不變,即:∥x∥X=∥y∥Y=∥Ax∥Y
2.2 信號的正交分解
由於正交矩陣 A 中的各列兩兩正交,A 中的列構成了空間的一組“正交規範基”,若認爲 y=Ax 爲正變換,反變換也必然存在,即:
x=A−1y=ATy (逆變換)
上述逆變換意味着,一個信號 x=[x0,x1,⋯,xN−1]T 可以在一組正交基 {φ(⋅,n)} 上展開,展開係數爲 y=[y0,y1,⋯,yN−1]T,也就是:
xi=n=0∑N−1ynφ(i,n), 其中 φ(i,n) 爲變換核
逆變換矩陣 AT=⎣⎢⎢⎢⎢⎢⎢⎡φ(0,0)⋮φ(i,0)⋮φ(N−1,0)⋯⋯⋯φ(0,n)⋮φ(i,n)⋮φ(N−1,n)⋯⋯⋯φ(0,N−1)⋮φ(i,N−1)⋮φ(N−1,N−1)⎦⎥⎥⎥⎥⎥⎥⎤
例如,一維離散傅里葉變換的逆變換核爲 φ(i,n)=ejN2πin,那麼
y=Ax ⟶yn=i=0∑N−1xie−jN2πin, n=0,1,⋯,N−1
x=ATy⟶xi=N1n=0∑N−1ynejN2πin,i=0,1,⋯,N−1
可以驗證一維離散傅里葉逆變換 AT=[ejN2πin] 爲正交矩陣
2.3 K-L變換
對於一個寬平穩的隨機向量 x=[x0,x1,⋯,xN−1]T,其協方差矩陣爲 Sx=E[(x−μx)(x−μx)T],其中 μx=E[x]。
K-L 變換記爲 y=Ax —— 尋找正交矩陣 A 將輸入信號 x 變換爲輸出信號 y(變換域),同時使得隨機變量 y 的協方差矩陣 Sy 爲對角陣,即:
Sy=ASxAT=⎣⎢⎢⎡λ0λ1⋱λN−1⎦⎥⎥⎤
由於隨機變量 y 的協方差矩陣 Sy 爲對角陣,各分量之間的協方差均爲零,原始信號 x 經過 y=Ax 變換後,完全去除了相關性。
以圖像塊爲例:
(1) 圖像像素在空間域中相關性很強(局部區域像素通常比較接近),能量分佈比較均勻
(2) 圖像塊經過正交變換(座標旋轉或變換)後,能量集中在少數座標軸上,變換系數{yn}之間的相關性近似統計獨立
(3) 圖像塊的能量在變換域中的分佈相對集中(集中在直流和少數低頻係數),可採用較少的編碼比特表示,達到壓縮編碼的目的
在 K-L 基 {ϕ0,ϕ1,⋯,ϕN−1} 上可以將輸入信號 x 在變換域展開:
x=ATy=[ϕ0,ϕ1,⋯,ϕN−1]y=n=0∑N−1ynϕn
其中,yn=⟨x,ϕn⟩=xTϕn 是 x 在 ϕn 上的投影
因此
x=ATy=n=0∑N−1⟨x,ϕn⟩ϕn
由 AT=A−1⟹ATA=I,說明 A 中各列 {pi} 兩兩正交
又由於 AT=A−1⟹AAT=I⟹(AT)T(AT)=I,說明 AT 中各列 {ϕn} 也兩兩正交
2.4 基於K-L變換的數據壓縮
要對信號 x 做數據壓縮,只要捨去變換系數 y 的一些係數。假設只保留 M<N 個係數,也就是:
x^=n=0∑M−1ynϕn=n=0∑N−1⟨x,ϕn⟩ϕn
壓縮後數據 x^ 對原始數據 x 的均方誤差爲:ε=E[(x^−x)2]
因此,K-L 變換也可以理解爲:在保留 M 個係數的前提下,爲了獲得最大壓縮率,選擇一組標準正交基 {ϕ0,ϕ1,⋯,ϕN−1},使得上述均方誤差最小。
ε=E[(x^−x)2]=E⎩⎨⎧[n=M∑N−1ynϕn]2⎭⎬⎫=E{⟨n=M∑N−1ynϕn,n=M∑N−1ynϕn⟩},⟨ϕi,ϕj⟩=0(i=j)=E{n=M∑N−1yn2},⟨ϕn,ϕn⟩=1=E{n=M∑N−1[xTϕn]2},[xTϕn]2=(xTϕn)T(xTϕn)=E{n=M∑N−1[ϕnTxxTϕn]}=n=M∑N−1ϕnTE{xxT}ϕn
假設 x 已去除均值,那麼 E{xxT}=Sx,那麼最小均方誤差:ε=n=M∑N−1ϕnTSxϕn
同樣採用拉格朗日乘子法構造出最優化問題:
min { ε+λ(1−ϕTϕ) }
對ϕn求偏導:
∂ϕn∂{ ε+λ(1−ϕTϕ) }=0
可求得:
Sxϕn=λnϕn,n=M,⋯,N−1
因此,在變換域截短數據後的均方誤差爲:
ε=n=M∑N−1ϕnTSxϕn=n=M∑N−1ϕnTλnϕn=n=M∑N−1λn
爲了使均方誤差最小,將協方差矩陣 Sx 的特徵值按照從大到小的順序排列,即 λ0≥λ1≥⋯≥λN−1,保留最大的 M 個特徵值,相當於在變換域(保留M個變換系數時)保留了信號的最大能量。
由於K−L變換能夠完全去除原始信號 x 的相關性,通過保留最大的 M 個特徵值來進行數據壓縮時可以實現截短後數據 x^ 的均方誤差最小,K−L變換也被稱爲“最佳變換”。然而,由於K−L變換的基取決於協方差矩陣 Sx,協方差矩陣的特徵值和特徵向量的計算沒有像 FFT 之類的快速算法,限制了其應用場景。離散餘弦變換 DCT 在滿足一階馬爾可夫過程假設的前提下,可以極好地近似K−L變換,又有快速算法,因而在壓縮編碼中得到了廣泛應用。
代碼實現:PCA圖像壓縮
實現原理:
(1)將 M×N 大小的圖像進行分塊,若每個圖像塊大小爲 Bs×Bs,整幅圖像包含了 Ns 個圖像塊,也就是滿足 MN=NsBs2
(2)相當於構建了一個 Bs2×1 的隨機向量,整幅圖像包含了該隨機向量的 Ns 次實現
(3)PCA 針對該隨機向量的 Ns 次實現來展開,尋找該隨機向量的 Bs2 個分量中最重要的 p 個主分量
【從K-L變換的角度來看】:一個 Bs2×1 輸入圖像數據,經過K-L變換後,在新的 Bs2 維空間中僅保留 p 個維度(其實就是降維),若採用 PCA 選中的這 p 個維度來表示圖像,可以使得“變換後圖像數據”的能量達到最大。
(4)從K-L變換域回到原始圖像的空間域,只需要在 Bs2 維變換域空間中保留 p 個維度的分量值,將剩餘的 Bs2−p 個分量置 0。
上述過程僅僅考慮了圖像壓縮在變換域的表現,並未考慮其他的量化、編碼等過程。