機器學習之降維算法2-主成分分析(PCA)

原文作者1:Orisun 鏈接:http://www.cnblogs.com/zhangchaoyang/articles/2222048.html

原文作者2:LeftNotEasy 鏈接:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html

原文作者3:oimz 鏈接:http://www.cnblogs.com/oimz/archive/2011/08/24/pca.html

降維的必要性

1.多重共線性--預測變量之間相互關聯。多重共線性會導致解空間的不穩定,從而可能導致結果的不連貫。

2.高維空間本身具有稀疏性。一維正態分佈有68%的值落於正負標準差之間,而在十維空間上只有0.02%。

3.過多的變量會妨礙查找規律的建立。

4.僅在變量層面上分析可能會忽略變量之間的潛在聯繫。例如幾個預測變量可能落入僅反映數據某一方面特徵的一個組內。

降維的目的:

1.減少預測變量的個數

2.確保這些變量是相互獨立的

3.提供一個框架來解釋結果

降維的方法有:主成分分析、因子分析、用戶自定義複合等。

 

PCA(Principal Component Analysis)不僅僅是對高維數據進行降維,更重要的是經過降維去除了噪聲,發現了數據中的模式。

PCA把原先的n個特徵用數目更少的m個特徵取代,新特徵是舊特徵的線性組合,這些線性組合最大化樣本方差,儘量使新的m個特徵互不相關。從舊特徵到新特徵的映射捕獲數據中的固有變異性。

預備知識

樣本X和樣本Y的協方差(Covariance):

協方差爲正時說明X和Y是正相關關係,協方差爲負時X和Y是負相關關係,協方差爲0時X和Y相互獨立。

Cov(X,X)就是X的方差(Variance).

當樣本是n維數據時,它們的協方差實際上是協方差矩陣(對稱方陣),方陣的邊長是。比如對於3維數據(x,y,z),計算它的協方差就是:

,則稱是A的特徵值,X是對應的特徵向量。實際上可以這樣理解:矩陣A作用在它的特徵向量X上,僅僅使得X的長度發生了變化,縮放比例就是相應的特徵值

當A是n階可逆矩陣時,A與P-1Ap相似,相似矩陣具有相同的特徵值。

特別地,當A是對稱矩陣時,A的奇異值等於A的特徵值,存在正交矩陣Q(Q-1=QT),使得:

對A進行奇異值分解就能求出所有特徵值和Q矩陣。

     D是由特徵值組成的對角矩陣

由特徵值和特徵向量的定義知,Q的列向量就是A的特徵向量。

Jama包

Jama包是用於基本線性代數運算的java包,提供矩陣的cholesky分解、LUD分解、QR分解、奇異值分解,以及PCA中要用到的特徵值分解,此外可以計算矩陣的乘除法、矩陣的範數和條件數、解線性方程組等。

從LDA說起-LDA:

    LDA的全稱是Linear Discriminant Analysis(線性判別分析),是一種supervised learning。有些資料上也稱爲是Fisher’s Linear Discriminant,因爲它被Ronald Fisher發明自1936年,Discriminant這次詞我個人的理解是,一個模型,不需要去通過概率的方法來訓練、預測數據,比如說各種貝葉斯方法,就需要獲取數據的先驗、後驗概率等等。LDA是在目前機器學習、數據挖掘領域經典且熱門的一個算法,據我所知,百度的商務搜索部裏面就用了不少這方面的算法。

    LDA的原理是,將帶上標籤的數據(點),通過投影的方法,投影到維度更低的空間中,使得投影后的點,會形成按類別區分,一簇一簇的情況,相同類別的點,將會在投影后的空間中更接近。要說明白LDA,首先得弄明白線性分類器(Linear Classifier):因爲LDA是一種線性分類器。對於K-分類的一個分類問題,會有K個線性函數:

image

     當滿足條件:對於所有的j,都有Yk > Yj,的時候,我們就說x屬於類別k。對於每一個分類,都有一個公式去算一個分值,在所有的公式得到的分值中,找一個最大的,就是所屬的分類了。

    上式實際上就是一種投影,是將一個高維的點投影到一條高維的直線上,LDA最求的目標是,給出一個標註了類別的數據集,投影到了一條直線之後,能夠使得點儘量的按類別區分開,當k=2即二分類問題的時候,如下圖所示:

clip_image002

     紅色的方形的點爲0類的原始點、藍色的方形點爲1類的原始點,經過原點的那條線就是投影的直線,從圖上可以清楚的看到,紅色的點和藍色的點被原點明顯的分開了,這個數據只是隨便畫的,如果在高維的情況下,看起來會更好一點。下面我來推導一下二分類LDA問題的公式:

     假設用來區分二分類的直線(投影函數)爲:

image

    LDA分類的一個目標是使得不同類別之間的距離越遠越好,同一類別之中的距離越近越好,所以我們需要定義幾個關鍵的值。

    類別i的原始中心點爲:(Di表示屬於類別i的點)image

    類別i投影后的中心點爲:

image

    衡量類別i投影后,類別點之間的分散程度(方差)爲:

image

    最終我們可以得到一個下面的公式,表示LDA投影到w後的損失函數:

image

   我們分類的目標是,使得類別內的點距離越近越好(集中),類別間的點越遠越好。分母表示每一個類別內的方差之和,方差越大表示一個類別內的點越分散,分子爲兩個類別各自的中心點的距離的平方,我們最大化J(w)就可以求出最優的w了。想要求出最優的w,可以使用拉格朗日乘子法,但是現在我們得到的J(w)裏面,w是不能被單獨提出來的,我們就得想辦法將w單獨提出來。

   我們定義一個投影前的各類別分散程度的矩陣,這個矩陣看起來有一點麻煩,其實意思是,如果某一個分類的輸入點集Di裏面的點距離這個分類的中心店mi越近,則Si裏面元素的值就越小,如果分類的點都緊緊地圍繞着mi,則Si裏面的元素值越更接近0.

image

   帶入Si,將J(w)分母化爲:

image

image

   同樣的將J(w)分子化爲:

image

   這樣損失函數可以化成下面的形式:

 image

   這樣就可以用最喜歡的拉格朗日乘子法了,但是還有一個問題,如果分子、分母是都可以取任意值的,那就會使得有無窮解,我們將分母限制爲長度爲1(這是用拉格朗日乘子法一個很重要的技巧,在下面將說的PCA裏面也會用到,如果忘記了,請複習一下高數),並作爲拉格朗日乘子法的限制條件,帶入得到:

image

   這樣的式子就是一個求特徵值的問題了。

   對於N(N>2)分類的問題,我就直接寫出下面的結論了:

image

   這同樣是一個求特徵值的問題,我們求出的第i大的特徵向量,就是對應的Wi了。

   這裏想多談談特徵值,特徵值在純數學、量子力學、固體力學、計算機等等領域都有廣泛的應用,特徵值表示的是矩陣的性質,當我們取到矩陣的前N個最大的特徵值的時候,我們可以說提取到的矩陣主要的成分(這個和之後的PCA相關,但是不是完全一樣的概念)。在機器學習領域,不少的地方都要用到特徵值的計算,比如說圖像識別、pagerank、LDA、還有之後將會提到的PCA等等。

   下圖是圖像識別中廣泛用到的特徵臉(eigen face),提取出特徵臉有兩個目的,首先是爲了壓縮數據,對於一張圖片,只需要保存其最重要的部分就是了,然後是爲了使得程序更容易處理,在提取主要特徵的時候,很多的噪聲都被過濾掉了。跟下面將談到的PCA的作用非常相關。

image

    特徵值的求法有很多,求一個D * D的矩陣的時間複雜度是O(D^3), 也有一些求Top M的方法,比如說power method,它的時間複雜度是O(D^2 * M), 總體來說,求特徵值是一個很費時間的操作,如果是單機環境下,是很侷限的。

PCA:

    主成分分析(PCA)與LDA有着非常近似的意思,LDA的輸入數據是帶標籤的,而PCA的輸入數據是不帶標籤的,所以PCA是一種unsupervised learning。LDA通常來說是作爲一個獨立的算法存在,給定了訓練數據後,將會得到一系列的判別函數(discriminate function),之後對於新的輸入,就可以進行預測了。而PCA更像是一個預處理的方法,它可以將原本的數據降低維度,而使得降低了維度的數據之間的方差最大(也可以說投影誤差最小,具體在之後的推導裏面會談到)。

    方差這個東西是個很有趣的,有些時候我們會考慮減少方差(比如說訓練模型的時候,我們會考慮到方差-偏差的均衡),有的時候我們會盡量的增大方差。方差就像是一種信仰(強哥的話),不一定會有很嚴密的證明,從實踐來說,通過儘量增大投影方差的PCA算法,確實可以提高我們的算法質量。

    說了這麼多,推推公式可以幫助我們理解。我下面將用兩種思路來推導出一個同樣的表達式。首先是最大化投影后的方差,其次是最小化投影后的損失(投影產生的損失最小)。

    最大化方差法:

    假設我們還是將一個空間中的點投影到一個向量中去。首先,給出原空間的中心點:

image    假設u1爲投影向量,投影之後的方差爲:

image    上面這個式子如果看懂了之前推導LDA的過程,應該比較容易理解,如果線性代數裏面的內容忘記了,可以再溫習一下,優化上式等號右邊的內容,還是用拉格朗日乘子法:

image    將上式求導,使之爲0,得到:

image    這是一個標準的特徵值表達式了,λ對應的特徵值,u對應的特徵向量。上式的左邊取得最大值的條件就是λ1最大,也就是取得最大的特徵值的時候。假設我們是要將一個D維的數據空間投影到M維的數據空間中(M < D), 那我們取前M個特徵向量構成的投影矩陣就是能夠使得方差最大的矩陣了。

    最小化損失法:

    假設輸入數據x是在D維空間中的點,那麼,我們可以用D個正交的D維向量去完全的表示這個空間(這個空間中所有的向量都可以用這D個向量的線性組合得到)。在D維空間中,有無窮多種可能找這D個正交的D維向量,哪個組合是最合適的呢?

    假設我們已經找到了這D個向量,可以得到:

image    我們可以用近似法來表示投影后的點:

image    上式表示,得到的新的x是由前M 個基的線性組合加上後D - M個基的線性組合,注意這裏的z是對於每個x都不同的,而b對於每個x是相同的,這樣我們就可以用M個數來表示空間中的一個點,也就是使得數據降維了。但是這樣降維後的數據,必然會產生一些扭曲,我們用J描述這種扭曲,我們的目標是,使得J最小:

image    上式的意思很直觀,就是對於每一個點,將降維後的點與原始的點之間的距離的平方和加起來,求平均值,我們就要使得這個平均值最小。我們令:

image    將上面得到的z與b帶入降維的表達式:

image    將上式帶入J的表達式得到:

 image    再用上拉普拉斯乘子法(此處略),可以得到,取得我們想要的投影基的表達式爲:

image    這裏又是一個特徵值的表達式,我們想要的前M個向量其實就是這裏最大的M個特徵值所對應的特徵向量。證明這個還可以看看,我們J可以化爲:

image    也就是當誤差J是由最小的D - M個特徵值組成的時候,J取得最小值。跟上面的意思相同。

    下圖是PCA的投影的一個表示,黑色的點是原始的點,帶箭頭的虛線是投影的向量,Pc1表示特徵值最大的特徵向量,pc2表示特徵值次大的特徵向量,兩者是彼此正交的,因爲這原本是一個2維的空間,所以最多有兩個投影的向量,如果空間維度更高,則投影的向量會更多。(疑問圖片丟失)

簡單計算實例:

http://www.cnblogs.com/oimz/archive/2011/08/24/pca.html

另外參考:

http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020216.html
http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章