機器學習中SVD和PCA一直沒有搞的特別清楚,應該如何理解呢?


給一個比較algebraic的解釋,這兩個概念實際上是有內在關聯的。很多詞不是很清楚中文怎麼表示所以會用英文...我們假設數據矩陣(data matrix)	extbf{X}的維數是p	imes n,n是樣本(sample)的數量,p是數據的維數。我們假設	extbf{X}已經中心化了,即每列的均值為0。

首先我們定義PCA的有關概念。一種對PCA的核心意圖的解釋是,找到另一組正交基	extbf{P},使得	extbf{X}進行變換後的方差(variance)最大(因為選取了方差最大的維度,所以這樣可以存儲最多的信息)。 如下圖,如果兩個維度之間的data有強相關的話這兩個維度的數據會趨近一條直線(這意味著其中一個維度的數據是多餘的),反之則會有比較大的variance。記作變換後的矩陣為	extbf{P}	extbf{X}=	extbf{Y}。其中,矩陣	extbf{P}的行p_i就組成了主元(principal components)。

實際中最好的做法是選擇一個合適的	extbf{P},使得	extbf{Y}的協方差矩陣(covariance matrix)	extbf{S}_Y=frac{1}{n-1} 	extbf{Y}	extbf{Y}^T能夠被對角化(diagonalized)。這是符合直觀的因為這樣子所有的covariance都被消除了(比如可能本來有很多noise)而留下的就是最能體現信息量的方差本身。具體的做法則是,注意到	extbf{X}	extbf{X}^T也是對稱正定矩陣所以我們可以做特徵值分解(eigen-decomposition)得到	extbf{X}	extbf{X}^T=	extbf{E}	extbf{D}	extbf{E}^T,其中	extbf{D}是對角矩陣(對角元是特徵值),	extbf{E}的每列是相應的特徵向量。我們令	extbf{P}=	extbf{E}^T便能得到我們的principal components。因為用這樣的	extbf{P},我們就有(注意因為	extbf{P}是正交陣,所以	extbf{P}^T =	extbf{P}^{-1}):	extbf{S}_Y=frac{1}{n-1}	extbf{P}(	extbf{X}	extbf{X}^T)	extbf{P}^T=frac{1}{n-1}	extbf{P}(	extbf{P}^T	extbf{D}	extbf{P})	extbf{P}^T=frac{1}{n-1}(	extbf{P}	extbf{P}^{-1})	extbf{D}(	extbf{P}	extbf{P}^{-1})=frac{1}{n-1}	extbf{D}

即我們可以將	extbf{S}_Y對角化。

而SVD來源於另外的一套數學概念,不過我們將要說明這套概念和PCA是內在關聯的。不同於特徵值分解,SVD(奇異值分解)可以作用於任何形狀的矩陣。於是我們則定義對	extbf{X}的SVD為	extbf{X}=	extbf{U}Sigma	extbf{V}^T,其中	extbf{U},	extbf{V}是兩個正交陣而Sigma是對角陣(對角元是	extbf{X}的奇異值,即singular values)。我們由此也可以看到SVD比特徵值分解要強得多的泛用性,這也是它廣泛被用於數值計算的原因。

那麼它與PCA的關係呢?我們考慮	extbf{S}_X的SVD表示方式:	extbf{S}_X=frac{1}{n-1} 	extbf{V}Sigma 	extbf{U}^T	extbf{U}Sigma	extbf{V}^T=frac{1}{n-1}	extbf{V}Sigma^2	extbf{V}^T,所以到這裡答案就很明顯了,我們只需要取另一個投影矩陣	extbf{P}=	extbf{V}^T就可以將	extbf{S}_Y對角化,即	extbf{V}的列是principal components。順便,我們得到了一個副產品奇異值和特徵值的關係:lambda_i=frac{1}{n-1}s_i^2,其中lambda_i,s_i	extbf{S}_XSigma相應的特徵值和奇異值。因此,我們得到了SVD是PCA的另一種algebraic formulation。而這也提供了另外一種演算法來計算PCA,實際上,平時我就是用SVD定義的這套演算法來做PCA的。因為很方便,計算一次就可以了。

額外補充一點,經常我們希望用PCA對	extbf{X}進行壓縮,比如只保留k<P>維度的數據,這個時候我們只需要僅保留<img src=的前k列(前k個principal components),記作	extbf{V}_k,然後	extbf{V}_k^T	extbf{X}就是我們所要的壓縮後的數據。

參考資料(包括那張圖的出處):https://www.cs.princeton.edu/picasso/mats/PCA-Tutorial-Intuition_jp.pdf

---------------------------------------------------------------------------------------------------------------------------------

我的一個用SVD做圖像壓縮的簡單實例的回答:

SVD降維體現在什麼地方? - 數學 - 知乎


http://blog.csdn.net/Dark_Scope/article/details/53150883

剛寫了篇博客,希望有幫助。


小弟前來賣個萌,說的不對大家多做自我批評~~

先說PCA吧,PCA降維的大致思想就是: 挑選特徵明顯的、顯得比較重要的信息保留下來

那麼關鍵就是【特徵明顯的,重要的信息】如何選擇? 選擇標準有兩個:

1: 同一個維度內的數據,方差大的比較明顯,因為方差大表示自己和平均水平差異大,有個性,降維後也最可能分的開~

2: 兩個不同維度間關聯度越小越好,因為關聯度小表示這兩個維度表徵共同信息的量比較少,最理想就是兩個維度不相關,相關度為0(相關度可以用協方差cov(a,b)表示),在線性空間內表現為兩個維度正交~

協方差矩陣的主對角線和其餘元素正好可以分別表示方差和協方差,而根據兩條標準又很容易想到求特徵值和特徵向量,推導過程 @覃含章大大寫的很清楚了

------------------------------------------------------------------------------------------------------------------

下面說一下為啥還有SVD,上面我們說PCA針對的是協方差矩陣C,但你得知道協方差矩陣是個方陣啊,難道不是方陣我們就不資瓷么?? 所以就有了SVD~~

大概可以把SVD看作是對非方陣做PCA處理的一種方式啦,畢竟兩者的套路都差不多,分解出特徵值(SVD里是奇異值,數據XX『的特徵值的平方根),挑比較大的特徵值對應的特徵向量構成投影矩陣,然後做線性變換(將數據X投影到低維空間)


我理解就是一種降維的方法,用更少的成本描述更多的信息,具體可以看看這篇文章:理解PCA和SVD


每一條訓練數據可以看做是高維空間中的一個點,空間需要一組基來表示。通俗的說,就是坐標軸。原始特徵的表示並不一定好。

pca可以理解為給數據找一組新的基,通常這組新的基比原來維度低,即傳說中的降維。這樣要解決的事情就是用比原來少的維度,還能刻畫原來的數據。怎麼做?svd就是一種方法。svd分解之後,保留奇異值最大的那部分,就實現了這一點,因為奇異值大的那部分「更能代表原來的信息」。

降維有什麼用?一方面是可以降低信噪比,讓數據更容易被學習,其實就是對數據進行了一次去冗,通俗的說就是撈乾的。另外也是為了性能,畢竟維度太高是算不動的。


稍微有點線性代數基礎,再看這篇文章CodingLabs - PCA的數學原理,幫你理清向量基變換和協方差矩陣,就能理解PCA了


可以參閱:

機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用

1、奇異值與主成分分析(PCA)

2、奇異值與潛在語義索引LSI


機器學習 - SVD - 行到水窮處,坐看雲起時 - CSDN博客


一句話,SVD是矩陣上的PCA方法


A one sentence explanation goes like this:

If a random vector is represented in the vector space whose basis are the orthogonal eigen vectors of its original covariance matrix, the 2nd order information redundancy would be eliminated.

The detailed explanation can be found here:

https://lambdamore.github.io/2016/10/12/Principle_Component_Analysis/


這個我寫過一篇,就是降維,比如西瓜有很多特徵,我們只需要找到最關鍵的特徵就好了。


推薦閱讀:

遊戲行業,大數據該如何應用?
如果有第谷的數據,現在的機器學習,深度學習有辦法學出開普勒三定律嗎?
怎樣才能在NIPS 上面發論文?
如何看待攜程舉辦的大數據比賽?
金融數學的發展方向是什麼?

TAG:數據挖掘 | 機器學習 | 人工智慧演算法 |