主成份分析(PCA)——原理、實現步驟

    PCA(Principal Component Analysis)是一種常用的數據分析方法。PCA通過線性變換將原始數據變換爲一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的降維。本文主要分爲兩大部分:

第一部分:PCA原理的主要內容。

第二部分:給出PCA程序實現步驟。

第三部分:程序函數詳解。見下一篇博客:

程序源碼下載地址:http://download.csdn.net/detail/ckzhb/9903051

一、原理

參考:

http://blog.csdn.net/xiaojidan2011/article/details/11595869

http://blog.sina.com.cn/s/blog_82e9a8f80102x25y.html

1.1 預備知識

1、基變換的矩陣表示

一般的,如果我們有M個N維向量,想將其變換爲由R個N維向量表示的新空間中,那麼首先將R個基按行組成矩陣A,然後將向量按列組成矩陣B,那麼兩矩陣的乘積AB就是變換結果,其中AB的第m列爲A中第m列變換後的結果。


R可以小於N,而R決定了變換後數據的維數。也就是說,我們可以將一N維數據變換到更低維度的空間中去,變換後的維度取決於基的數量。因此這種矩陣相乘的表示也可以表示降維變換。

矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量爲基所表示的空間中去。更抽象的說,一個矩陣可以表示一種線性變換。

2、協方差矩陣

從直觀上來看,協方差表示的是兩個變量總體誤差的期望。如果兩個變量的變化趨勢一致,也就是說如果其中一個大於自身的期望值時另外一個也大於自身的期望值,那麼兩個變量之間的協方差就是正值;如果兩個變量的變化趨勢相反,即其中一個變量大於自身的期望值時另外一個卻小於自身的期望值,那麼兩個變量之間的協方差就是負值。

協方差矩陣:

協方差矩陣計算的是不同維度之間的協方差,而不是不同樣本之間的。



1.2 問題轉換和優化

問題:如何選擇基纔是最優的。或者說,如果我們有一組N維向量,現在要將其降到K維(K小於N),那麼我們應該如何選擇K個基才能最大程度保留原有的信息?

答:直觀地,投影后,數據之間的方差越大越好。且對於K個基,如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應該是“幾乎重合在一起”,顯然這樣的維度是沒有用的,因此,應該有其他約束條件。從直觀上說,讓兩個字段儘可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關性的,因爲相關性意味着兩個字段不是完全獨立,必然存在重複表示的信息。降維問題的優化目標:將一組N維向量降爲K維(K大於0,小於N),其目標是選擇K個單位(模爲1)正交基,使得原始數據變換到這組基上後,各字段兩兩間協方差爲0,而字段的方差則儘可能大(在正交的約束下,取最大的K個方差)

最終要達到的目的與屬性內方差及屬性間協方差有密切關係。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示爲內積的形式,而內積又與矩陣相乘密切相關。

在屬性/特徵/維度均值爲0的情況下,兩個屬性/特徵/維度的協方差簡潔的表示爲其內積除以元素數m。

假設我們只有a和b兩個字段,那麼我們將它們按行組成矩陣X,然後我們用X乘以X的轉置,並乘上係數1/m。



這個矩陣對角線上的兩個元素分別是兩個字段的方差,而其它元素是a和b的協方差。兩者被統一到了一個矩陣的。


根據一些列數學推導,我們發現要達到優化目的,等價於將協方差矩陣對角化:即除對角線外的其它元素化爲0,並且在對角線上將元素按大小從上到下排列,這樣我們就達到了優化目的。設原始數據矩陣X對應的協方差矩陣爲Cov,而P是一組基按行組成的矩陣,設Y=PX,則YXP做基變換後的數據。優化目標變成了尋找一個矩陣P,滿足是一個對角矩陣,並且對角元素按從大到小依次排列,那麼P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得XN維降到了K維並滿足上述優化條件


二、PCA實現步驟:

設有m條n維數據。

1)將原始數據按列組成n行m列矩陣X。

2)將X的每一行(代表一個屬性字段)進行零均值化,即減去這一行的均值。

即數據預處理,更準確的做法爲:


3)求出協方差矩陣Cov。

4)求出協方差矩陣的特徵值及對應的特徵向量或者利用奇異值分解的方法。

5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P。

6)Y=PX即爲降維到k維後的數據


三、程序

本文給出程序代碼中的一些預備知識即盒形圖,具體程序詳解見一篇文章。

參考:

http://wiki.mbalib.com/wiki/%E7%AE%B1%E7%BA%BF%E5%9B%BE

http://www.blogjava.net/norvid/articles/317235.html



圖形說明:

它由數據中的五個統計量組成:最小值(min),下四分位數(Q1),中位數(median),上四分位數(Q3),最大值(max)。也可以往盒圖裏面加入平均值(mean)。如上圖。下四分位數、中位數、上四分位數組成一個帶有隔間的盒子。上四分位數到最大值之間建立一條延伸線,這個延伸線成爲鬍鬚(whisker)”

由於現實數據中總是存在各式各樣地髒數據,也成爲離羣點,於是爲了不因這些少數的離羣數據導致整體特徵的偏移,將這些離羣點單獨匯出,而盒圖中的鬍鬚的兩級修改成最小觀測值與最大觀測值。這裏有個經驗,就是最大(最小)觀測值設置爲與四分位數值間距離爲1.5IQR(中間四分位數極差)。如果存在離羣點小於最小觀測值,則鬍鬚下限爲最小觀測值,離羣點單獨以點匯出。如果沒有比最小觀測值小的數,則鬍鬚下限爲最小值;如果存在離羣點大於最大觀測值,則鬍鬚上限爲最大觀測值,離羣點單獨以點匯出。如果沒有比最大觀測值大的數,則鬍鬚上限爲最大值。(當兩種情況同時發生時,兩側的鬍鬚長度相等)

  • IQR = Q3-Q1,即上四分位數與下四分位數之間的差,也就是盒子的長度,四分位距。
  • 在Q3+1.5IQR(四分位距)和Q1-1.5IQR處畫兩條與中位線一樣的線段,這兩條線段爲異常值截斷點,稱其爲內限;在Q3+3IQR和Q1-3IQR處畫兩條線段,稱其爲外限。處於內限以外位置的點表示的數據都是異常值,其中在內限與外限之間的異常值爲溫和的異常值(mild outliers),在外限以外的爲極端的異常值(li)的異常值extreme outliers。

作用:

1、直觀明瞭地識別數據批中的異常值。箱線圖爲我們提供了識別異常值的一個標準:異常值被定義爲小於Q11.5IQR或大於Q31.5IQR的值,來源於經驗判斷,經驗表明它在處理需要特別注意的數據方面表現不錯。衆所周知,基於正態分佈法則或z分數方法是以假定數據服從正態分佈爲前提的,但實際數據往往並不嚴格服從正態分佈。它們判斷異常值的標準是以計算數據批的均值和標準差爲基礎的,而均值和標準差的耐抗性極小,異常值本身會對它們產生較大影響,這樣產生的異常值個數不會多於總數0.7%。顯然,應用這種方法於非正態分佈數據中判斷異常值,其有效性是有限的。箱線圖的繪製依靠實際數據,不需要事先假定數據服從特定的分佈形式,沒有對數據作任何限制性要求,它只是真實直觀地表現數據形狀的本來面貌;另一方面,箱線圖判斷異常值的標準以四分位數和四分位距爲基礎,四分位數具有一定的耐抗性,多達25%的數據可以變得任意遠而不會很大地擾動四分位數,所以異常值不能對這個標準施加影響,箱線圖識別異常值的結果比較客觀。由此可見,箱線圖在識別異常值方面有一定的優越性。

2、利用箱線圖判斷數據批的偏態和尾重。

具體見參考來源。

3、利用箱線圖比較幾批數據的形狀

同一數軸上,幾批數據的箱線圖並行排列,幾批數據的中位數、尾長、異常值、分佈區間等形狀信息便昭然若揭。在一批數據中,哪幾個數據點出類拔萃,哪些數據點表現不及一般,這些數據點放在同類其它羣體中處於什麼位置,可以通過比較各箱線圖的異常值看出。各批數據的四分位距大小,正常值的分佈是集中還是分散,觀察各方盒和線段的長短便可明瞭。每批數據分佈的偏態如何,分析中位線和異常值的位置也可估計出來。還有一些箱線圖的變種,使數據批間的比較更加直觀明白。例如有一種可變寬度的箱線圖,使箱的寬度正比於批量的平方根,從而使批量大的數據批有面積大的箱,面積大的箱有適當的視覺效果。如果對同類羣體的幾批數據的箱線圖進行比較,分析評價,便是常模參照解釋方法的可視圖示;如果把受測者數據批的箱線圖與外在效標數據批的箱線圖比較分析,便是效標參照解釋的可視圖示。箱線圖結合這些分析方法用於質量管理、人事測評、探索性數據分析等統計分析活動中去,有助於分析過程的簡便快捷,其作用顯而易見。

 

侷限:

1)不能提供關於數據分佈偏態和尾重程度的精確度量

2)對於批量比較大的數據批,反應的形狀信息更加模糊

3)用中位數代表總體評價水平有一定的侷限性









發佈了78 篇原創文章 · 獲贊 134 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章