pca(principal component analysis)和svd(singular value decomposition)是兩種常用的降維方法,在機器學習等領域有廣泛的應用。本文主要介紹這兩種方法之間的區別和聯絡。圖1.尋找主成分方向
pca的中文名叫做主成分分析,是降維和去噪的一種重要方法。pca選取包含資訊量最多的方向對資料進行投影。其投影方向可以從最大化方差或者最小化投影誤差兩個角度理解(詳細推導見機器學習聖經prml)。假設有n×
d 矩陣x,每一行是乙個
d 維樣本xi
,尋找投影方向vj
以最大化投影方差:
圖2.x』x其中x
¯ 是均值,為了簡化公式,本文假設
x 已經進行過零均值化處理,即x¯
=0;v
j 是資料的投影方向。d×
d 協方差矩陣c=
1n∑n
i=1(
xi)⊤
(xi)
=1nx
⊤x。由於
c 是實對稱矩陣,可以進行對角化處理: c=
vlv⊤
d×d 正交矩陣
v 的每一列是特徵向量,d×
d矩陣l 對角線上的每乙個元素是特徵值,且特徵值按遞減順序排列。把
c代回式子v⊤
jcvj
: v⊤
jcvj
=v⊤j
vlv⊤
vj=λ
j λj
是特徵向量vj
對應的特徵值。可以發現當投影方向是
c 的最大特徵值對應的特徵向量時,投影方向上資料的方差最大。所以用pca進行降維時通常選取較大特徵值對應的特徵向量作為投影方向:xv
k,vk
是最大的k個特徵值對應的特徵向量矩陣。
如果對x
做奇異值矩陣分解(svd分解): x=
usv⊤
對角陣s
對角線上的元素是奇異值,u和
v 是正交矩陣:u⊤
u=i,
v⊤v=
i。把x 的奇異值分解代入協方差矩陣: c=
1nx⊤
x=1n
vs⊤u
⊤usv
⊤=vs
2nv⊤
d×d 正交矩陣
v 的每一列是特徵向量,不難發現特徵值與奇異值之間存在著對應關係λi
=s2i
i/n。對
x 主成分方向進行投影: xv
k=us
v⊤vk
=uks
kuk 包含
u 的前k列,sk
包含s左上角的k×
k個元素。svd可以獲取另乙個方向上的主成分,而pca只能獲得單個方向上的主成分: 1n
xx⊤=
1nus
v⊤vs
⊤u⊤=
us2n
u⊤求解矩陣的最小二乘問題需要求偽逆,使用svd可以很容易得到矩陣
x 的偽逆: x+
=vs−
1u⊤隱語義索引(latent semantic indexing,簡稱lsi)通常建立在svd的基礎上,通過低秩逼近達到降維的目的。 xk
=minar
ank(
a)=k
∥x−a
∥ 注意到pca也能達到降秩的目的,但是pca需要進行零均值化,且丟失了矩陣的稀疏性。
通過svd可以得到pca相同的結果,但是svd通常比直接使用pca更穩定。因為pca需要計算x⊤
x 的值,對於某些矩陣,求協方差時很可能會丟失一些精度。例如lauchli矩陣: x=
⎡⎣⎢⎢
⎢1e0
010e
0100
e⎤⎦⎥
⎥⎥在lauchli矩陣裡,
e 是很小的數,e2
無法用計算機精確表示,從而計算x⊤
x 會丟失
e 這部分資訊。
[1] pattern recognition and machine learning
[2] mathematics stack exchange:
[3] cross validated:
PCA 和 SVD 的區別和聯絡
兩者的基礎都是 求解特徵值 特徵向量 矩陣對向量的乘法,其實是矩陣對此向量的旋轉和拉伸。如果矩陣對某個向量v只拉伸而不旋轉,那麼v就是該矩陣的eigenvector,拉伸比就是eigenvalue.是對乙個維度的分析,比如對features分析,可以實現特徵降維。a u vta u sigma v ...
PCA與SVD的區別和聯絡
因為之前在做pca的時候,就直接用的svd求解,以為svd屬於pca的一部分,看了一下兩篇博文,有一定收穫。注意,左奇異向量和右奇異向量是針對資料x而言的 注意到協方差矩陣的特點 實對稱,且大小為 d d,d為資料x的維度。因此,當x每一行為乙個樣本,對應協方差矩陣為,x.t x,需要求左奇異向量u...
和 區別和聯絡, 和 區別和聯絡
和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...