PCA分析及實現

一、數學概念

參考:方差、標準差和協方差三者之間的定義與計算

1. 方差

方差是各個數據與平均數之差的平方的平均數。在概率論和數理統計中,方差(英文Variance)用來度量隨機變量和其數學期望(即均值)之間的偏離程度。在許多實際問題中,研究隨機變量和均值之間的偏離程度有着很重要的意義。

2. 標準差

方差開根號。

3. 協方差

在概率論和統計學中,協方差用於衡量兩個變量的總體誤差。而方差是協方差的一種特殊情況,即當兩個變量是相同的情況。

可以通俗的理解爲:兩個變量在變化過程中是否同向變化?還是反方向變化?同向或反向程度如何?

你變大,同時我也變大,說明兩個變量是同向變化的,這是協方差就是正的。

你變大,同時我變小,說明兩個變量是反向變化的,這時協方差就是負的。

如果我是自然人,而你是太陽,那麼兩者沒有相關關係,這時協方差是0。

從數值來看,協方差的數值越大,兩個變量同向程度也就越大,反之亦然。

可以看出來,協方差代表了兩個變量之間的是否同時偏離均值,和偏離的方向是相同還是相反。

4. 方差,標準差與協方差之間的聯繫與區別
  • 方差和標準差都是對一組(一維)數據進行統計的,反映的是一維數組的離散程度;而協方差是對2組數據進行統計的,反映的是2組數據之間的相關性。
  • 標準差和均值的量綱(單位)是一致的,在描述一個波動範圍時標準差比方差更方便。比如一個班男生的平均身高是170cm,標準差是10cm,那麼方差就是10cm^2。可以進行的比較簡便的描述是本班男生身高分佈是170±10cm,方差就無法做到這點。
  • 方差可以看成是協方差的一種特殊情況,即2組數據完全相同。
  • 協方差只表示線性相關的方向,取值正無窮到負無窮。
5. 協方差矩陣

https://blog.csdn.net/GoodShot/article/details/79940438
對角線上分別是x和y的方差,非對角線上是協方差。協方差大於0表示x和y若有一個增,另一個也增;小於0表示一個增,一個減;協方差爲0時,兩者獨立。協方差絕對值越大,兩者對彼此的影響越大,反之越小。
協方差矩陣計算方法

6. 線性代數矩陣相關

特徵值 特徵向量 矩陣對角化 待補充 啊啊啊啊啊想死

二、研究背景

參考:主成分分析(PCA)原理詳解

1. 相關背景

在許多領域的研究與應用中,通常需要對含有多個變量的數據進行觀測,收集大量數據後進行分析尋找規律。多變量大數據集無疑會爲研究和應用提供豐富的信息,但是也在一定程度上增加了數據採集的工作量。更重要的是在很多情形下,許多變量之間可能存在相關性,從而增加了問題分析的複雜性。如果分別對每個指標進行分析,分析往往是孤立的,不能完全利用數據中的信息,因此盲目減少指標會損失很多有用的信息,從而產生錯誤的結論。

因此需要找到一種合理的方法,在減少需要分析的指標同時,儘量減少原指標包含信息的損失,以達到對所收集數據進行全面分析的目的。由於各變量之間存在一定的相關關係,因此可以考慮將關係緊密的變量變成儘可能少的新變量,使這些新變量是兩兩不相關的,那麼就可以用較少的綜合指標分別代表存在於各個變量中的各類信息。主成分分析與因子分析就屬於這類降維算法。

2. 數據降維

降維就是一種對高維度特徵數據預處理方法。降維是將高維度的數據保留下最重要的一些特徵,去除噪聲和不重要的特徵,從而實現提升數據處理速度的目的。在實際的生產和應用中,降維在一定的信息損失範圍內,可以爲我們節省大量的時間和成本。降維也成爲應用非常廣泛的數據預處理方法。

降維具有如下一些優點:

  1. 使得數據集更易使用。
  2. 降低算法的計算開銷。
  3. 去除噪聲。
  4. 使得結果容易理解。

降維的算法有很多,比如奇異值分解(SVD)、主成分分析(PCA)、因子分析(FA)、獨立成分分析(ICA)。

注意:降維就意味着信息的丟失,這一點一定要明確,如果用原始數據在模型上沒有效果,期望通過降維來進行改善這是不現實的,不過鑑於實際數據本身常常存在的相關性,我們可以想辦法在降維的同時將信息的損失儘量降低。當你在原數據上跑了一個比較好的結果,又嫌它太慢模型太複雜時候纔可以採取PCA降維。

三、PCA原理

參考:https://blog.csdn.net/program_developer/article/details/80632779
以及一個很好的講解:https://blog.csdn.net/zhongkelee/article/details/44064401

1. PCA的概念

PCA(Principal Component Analysis),即主成分分析方法,是一種使用最廣泛的數據降維算法。PCA的主要思想是將n維特徵映射到k維上,這k維是全新的正交特徵也被稱爲主成分,是在原有n維特徵的基礎上重新構造出來的k維特徵。PCA的工作就是從原始的空間中順序地找一組相互正交的座標軸,新的座標軸的選擇與數據本身是密切相關的。其中,第一個新座標軸選擇是原始數據中方差最大的方向,第二個新座標軸選取是與第一個座標軸正交的平面中使得方差最大的,第三個軸是與第1,2個軸正交的平面中方差最大的。依次類推,可以得到n個這樣的座標軸。通過這種方式獲得的新的座標軸,我們發現,大部分方差都包含在前面k個座標軸中,後面的座標軸所含的方差幾乎爲0。於是,我們可以忽略餘下的座標軸,只保留前面k個含有絕大部分方差的座標軸。事實上,這相當於只保留包含絕大部分方差的維度特徵,而忽略包含方差幾乎爲0的特徵維度,實現對數據特徵的降維處理。

思考:我們如何得到這些包含最大差異性的主成分方向呢?

答案:事實上,通過計算數據矩陣的協方差矩陣,然後得到協方差矩陣的特徵值特徵向量,選擇特徵值最大(即方差最大)的k個特徵所對應的特徵向量組成的矩陣。這樣就可以將數據矩陣轉換到新的空間當中,實現數據特徵的降維。

由於得到協方差矩陣的特徵值特徵向量有兩種方法:特徵值分解協方差矩陣、奇異值分解協方差矩陣,所以PCA算法有兩種實現方法:基於特徵值分解協方差矩陣實現PCA算法、基於SVD分解協方差矩陣實現PCA算法。

2. 基本步驟
  • 對數據進行歸一化處理(代碼中並不是這麼做的,而是直接減去均值)
  • 計算歸一化後的數據集的協方差矩陣
  • 計算協方差矩陣的特徵值和特徵向量
  • 保留最重要的k個特徵(通常k要小於n)。也能夠自己制定。也能夠選擇一個閾值,然後通過前k個特徵值之和減去後面n-k個特徵值之和大於這個閾值,則選擇這個k
  • 找出k個特徵值相應的特徵向量
  • 將m * n的數據集乘以k個n維的特徵向量的特徵向量(n * k),得到最後降維的數據。
3. python實現

https://github.com/csuldw/MachineLearning/tree/master/PCA
https://github.com/lguduy/Machine-Learning/tree/master/PCA

其他參考:
Python 實現 PCA
PCA主成分分析Python實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章