機器學習中SVD和PCA一直沒有搞的特別清楚,應該如何理解呢?
給一個比較algebraic的解釋,這兩個概念實際上是有內在關聯的。很多詞不是很清楚中文怎麼表示所以會用英文...我們假設數據矩陣(data matrix)的維數是,是樣本(sample)的數量,p是數據的維數。我們假設已經中心化了,即每列的均值為0。
首先我們定義PCA的有關概念。一種對PCA的核心意圖的解釋是,找到另一組正交基,使得進行變換後的方差(variance)最大(因為選取了方差最大的維度,所以這樣可以存儲最多的信息)。 如下圖,如果兩個維度之間的data有強相關的話這兩個維度的數據會趨近一條直線(這意味著其中一個維度的數據是多餘的),反之則會有比較大的variance。記作變換後的矩陣為。其中,矩陣的行就組成了主元(principal components)。
而SVD來源於另外的一套數學概念,不過我們將要說明這套概念和PCA是內在關聯的。不同於特徵值分解,SVD(奇異值分解)可以作用於任何形狀的矩陣。於是我們則定義對的SVD為,其中是兩個正交陣而是對角陣(對角元是的奇異值,即singular values)。我們由此也可以看到SVD比特徵值分解要強得多的泛用性,這也是它廣泛被用於數值計算的原因。
那麼它與PCA的關係呢?我們考慮的SVD表示方式:,所以到這裡答案就很明顯了,我們只需要取另一個投影矩陣就可以將對角化,即的列是principal components。順便,我們得到了一個副產品奇異值和特徵值的關係:,其中是和相應的特徵值和奇異值。因此,我們得到了SVD是PCA的另一種algebraic formulation。而這也提供了另外一種演算法來計算PCA,實際上,平時我就是用SVD定義的這套演算法來做PCA的。因為很方便,計算一次就可以了。
額外補充一點,經常我們希望用PCA對進行壓縮,比如只保留的前列(前個principal components),記作,然後就是我們所要的壓縮後的數據。
參考資料(包括那張圖的出處):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 上面發論文?
※如何看待攜程舉辦的大數據比賽?
※金融數學的發展方向是什麼?