主成分分析PCA演算法:為什麼去均值以後的高維矩陣乘以其協方差矩陣的特徵向量矩陣就是「投影」?

這是從網上看到的PCA演算法的步驟:

第一步,分別求每列的平均值,然後對於所有的樣例,都減去對應的均值。

第二步,求特徵協方差矩陣。

第三步,求協方差的特徵值和特徵向量。

第四步,將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣。

第五步,將樣本點投影到選取的特徵向量上。假設樣例數為m,特徵數為n,減去均值後的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣為EigenVectors(n*k)。那麼投影后的數據FinalData為:

這幾天在網上看了很多東西,對PCA演算法也有了一些自己的理解,不知道對不對:

1.PCA的降維,其本質是將高維空間的向量投影到一個低緯空間里。比如一個三維向量有三個坐標(或者說每條記錄有3個特徵值),投影到一個二維平面上,那麼就變成了一個只有兩個特徵值的記錄。這樣實現了降維。

2.所以PCA降維,其關鍵就是找到最合適的投影空間。讓原來的高維矩陣投影到這個平面以後能儘可能多得保留原有的信息。

但是我就不明白了:

1.用PCA演算法得到的這個「最合適」的低緯空間到底是什麼?難道就是那個「k個特徵向量分別作為列向量組成特徵向量矩陣」?但是最後的操作是原來的高維矩陣(去均值以後)乘以這個「k個特徵向量分別作為列向量組成特徵向量矩陣」啊?難道把高維空間里的向量投影到低維空間,就是用這個高維向量乘以代表這個低緯空間的矩陣就行了么?

2.為什麼PCA這麼操作:去均值的原矩陣*(去均值的原矩陣的協方差矩陣的特徵向量作為列向量形成的矩陣)

就能得到這個 「最 合 適 的 低 維 空 間」 的投影?


千萬不要小看PCA, 很多人隱約知道求解最大特徵值,其實並不理解PCA是對什麼東西求解特徵值和特徵向量。 也不理解為什麼是求解特徵值和特徵向量。 要理解到Hinton對PCA的認知,需要跨過4個境界,而上面僅僅是第1個境界的問題。

為什麼要理解PCA?

其實深度學習在成為深度學習以前,主要是特徵表達學習, 而特徵表達學習追溯到始祖象階段,主要是無監督特徵表達PCA和有監督特徵表達LDA。 對了這裡LDA不是主題模型的LDA,是統計鼻祖Fisher搞的linear discriminant analysis(參考「Lasso簡史」)。 而Hinton在這方面的造詣驚人, 這也是為什麼他和學生一起能搞出牛牛的 t-Distributed Stochastic Neighbor Embedding (t-SNE) 。

至於t-SNE為啥牛, 這裡給兩個對比圖片, 然後我們再回到PCA,以後有機會再擴展!

t-SNE vs PCA: 可以看到線性特徵表達的局限性

t-SNE 優於 已有非線性特徵表達 Isomap, LLE 和 Sammon mapping

依然還記得2004年左右Isomap橫空出世的驚奇, 再看t-SNE的誕生,真是膜拜! 也正是Hinton對PCA能理解到他的境界, 他才能發明t-SNE。

PCA理解第一層境界:最大方差投影

正如PCA的名字一樣, 你要找到主成分所在方向, 那麼這個主成分所在方向是如何來的呢?

其實是希望你找到一個垂直的新的坐標系, 然後投影過去, 這裡有兩個問題。 第一問題: 找這個坐標系的標準或者目標是什麼? 第二個問題, 為什麼要垂直的, 如果不是垂直的呢?

如果你能理解第一個問題, 那麼你就知道為什麼PCA主成分是特徵值和特徵向量了。 如果你能理解第二個問題, 那麼你就知道PCA和ICA到底有什麼區別了。

對於第一個問題: 其實是要求解方差最小或者最大。 按照這個目標, 你代入拉格朗日求最值, 你可以解出來, 主成分方向,剛好是S的特徵向量和特徵值! 是不是很神奇? 偉大的拉格朗日(參考 "一步一步走向錐規劃 - QP" "一挑三 FJ vs KKT ")

現在回答了,希望你理解了, PCA是對什麼東西求解特徵值和特徵向量。 也理解為什麼是求解的結果就是特徵值和特徵向量吧!

這僅僅是PCA的本意! 我們也經常看到PCA用在圖像處理裡面, 希望用最早的主成分重建圖像:

這是怎麼做到的呢?

PCA理解第二層境界:最小重建誤差

什麼是重建, 那麼就是找個新的基坐標, 然後減少一維或者多維自由度。 然後重建整個數據。 好比你找到一個新的視角去看這個問題, 但是希望自由度小一維或者幾維。

那麼目標就是要最小重建誤差,同樣我們可以根據最小重建誤差推導出類似的目標形式。

雖然在第二層境界裡面, 也可以直觀的看成忽略了最小特徵值對應的特徵向量所在的維度。 但是你能體會到和第一層境界的差別么? 一個是找主成分, 一個是維度縮減。 所以在這個層次上,才是把PCA看成降維工具的最佳視角。

PCA理解第三層境界:高斯先驗誤差

在第二層的基礎上, 如果引入最小二乘法和帶高斯先驗的最大似然估計的等價性。(參考"一步一步走向錐規劃 - LS" 「最小二乘法的4種求解」 ) 那麼就到了理解的第三層境界了。

所以, 重最小重建誤差, 我們知道求解最小二乘法, 從最小二乘法, 我們可以得到高斯先驗誤差。

有了高斯先驗誤差的認識,我們對PCA的理解, 進入了概率分布的層次了。 而正是基於這個概率分布層次的理解, 才能走到Hinton的理解境界。

PCA理解第四層境界(Hinton境界):線性流形對齊

如果我們把高斯先驗的認識, 到到數據聯合分布, 但是如果把數據概率值看成是空間。 那麼我們可以直接到達一個新的空間認知。

這就是「Deep Learning」書裡面寫的, 烙餅空間(Pancake), 而在烙餅空間裡面找一個線性流行,就是PCA要乾的事情。 我們看到目標函數形式和最小重建誤差完全一致。 但是認知完全不在一個層次了。

小結

這裡羅列理解PCA的4種境界,試圖通過解釋Hinton如何理解PCA的, 來強調PCA的重要程度。 尤其崇拜Hinton對簡單問題的高深認知。不僅僅是PCA,尤其是他對EM演算法的再認識, 誕生了VBEM演算法, 讓VB演算法完全從物理界過渡到了機器學習界(參考 「變の貝葉斯」)。 有機會可以看我對EM演算法的回答,理解EM演算法的8種境界。


看到那麼多帶公式的,完善的推導,我寫個帶圖的,公式少一些詳細一些,但是不嚴謹的直觀理解把,僅供參考。

一、先從旋轉和縮放角度,理解一下特徵向量和特徵值的幾何意義

從定義來理解特徵向量的話,就是經過一個矩陣變換後,空間沿著特徵向量的方向上相當於只發生了縮放,比如我們考慮下面的矩陣:

egin{bmatrix}
1.5  0.5\ 
0.5  1.0
end{bmatrix}

求這個變換的特徵向量和特徵值,分別是:

U=egin{bmatrix}
0.85  -0.53\ 
0.53  0.85
end{bmatrix}(列向量)

1.81,0.69

用一個形象的例子來說明一下幾何意義,我們考慮下面笑臉圖案:

為方便演示笑臉圖案在0,0和1,1圍起來的單位正方形里,同時也用兩個箭頭標出來了特徵向量的方向。經過egin{bmatrix}
1.5  0.5\ 
0.5  1.0
end{bmatrix}的變換,也就是用這個圖案中的每個點的坐標和這個矩陣做乘法,得到下面圖案:

可以看到就是沿著兩個正交的,特徵向量的方向進行了縮放。這就是特徵向量的一般的幾何理解,這個理解我們也可以分解一下,從旋轉和沿軸縮放的角度理解,分成三步:

第一步,把特徵向量所指的方向分別轉到橫軸和縱軸

這一步相當於用U的轉置,也就是U^{T}進行了變換

第二步,然後把特徵值作為縮放倍數,構造一個縮放矩陣egin{bmatrix}
1.81  0\ 
0  0.69
end{bmatrix},矩陣分別沿著橫軸和縱軸進行縮放:

第三步,很自然地,接下來只要把這個圖案轉回去,也就是直接乘U就可以了

所以,從旋轉和縮放的角度,一個矩陣變換就是,旋轉--&>沿坐標軸縮放--&>轉回來,的三步操作,表達如下:

T=U Sigma U ^{T}

多提一句,這裡給的是個(半)正定矩陣的例子,對於不鎮定的矩陣,也是能分解為,旋轉--&>沿坐標軸縮放--&>旋轉,的三步的,只不過最後一步和第一步的兩個旋轉不是轉回去的關係了,表達如下:

T=U Sigma V^{T}

這個就是SVD分解,就不詳細說了。

另外,這個例子是二維的,高維類似,但是形象理解需要腦補。

二、協方差矩陣的特徵向量

PCA的意義其他答主都說得差不多了,一句話概括就是找到方差在該方向上投影最大的那些方向,比如下邊這個圖是用egin{bmatrix}
1  0.5\ 
0.5  1
end{bmatrix}作為些協方差矩陣產生的高斯分布樣本:

大致用個橢圓圈出來分布,相關性最強的(0.707,0.707)方向就是投影之後方差最大的方向。

接下來我們不嘗試嚴格證明,而是從旋轉和縮放的角度形象理解一下,我們可以考慮把這個分布也旋轉一下,讓長軸在x軸上,短軸在y軸上,變成如下:

然後再沿著x軸和y軸,除以標準差,縮放成標準差為1的單位分布

注意,在這個除以標準差的過程中,標準差最大的軸,就對應著原空間中,樣本投影后方差最大的方向。接下來,假設這個分布中的樣本為X_U,則我們可以把一開始的樣本表示為:

X=ULX_U

用這麼彆扭的表示方式主要是為了接下來推公式方便,所以接下來推個簡單的公式:

協方差矩陣,用S表示,則有

S_{ij}=Eleft[ (X_i-mu _i)(X_j-mu _j) 
ight]

因為這個分布里兩個維度的均值都是0,所以有

S_{ij}=Eleft[ X_iX_j 
ight]

所以

S=frac{1}{N} XX^T

其中N是樣本數,根據前面的X=ULX_U,進一步展開這個公式:

S=frac{1}{N} XX^T=frac{1}{N}(ULX_U)(ULX_U)^T=UL(frac{1}{N}X_U{X_U}^T)L^TU^T

因為X_U是個單位方差的且無相關性的樣本,所以frac{1}{N}X_U{X_U}^T=I

另外L是個對角矩陣所以有

S=ULL^TU^T=UL^2U^T=USigma U^T這個公式上一部分已經說過了。

所以Sigma 對角線上的元素對應的就是方差的大小,而縮放倍數就是標準差的大小,也就是特徵值的開根號,而U就是要沿著縮放的方向,也就是問題中投影的方向,正是特徵向量。


樓主這個問題提得很好,我嘗試著答一下,希望可以解答樓主的疑惑。

首先我們來複習一下PCA的基本思想吧。

The central idea of principal component analysis (PCA) is
to reduce the dimensionality of a data set consisting of a
large number of interrelated variables, while retaining as
much as possible of the variation present in the data set.
This is achieved by transforming to a new set of variables,
the principal components (PCs), which are uncorrelated,
and which are ordered so that the first few retain most of
the variation present in all of the original variables.


[Jolliffe, Pricipal Component Analysis, 2
nd edition]

有了這個基本思想作為指導,我應該可以更好地回答樓主的兩個問題了。

第一個問題:

用PCA演算法得到的這個「最合適」的低緯空間到底是什麼?

回答這個問題之前,我們先來做幾個定義:

  • 	extbf{x} 是一個矩陣, 它有p 列,每一列都是一個隨機向量

  • alpha_k 是一個含有p個常數的向量

  • alpha_k

  • 	extbf{x}的協方差矩陣是已知的,我們稱之為Sigma

根據PCA的基本思想,要定義,或者說找到這個所謂「最合適」的低緯空間,我們只要做以下幾步:

  1. 找到一個	extbf{x}的線性方程,使得alpha_1的方差最大
  2. 找到另一個	extbf{x}的線性方程,alpha_2,使得alpha_2alpha_1不相關(uncorrelated),並且alpha_2的方差最大

  3. 重複以上步驟,找到別的	extbf{x}的線性方程

我們接下來來做第1步:

  • alpha_1的方差:Var(alpha_k

  • 我們發現如果要最大化 alpha_1的方程,我們只要選一個巨大無比的alpha_k就好了,這顯然不是我們想要的
  • 於是我們家一個約束條件,我們讓alpha_k的長度等於1,alpha_k

我們再來做第1步:

  • 最大化Var(alpha_k,約束條件是alpha_k。我們可以用Lagrange方法,最大化alpha_k,w.r.t. alpha_k
  • alpha_k求導,並令其導數等於0。
  • frac{d}{dalpha_k}(alpha_k

  • 我們發現alpha_k就是Sigma 的特徵向量,lambda_k就是其對應的特徵值嘛。那麼問題來了,我們改選那個特徵向量呢?
  • 我們再盯著Var(alpha_k看一會兒,發現這傢伙其實就是:
  • alpha_k

  • 所以我們選最大的那個特徵值以及其對應的特徵向量。
  • alpha_1就是the first principal component.

然後我們來做第2步:

  • 最大化alpha_2,同時alpha_2alpha_1不相關
  • cov(alpha_1

  • 用Lagrange方法,最大化alpha_2
  • frac{d}{dalpha_2}(alpha_2

  • 上式左右同左乘alpha_1得:
  • alpha_1

  • 所以我們有: Sigma alpha_2 - lambda_2 alpha_2 = 0
  • 這又是一個特徵向量特徵值,有了上一部的經驗,我們知道要選特徵值第二大的那個。

以此類推,我們會得到一系列alpha_k,他們組成的空間是一個跟	extbf{x}相同維度的空間。至於那個「最合適」的低緯空間就是吧最小特徵值對應的特徵向量扔掉,剩下來的那個空間。

第二個問題:

為什麼PCA這麼操作:去均值的原矩陣?

從我上面的推導來看,貌似並沒有涉及到去均值這一步。我去研究了一下,其實有些時候的確需要去均值,另外一些時候不需要。Pearson在1901年的一篇論文中間提到,如果不去均值的話,最優擬合超平面會通過原點,而不是	extbf{x}的幾何中心。但是也有一些例外情況中,超平面做的僅僅是把	extbf{x}劃分到相互垂直的子超平面上,這個時候去均值就不是必要的。具體情況請參見一下鏈接。

http://www.ulb.ac.be/di/map/yleborgn/pub/NPL_PCA_07.pdf

不知道我的回答是否解決了樓主的疑惑,如果有講的不清楚或者不對的地方還請大家指出。


1、一個向量m{x}在一個單位向量m{u}的投影是m{x}^Tm{u}。特徵向量是一組正交基,矩陣相乘就是把每個樣本分別向每個特徵向量上去投影。

2、PCA里找到的投影方向是投影后方差最大的前k個方向(簡單理解就是區分度最好的方向)。

這種東西還是要找書,tutorial看提高姿勢水平,網文多不靠譜。


PCA的思想是將數據降維,降到哪些維上呢,就是使得數據分布方差最大的那些維上。主成分的意思就是,那些使得數據分布方差最大的那些維就是主成分。這個是PCA模型的思想,後面如何讓方差最大,如何選出這些方向下面分步介紹。

  1. 將數據中心移動到0並正則化這些數據,也就是將所有樣本點X減去均值併除以方差,獲得X『是歸一化後的數據。
  2. 設降維後的空間是p維的,現在要將每一個樣本點投影到這個p維空間中,因此需要乘以投影矩陣P,設這個p維空間的正交基是U=[u1,u2,...,up]。則投影矩陣就是P=(U^{T}U )^{-1}U^{T},具體推導去補一下線性代數中投影方面的知識吧,然後由於U是正交矩陣,因此P=U^T,這樣,我們就把一個樣本點xi投影到這個p維空間中就行了,獲得的在p維空間中的坐標為y=Px^{(i)}=U^Tx^{(i)},同樣這部分知識來自於線性代數中投影方面。
  3. 這樣我們獲得了每個樣本點在降維後的空間中的坐標,那麼現在,我們需要計算方差了,很明顯,降維後的數據分布的方差是sum_i y_i^Ty_i ,把步驟2中的y帶入進來,推導一下可以獲得數據分布的方差可以表示為U^TSigma U,其中Sigma 是x的協方差矩陣。這個推導過程雖然簡單但是需要自己推一邊,我推過好幾次了,題主可以去試著推一推,因為其他演算法也會用到類似的推導。
  4. 現在整個模型就轉化成了最優化問題,max_U U^TSigma U (s.t. U^TU=I),這個最優化問題是瑞利熵問題的一種最簡單的形式,瑞利熵問題的解是協方差矩陣的前p大的特徵值對應的特徵根組成的矩陣U。現在題主應該知道為什麼要求這個矩陣的前k個特徵根了吧。瑞利熵問題的推導感覺挺煩的,本科生的我完全看不懂,但是記住結論會用就知道了,關鍵是能看出來某一個優化問題就是瑞利熵問題

至此,我們已經學習出了降維後的空間,這個空間的p個正交基組成的矩陣就是U,這個U就代表了這個空間,對於一個新的樣本點x,我們只需要將x投影到U代表的這個p維空間上就達到了降維的目的了。因此,最後的降維後的向量y=U^Tx

整個演算法的大致思路就是這樣。記住PCA的思想,就是找到這樣一個空間,使得原始數據投影到這個空間後的分布的方差最大化!希望對有所幫助,如有錯誤,還請指出!


題主的問題是:

1. 什麼是『最合適』的低維空間

2. 為什麼這麼操作就能得到『最合適』的低維空間

數學推導通通可跳過版:

一般來說原始數據維度太高消耗存儲空間,我們就想壓縮一下維度。於是我們想在低維空間得到一個原始數據的近似表達,代價是損失了一些精度。至於如何衡量精讀的損失,一般是通過『距離』來衡量,也就是L_2Norm。這應該是題主最想知道的部分,其餘的結果(包括使用特徵值分解)都是從這裡推導出來的

先定義一下幾個Notation,不要著急推導還沒有開始:

高維原始數據 x 有維度 n

低維近似數據 y 設定維度 l <n

PCA,其實是由高低維度之間切換的函數定義的,而這個函數又是『人們』選擇的。

  • 高to低(降維):y=f(x)
  • 低to高(重建):xapprox hat{x} =g(y)=g(f(x))

因為人們real懶,總想簡單一點,所以選擇了矩陣乘法來在高低維度自由轉換。不如先記一個重建矩陣Din Re^{n	imes l},保證size合適。

  • 低to高(重建):hat{x}=Dy

  • 因為real懶,我們簡化D的列都是兩兩正交的
  • 為了唯一解,還要D的列是單位長度的(D等比例地伸縮自如的解是沒有意義的)

我們現在仍然不知道D為何物,也不知道怎麼降維,但我們馬上就可以知道了:

# # # # # # # # # # # 推導 B E G I N # # # # # # # # # # #

# 1. 求得最優降維公式

# 利用L2 norm定義最優的低維近似

y^*=argmin_{y}left| x-hat{x} 
ight|_2
=argmin_{y}left| x-hat{x} 
ight|_2^2

# 展開L2 norm

left| x-hat{x} 
ight|_2^2=(x-hat{x})^T(x-hat{x})
=x^Tx-2x^That{x}+hat{x}^That{x}

# 其中hat{x}=Dy

y^*=argmin_{y}-2x^TDy + y^TD^TDy

# 因為我們設定D有正交的且單位長度的列

y^*=argmin_{y}-2x^TDy + y^TI_ly

y^*=argmin_{y}-2x^TDy + y^Ty

# 求導取零得到最優解


abla_y(-2x^TDy + y^Ty)=0

-2D^Tx+2y=0

y^*=D^Tx

# 哇也就是說重構矩陣轉置就是可以實現降維真的好簡單!

# 但是重構矩陣是什麼?

# 2. 求得最優D

# 我們之前說到用L2 norm衡量距離,這是對一個向量而言的。拓展到矩陣之間的距離就要使用Frobenius norm:left| X 
ight| =sqrt{sum_{i,j}{X_{ij}} }

# 因為我們定義的D就是最小化精度損失得來的:

D^*=argmin_D sqrt{sum_{i,j}{ x_j^{(i)}-[DD^Tx]_j^{(i)}} } subject to D^TD=I_l

# 為了看得清楚一點,我們先看l=0情況:

d^*=argmin_d sum_{i}{ left|x^{(i)}-dd^Tx^{(i)}
ight|} _2^2 subject to left| d 
ight| _2=1

# 用矩陣表達去掉求和的sigma

d^*=argmin_d left| X-Xdd^T
ight|^2_F subject to left| d 
ight| _2=1

# 用跡 (trace) 去掉norm

d^*=argmin_d  trace((X-Xdd^T)^T(X-Xdd^T)) subject to left| d 
ight| _2=1

# 中間都是用trace相關的化簡,如果有需要再補充,因為公式real煩

d^*=argmin_d  -trace(X^TXdd^T) subject to left| d 
ight| _2=1

d^*=argmax_d  trace(X^TXdd^T)

# trace中的連乘可以轉圈圈

d^*=argmax_d  trace(d^TX^TXd) subject to left| d 
ight| _2=1

# 現在階段的最優解需要用到特徵值分解,i.e. 當dX^TX最大的特徵值對應的特徵向量的時候。括弧里對應為lambda_{max} ^2,最大的特徵值的平方

# 特徵值分解可以理解為:將矩陣分解為好幾個『方向』(特徵向量基eigenvector basis(特徵向量:你才基!)),每個方向的『權重』通過特徵值來衡量。特徵值大,

# 因為X^TX是實對稱的,特徵值分解可得QLambda Q^T(我一直覺得好像QAQ)

# 如果不是降維到一維呢?

# 那就多挑幾個特徵值大的特徵向量嘛。

# 可以證明D就是l個較大的特徵值對應的特徵向量的組合

# # # # # # # # # # # 推導 E N D # # # # # # # # # # #

Plus,

這裡用到X^TX自然是有特徵值分解的,實際使用PCA的矩陣不一定是滿秩的方陣,所以才會用到奇異值分解 (SVD) 。如果需要再補充SVD的細節=w=

Plus^2,

挑選幾個特徵向量好呢?可以畫variance explained,近似為使用的特徵值的比例圖,挑選折點。

到此為止,問題應該已經有很清楚的答案了。

那就是:L2 norm 和 推導出來的啦。


最近剛剛學了這些 來獻醜了

首先你要理解特徵向量的含義。

把矩陣理解成一個空間,那麼對於一個對稱正定的矩陣A,它的特徵向量就是對A所構成的空間的一個正交化。特徵值大小就代表 空間在 該特徵值對應的特徵向量上的「影響」能力,即越大在對應特徵向量這個基上,包含信息『最多』。

所謂合適的低維空間,舉例說明,以128*128的圖像說明,我們選最大的10個特徵值對應的特徵向量重構圖像(如下圖)

再將這10個圖像疊加,就能得到和原圖相差無幾的圖片,實際上這10個特徵向量構成的空間包含了原圖95%的能量。

第二問參考機器學習中的數學(4)-線性判別分析(LDA), 主成分分析(PCA)

基本思想是

我們找一組基底,按照方差最大為原則,得到目標函數,用拉格朗日法,求該目標函數極值,這樣發現該基底為特徵向量時取得極值。 如@姚鵬鵬所說,參考博客中還提到了按照能量損失最小為原則,也得到了一樣的結果。

這裡有一點要注意

這裡的S是原矩陣每一行Xi 自相關得到的矩陣的和,即sum_{i}^{}{}  x_{i}x_{i}^{T} 。那麼按照之前的理論分析,我們應該求這個矩陣的特徵值而不是協方差矩陣,有關教科書上理論推導也都是求這個矩陣特徵值。

但是實際情況 都是求的協方差矩陣的特徵值。

而他們之間的特徵向量存在轉換關係,如下式

右邊的Phi 是協方差矩陣的特徵向量 Psi 是上面S矩陣的特徵向量,U是原矩陣。

具體證明可參照 邊肇祺的模式識別,其實就是svd分解。

這樣一個好處就是,還是以128*128圖片為例子,就不用去解128*128維的特徵值,大矩陣的特徵值計算很費時,轉而求小規模矩陣的特徵值,然後再轉化回去。

你所說的

去均值的原矩陣*(去均值的原矩陣的協方差矩陣的特徵向量作為列向量形成的矩陣)

實際上之後還要做一步歸一化的過程,也就是上面那個公式。


題主顯然已經懂了PCA怎樣實現,問題就是為什麼這樣實現。

在prml的第12章,有兩種解釋, @npbool說的是第一種解釋,最大投影后方差解釋,然後就是怎樣表示投影后方差的問題,顯然就是mathbb{E} = frac{1}{N}sum_{n=1}^{N}{m{u}_1^Tm{x}_n-m{u}_1^Tar{x}}^2 = m{u}_1^Told{S}m{u}_1很顯然,這裡面的S就是你說的「去均值的原矩陣*(去均值的原矩陣的協方差矩陣的特徵向量作為列向量形成的矩陣)」。然後的問題就是怎樣最小化E的問題,因為m{u}是帶約束條件的,所以這邊的優化要加上一個朗格朗日的乘子,也就是m{u}_1^Tm{u}=1,所以呢mathbb{E}_1 = m{u}_1^Told{S}m{u}_1+lambda_1(1-m{u}_1^Tm{u_1}),通過對m{u}_1求導,這樣就能夠得到old{S}m{u}_1 = lambda_1m{u}_1  ,這也就是為什麼求特徵向量的原因了


首先,這些東西如果沒有老師的話,最好是看各種靠譜教科書,然後是查 wikipedia

簡單來說,PCA就是做了SVD分解,SVD分解的前n項就是只選擇n個基線性擬合出來的最小誤差值

Singular value decomposition

但是很多時候,有些人不知道SVD分解的存在於是手動求 SVD 分解。

對 F(s,t)做SVD分解之後 F(s,t) = sum_i lambda_i T_i(t) X_i(s)而且 X_i X_j = delta_{ij}; T_i T_j = delta_{ij}

於是 sum_t F(s_1,t) F(s_2,t) = sum_i lambda_i^2 X_i(s_1) X_i(s2)

所以這就是為什麼要求一個特徵值的原因


鋪墊:

很容易看出,圖中紅線向量坐標為(3,2)。我們之所以有這個結論,是在一個前提條件下,那就是默認基為(1,0)和(0,1)。通常情況下,為了能夠簡潔的表示,我們將基選為單位長度並且正交的一組向量。

但是假如我們將基選為(1,1)和(-1,1),那麼紅色向量的坐標變成什麼呢?(1,1)*(3,2)=5,(-1,1)*((3,2)=-1,即變成(5,-1)。

本質上講,PCA就是將高維的數據通過線性變換投影到低維空間上去,但這個投影可不是隨便投投,要遵循一個指導思想,那就是:找出最能夠代表原始數據的投影方法。首先的首先,我們得需要知道各維度間的相關性以及個維度上的方差啊!那有什麼數據結構能同時表現不同維度間的相關性以及各個維度上的方差呢?自然是非協方差矩陣莫屬。

協方差矩陣的主對角線上的元素是各個維度上的方差(即能量),其他元素是兩兩維度間的協方差(即相關性)。我們要的東西協方差矩陣都有了,先來 看「降噪」,讓保留下的不同維度間的相關性儘可能小,也就是說讓協方差矩陣中非對角線元素都基本為零。達到這個目的的方式自然不用說,線代中講的很明確——矩陣對角化。而對角化後得到的矩陣,其對角線上是協方差矩陣的特徵值,它還有兩個身份:首先,它還是各個維度上的新方差;其次,它是各個維度本身應該擁有的能量(能量的概念伴隨特徵值而來)。

對角化後的協方差矩陣,對角線上較小的新方差對應的就是那些該去掉的維度。 所以我們只取那些含有較大能量(特徵值)的維度,其餘的就舍掉即可。PCA的本質其實就是對角化協方差矩陣

前面的回答理論講得很多,不過看著也累。這裡就舉個例子,應該更容易理解。

這個例子是將二維轉化為一維。五個點(-1,-2)(-1,0)(0,0)(0,1)(2,1),確定一個基坐標,將其投影過去,要求保存最大的信息量。首先,很直觀的知道,不能投影去x軸或者y軸。如果投影去x軸,有兩點在x軸方向投影一致,會造成信息損失。y軸也同理。

那麼我們就用主成分分析方法來推導

那麼降維之後的圖像便是這樣

之前(-1,-2)這點現在的坐標變為了

那麼我們就成功地將二維向量降為一維,並且儘可能多地保留了信息。

那麼回到題主問題「為什麼去均值以後的高維矩陣乘以其協方差矩陣的特徵向量矩陣就是「投影」?」就我舉的這個例子來說,其實這個特徵向量就是我們在一維空間內選擇的基,乘以原向量,其結果剛好為新基的坐標,即相當於其投影。當然推廣到多維肯定更加複雜,但其原理不變。題主可以結合這個例子好好理解一下。

答主本科學習過PCA,但一直沒弄清其本質,現在想來重新溫習一下,有不對之處請指出。本文內容大量參考PCA的數學原理(非常值得閱讀)!!!!想要更加深入了解請點擊鏈接。


PCA 可以用來做降維,但通俗一點說,其本質應該是線性空間坐標系的轉換,從原始的空間坐標系,轉換到一個「合適的」的坐標系來表達,在這個坐標系中,主要信息都集中在了某幾個坐標軸上,所以只保留這個「關鍵」的坐標繫上的表達,就能很大程度approximate原信號。

演算法怎麼計算很重要,但是更重要的是要瞭然做每一步的motivation,這樣才不至於被太多計算細節所困住,見樹木不見森林。推薦一個arXiv 上的一個Tutorial:A Tutorial on Principal Component Analysis. Google的一個researcher寫的,通熟易懂,後面附有matlab代碼。


這個是推導出來的結論:找到一個投影空間,讓在上面投影后的數據的方差最大化,對應優化結果就是這個


更新, frac{1}{M}XX^T 是協方差矩陣

==============================原回答==============================

題主應該主要有兩個問題:

  1. 「最合適」是如何評價的
  2. 為什麼就「正好」是特徵向量來降維

第一個問題,

圖片來源:Principal component analysis

上面圖片中,一個樣本點有兩個特徵,現在要去掉一維,不進行坐標變換就是直接將樣本投影到x軸或者y軸(直接去掉一個特徵)。那麼有沒有更好的方向進行投影,並保留最多的信息呢(降維的目的)?這裡正確的方向就是:將樣本投影到圖中較長箭頭的方向,記做p方向(沒有找到向量符號)。為什麼?這樣投影后樣本方差最大。(信噪比也用方差比來衡量Signal-to-noise ratio)

那麼為什麼這個方向方差最大?設上圖中發出兩個箭頭的點是O(投影中心),它投影到x軸的點就叫O。那麼對於圖中一個樣本S,那麼多數情況下樣本投影到p方向與投影中心的距離要大於投影到x軸的,這樣方差也就大!這裡短箭頭則是最壞的方向,原因樣本投影到這兩個箭頭的值滿足勾股定理,和是樣本到O的距離。

下面是解決第二個問題,

首先,接著第一個問題的最佳方向,如果我們將坐標軸旋轉一下方向與箭頭方向重合,那麼也可以直接去掉一個特徵不是?

所以,解決第二個問題就是將標準基旋轉到一個正確的位置,然後選擇最好的幾個軸即可!有一個正交矩陣P,及數據矩陣X,那麼PX是?是對原始數據進行旋轉,山不轉水轉,是不是相當於旋轉了標準基。正交變換保證了兩個向量變換前後模長和內積沒有變化,所以變換等同旋轉。

X是特徵*樣本表示的話,那麼中心化之後XX^{T} 就是協方差矩陣了,可以表示特徵間的線性關係。我們想要的是進行變換後,我們的協方差矩陣是一個對角陣!兩個特徵協方差不為0,說明存在冗餘

好,到此為止,說一下要辦的事:找到一個正交陣(單位正交陣),對原始數據進行變換後的協方差矩陣為一個對角陣Lambda 。正交陣也是投影的方向互相垂直。

也就是:PXX^TP^T=Lambda ,即做個正交對角化並按照特徵值降序改變PP的每個行是新坐標的基向量,選擇合適的維度直接去掉P下面幾行進行降維,PCA就做完了。

這裡,題主問題二來了,為什麼剛好是特徵向量?

  • 當且僅當矩陣是對稱陣,可以正交對角化
  • 矩陣可以被它的正交特徵向量對角化

上面兩條卻還差一點XX^TP^T=P^TLambda ,即P^T的每一列都是XX^T特徵向量!也就是一個對稱陣能被正交對角化的都是它的特徵向量組成的矩陣。

那麼,這樣對角矩陣Lambda 元素,就確定了,最大方差也只能從這裡面出,降序挑選即可。

hu~~~

[1404.1100] A Tutorial on Principal Component Analysis 這篇Tutorial給了很大指引,讀下來之後可能就補充的一條需要想到。

PS. 第一次看到PCA正好是特徵向量矩陣也感到不可理解,所以也關注了這個問題(拉格朗日證明很對,但是覺得應該有其他理由),這裡把能說服自己的理由貼出來,不對的望指正。


今年做畢業設計時用到KPCA(核主成分分析)和主成分分析(PCA),當時思考了一下,收穫了不少。現看到這個題目,試著回答一下,算是提供一種思路吧。

以下正文:

首先PCA的目的是數據維數壓縮,儘可能降低原數據的維數,但要不損失信息或者損失少量信息。為此,它在後面處理時選擇了特徵值最大(目前我的理解是絕對值最大)的特徵值對應的特徵向量組成變換矩陣。

可以說PCA基於一點假設,即認為數據在各維上是隨機的(或者說每個數據看成一個隨機向量),然後構建協方差矩陣。這個協方差矩陣是對稱矩陣,主對角元素是各維數據的方差,而其他的則是各維數據之間的協方差,反映了各維數據之間的「線性」相關性,並且不為零時說明存在著相關性,那麼也就存在著「冗餘信息」(可以聯想解線性方程組時的多餘/無效方程組)。

維數壓縮,那麼就要去掉/捨棄多餘的維(或者說不太重要、影響小的維)!那麼先去掉各維之間的相關性,那麼最好是全部去掉相關性,即使得壓縮後的數據的協方差矩陣能是一個對角陣那該多好啊(^_^)!

這就是PCA的思想。

那我們就試著把目標數據(變換後的數據)的協方差矩陣變成一個對角陣!於是可以描述為:給定數據集X,求線性變換emph{	extbf{Y}}=Aemph{	extbf{X}}
使得變換後的數據集的協方差矩陣是一個對角陣。

下面就是矩陣對角化的問題了。簡單推導一下以更加理解:

數據集X為N個M維的特徵數據構成的M*N的矩陣,記emph{	extbf{X}}=[X_1,X_2,...,X_M]^T是一個M維隨機向量,emph{	extbf{Y}}=[Y_1,Y_2,...,Y_K]^T(Kleq M)表示變換後的數據向量,CX和CY分別表示原數據(隨機向量emph{	extbf{X}})和變換後數據(隨機向量emph{	extbf{Y}})的協方差矩陣。有:

將CX對角化,即

矩陣B為Cx的特徵列向量構成的可逆矩陣。可見,當B為正交陣(先相似求特徵向量再正交化)時,若取A=B^T即為變換矩陣,它可使協方差矩陣

即達到了要求。此時沒有進行壓縮。

A=B^T,那麼A也是正交陣,或者至少是正交向量組構成的矩陣。然後選擇特徵值最大(目前我的理解是絕對值最大)的K個特徵值對應的特徵向量(注此時的特徵向量已經不再是C_X原來的特徵向量了,是正交化後的向量,正交化後的向量是原來特徵向量的線性組合,仍然是和與原特徵值對應的特徵向量)進行投影得到新數據,也就是PCA處理後的數據。

首先說明:這裡的投影,實質上是做內積運算,即數據向量(組)和特徵向量(組)之間點積運算(用向量組的話通過矩陣乘法可以一次性變換所有的數據!)。

下面進行映射/投影。

一般我們計算得到C_X的特徵值和特徵向量,然後正交化、單位化後得到矩陣B,我們假設已經對B按特徵值絕對值大小排好順序,從正交矩陣B中取K個特徵向量,組成矩陣B_2,它是一個M*K(K≤M)的矩陣,矩陣B_2中的K個單位正交列向量組就是投影所選擇的方向。

投影:emph{	extbf{Y}}=B_2^T emph{	extbf{X}}

這裡emph{	extbf{Y}}是一個K維列向量。即映射/投影時,是用矩陣B_2的轉置去乘以原數據,這樣仍然得到一個列向量,或者用原數據去乘以矩陣B_2,這樣得到的是一個行向量即emph{	extbf{Y}}^T = emph{	extbf{X}} B_2

【說明】:直接用矩陣B_2的轉置去乘數據,將同時得到變換後數據的K個維的值,如果只取其中一個向量,則只能得到新數據的一個維的值。可以參考直角坐標系,取向量(2,3),目標向量組取x、y軸的單位向量,列向量的兩維分別表示x和y值,即有

【如果把原數據以列(行)向量形式組成一個矩陣X,那麼將一次性得到所有變換後的數據,並且也是列(行)向量形式。】

回到問題。

1——「映射後的低維空間」:

我們先假設沒有進行正交化,直接用Cx的特徵向量進行投影,那麼根據向量空間的知識,「低維空間下」就是所選的Cx的特徵向量構成的空間。

於是現在正交化了,那麼就是由所選的特徵向量正交化後的向量構成的空間,此時向量間是正交且是單位的,而原特徵向量則不一定正交(對於實對稱矩陣,取決於其特徵值的特點,互不相同則必正交,存在重根則必不完全互相正交)。

所以「映射後的低維空間」是一個以B的列向量為基(是單位正交向量組)的線性空間,基的列向量之間相互正交。

2——「…相乘就是投影」

如上面解釋的那樣,那樣運算,才是投影運算;並且按題主所說"數據乘以向量組",那麼在原數據是列向量時得到的新數據是行向量形式。

最後,扯一點其他的,MATLAB中有求特徵值和特徵向量組的函數(是eig),那個其實已經做好了正交化工作。

(首答)


兩個問題主要與PCA是什麼和為什麼演算法這樣做相關。看前面的答案都說了PCA是降維用的,但是都沒說什麼是PCA,這與「最適合的低維空間」相關,「為什麼要去均值」則與協方差矩陣相關。

首先PCA是什麼:Principal Components Analysis,主成分分析,是「通過對一部分變數數據線性組合,來對協方差矩陣做出描述」。舉例:X作為數據矩陣,n * p大小,n條數據,p個變數,每一條數據就是一個n*1的向量從x1到xp。協方差矩陣S,大小p * p。定義X上的線性組合Y=a『*X,a是n*1的向量,表示為Y=a1*x1+a2*x2+...+ap*xp。定義完了,下面就是Principal Components 的定義了:

第一個主成分定義為:Y1=a"*X,要求Y1的variance即Var(a"*X)達到最大,且a的長度=1即a"*a=1;

第二個主成分定義為:Y2=b"*X,要求Y2的variance即Var(b"*X)達到最大,且b的長度=1即b"*b=1,多了一個條件 Y1和Y2的協方差為0,即Cov(Y1,Y2)=0,可以理解為a和b的內積為0,即a b互相垂直;(長度為1,互相垂直,剛好對稱矩陣的特徵向量滿足)

下面的依次進行......

從上面可以看出PCA是定義在數據集X上的線性組合,要求使得Var(Y)達到最大,而Var(Y)=Var(a"*X)=a"*S*a,這樣就和協方差矩陣相關了。

Var(Y1)取最大值即:

從這裡可以看出,求Var(Y1)最大值的過程,就是取Σx最大特徵值的過程。

ΣY=P"ΣXP 代入 ΣX=PΛP" 可得:ΣY=Λ,Y的協方差矩陣就是X協方差矩陣的對角化。

剩下的就是對S做分解,取特徵值和特徵向量,其他人都寫了,我就不再多說。

「最適合的低維空間」,在做PCA時,儘可能留下最多的原協方差矩陣的信息,做法:把特徵值從高到低排序,λ1 λ2 。。。λp,一個個加起來,直到占特徵值總和的80%或者90%的那部分特徵值。

乘以這個「k個特徵向量分別作為列向量組成特徵向量矩陣」 是線性變換做投影的方法,線性變換的集就是k個S的特徵向量

」去均值「是為了減低大scale變數的影響。舉例:有兩個變數 銷售額 和 價格,銷售額都是幾十萬的量,價格 1-5元,這樣的話銷售額的方差會dominate協方差矩陣,其實應該是減去均值再除以標準差,一般都只減去均值做一下標準化。


去均值,因為中心矩才能反應數據的離散程度


給個鏈接,希望能有幫助:PCA線性代數講解 - gcaxuxi的博客 - CSDN博客


svd可以用來降維,但svd不是pca。svd在某些情況下比pca要快。


推薦閱讀:

如何系統複習線性代數?
量子力學中為什麼要引入複數,引入複數的意義是什麼?
線性代數有什麼用?學習線性代數的意義在哪?
為什麼正態隨機變數的二次型服從卡方分布?
一個線性代數問題求解?

TAG:機器學習 | 線性代數 | 圖像識別 | 計算機視覺 | 計算機圖形學 |