PCA-主成分分析

2021-02-15 冰巖作坊
PCA-主成分分析

PCA是什麼

PCA(Principal Component Analysis,主成分分析)是一種常用的數據分析方法。PCA被稱為應用線性代數的最有價值的成果之一,在從神經科學到計算機圖形學的各種分析中都得到了廣泛使用。PCA通過線性變換將原始數據變換為一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的降維。

PCA經常被用於機器學習之中,但是一般來說PCA只是作為機器學習系統的一個組件,與機器學習算法沒有依賴關係。所以,即使沒有了解過機器學習,也不妨礙對PCA的理解。

本文會涉及較多的基礎線性代數的內容,但是圖很多(

會有線代複習(

如果真的想不起來,可以只看文字以及圖片,領會PCA的主要思想。

PCA能用來幹些啥

降低特徵向量的維度,提升算法的運行速度。

比如信息來源是一張100*100px的圖片,如果把每個像素都作為一維特徵,維度就高達10000,但是圖片其實沒有提供10000維這麼多的信息,時間大部分被浪費在處理冗餘的信息上。這時加入PCA可以顯著提升算法運行速度。

研究未知、複雜、混沌的系統。

比如讓一個人研究彈簧上小球的簡諧運動,出於某種原因他不能直觀觀察到小球的運動情況。於是他設置了三個攝像機從不同角度記錄小球的運動。但是實際上這只是一個一維運動,冗餘的數據是無用的,這時PCA就能起到作用。

這看起來有點蠢,但是在對神經系統,氣象學和海洋學等複雜系統的分析中我們其實會面對類似的情況。

進行數據可視化。

如果要分析一份十幾維或者幾十維的數據,由於維度過高,沒有辦法把它畫出來。運用PCA將數據降到三維或者二維之後,可以通過可視化觀察數據之間的相對分布等情況得出一些結論。

特徵向量以及降維

在數據分析中,將樣本的某種屬性或某項數據稱為特徵。

比如,如果我們希望通過採集到的數據來預測房子的價格,那麼對於房子(樣本),其特徵可能有:面積、樓層、到市中心的距離、五百米內的公交站數目等等。

為了便於分析運算,在表示這些特徵的時候我們往往將其寫為向量的形式,如

這裡的

在特徵數目很多的時候,大量的特徵可能是高度相關甚至是冗餘的。我們可以針對這些特徵進行降維。

比如預測房價的時候,拿到這樣一個特徵向量:

很容易發現這兩個特徵其實描述的是一個東西,他們基本上是相等的,如果把圖畫出來可能是這個樣子

如果對這樣一個數據進行降維,我們可以直接刪除

當然這個情況十分極端,實際情況中很難遇到。不過實際應用中有很多特徵相關性很高,比如淘寶中店鋪的下單量和成交量,再比如學生的數學成績與物理成績,刪除其中一個特徵對後續算法的影響也許不會太大。

在面對大量數據的時候,我們難以直接判斷出兩個數據是否相關、相關程度有多高,也不會像上面那樣直接暴力樸素地刪除一個特徵。這時,我們就需要藉助一些工具。

一點數學

線代複習課

別走啊真的都是課內學過的

其中前三小節內容為線性代數基礎內容,學過的同學可以跳過。

向量內積

兩個向量的內積定義為

其幾何意義為向量

或者可以寫為

基與基向量

n維空間中的任意向量可以唯一表示為n個相互線性無關的向量的線性組合,這n個向量的集合叫做,這些向量叫做基向量

基向量兩兩正交且都是單位向量的基叫做標準正交基。

比如二維空間中我們一般使用的基是

某個向量A可以寫作這樣

如果改變使用的基,使

那麼同一個向量A就要寫作

像這樣

可以看到,如果改變後的基仍是標準正交基,那麼向量A的新坐標就為在各個新的基向量上投影的長度,即

批量線性變換

上面的公式其實可以寫成(其中

如果有很多個特徵向量

協方差

突然引入這樣一個概念可能會很突兀,但是別著急,在下一節中就能看到它發揮作用。

對於兩組數據

如何描述他們的相關程度呢?

如下定義兩組數據的協方差

其中

如果協方差大於0,那麼兩組數據成正相關;如果協方差小於0,那麼兩組數據成負相關;如果協方差等於0,那麼兩組數據不相關。

直觀理解:

如果兩組數據成正相關,一般情況下,

如果兩組數據成負相關,一般情況下,

如果兩組數據不相關,可以這麼考慮:當a取某一值的時候,b的取值是隨機的,此時

**太長不看版:**當協方差為0時,表示兩組數據完全獨立。

開始降維工作優化目標:從二維到一維

假設我們拿到如下一組處理過的數據,要把它從二維降到一維:

"處理"是指:將原始數據中每個特徵的值減去該特徵的平均值,確保平移後的數據的均值為0。這樣處理的優勢很快就能體現出來。

要將這樣的數據降成一維,我們考慮將數據從原來的位置投影到某個方向上,將這個新的方向作為新的特徵。那麼選取什麼樣的方向才能使損失的信息最少呢?

如果像這樣投影那顯然不是很對勁,原本圖中相差很遠的點在新的方向上卻離得很近,許多本來應該有的信息被丟失了。

而投影成這樣就比較合理,數據的分布情況和原始數據差別不大。

那如何衡量一個投影的方向是否合理呢?直觀上,我們認為投影后數據越分散,丟失的信息越少,分散程度用方差來表示。

由於我們已經將數據的均值都變化成0了,方差可以寫成

那麼從二維到一維的優化目標可以這樣描述:重新選擇一個一維的基,將二維的數據變換到新的基上,使得變換後的數據方差最大

更高維的優化目標

一般而言,使用PCA的時候我們並不是要將二維的數據降為一維的,而是對數千維的數據進行降維。對於更高的維度,這裡用三維降為二維來類比舉例。

按照之前總結的方法,我們先選出一個基向量,使投影到這個基向量上的點的方差最大。由於要將數據降到二維,我們還需要選擇第二個基向量。

這個時候我們會發現「方差最大」的優化目標不好用了,因為如果我們尋找第二個方向使得投影的方差最大,會得到和第一個基向量完全一樣的結果——因為優化的目標完全沒有改變。

這時就要用到我們剛才講的協方差

我們已經通過對第一個基向量的投影找到了一組新的特徵

由於均值為0,協方差可以被寫成

比剛才好看了不少。

於是,從n維降到r維的優化目標是:

重新選擇一個基向量,將原始數據變換到新的基上,使得變換後的數據方差最大。依次另選協方差為0優化過程:協方差矩陣及其對角化

上一小節我們給出了協方差矩陣的優化目標。接下來的部分是該如何抵達我們的優化目標。

假設我們手上有二維的數據,將其寫在同一個矩陣中:

協方差矩陣指X經過如下運算得出的矩陣:

可以看到,主對角線上是原始數據方差,其他位置是特徵兩兩之間的協方差,這個結論推廣到更高維也是正確的。

回顧一下我們剛才總結出的優化目標:經過某種線性變換之後,使得,協方差為0。

在協方差矩陣中變為,尋找某種變換使除主對角線以外的其他元素的值為0。

實際上這就是協方差矩陣的對角化。幸運的是這是一個實對稱矩陣,小學二年級的線性代數告訴我們,實對稱矩陣的特徵向量(線性代數中的特徵向量)都是正交的,實對稱矩陣正交相似於對角矩陣。因此我們可以輕易尋找到滿足條件的

尋找到

講了一大堆,最後會發現PCA的實現異常簡單,只需要求一個實對稱矩陣的對角化變換矩陣,所以即使沒有完全理解以上的內容,也不妨礙將PCA當做黑盒來應用。

關於應用如何選擇目標維數

在應用的時候我們也許會糾結於,到底該把數據降到多少維。其實這個維數取決於我們希望保留多少信息。下面給出一個判定方法。

設原來的數據為

或者

這裡的

參考資料A TUTORIAL ON PRINCIPAL COMPONENT ANALYSIS. Jon Shlens.  https://www.cs.princeton.edu/picasso/mats/PCA-Tutorial-Intuition_jp.pdf機器學習 吳恩達 Dimensionality Reduction. https://www.coursera.org/learn/machine-learning#syllabusPCA的數學原理 張洋 http://blog.codinglabs.org/articles/pca-tutorial.html知乎 如何通俗易懂地解釋「協方差」與「相關係數」的概念?GRAYLAMB的回答 如何通俗易懂地解釋「協方差」與「相關係數」的概念?- GRAYLAMB的回答 - 知乎 https://www.zhihu.com/question/20852004/answer/134902061知乎 如何通俗地理解協方差和相關係數?馬同學 如何通俗地理解協方差和相關係數?- 馬同學的文章 - 知乎 https://zhuanlan.zhihu.com/p/70644127

相關焦點

  • 30分鐘學會PCA主成分分析
    PCA主成分分析算法(Principal Components Analysis)
  • R語言 PCA主成分分析
    問題或建議,請公眾號留言;R語言 PCA主成分分析前言統計學背景知識協方差相關係數函數總結實例講解1.載入原始數據2.作主成分分析3.結果解讀4.畫主成分的碎石圖並預測5.PCA結果繪製後記前言PCA分析大家肯定經常看到,但是你真的懂PCA分析的結果嗎?圖我也會看,我只是不是很清楚PCA背後輸出結果的解讀而已。
  • 淺談主成分分析PCA
    主成分分析(Principal component analysis, PCA)是一種很常見的數據分析方法,主要用於高維數據的降維處理和高維數據的可視化。如下圖所示,實驗記錄人的動作信息,然後PCA分析便可以捕捉人運動過程中的motion中的代表性動作[1]。
  • 主成分分析(PCA)實用指南(R&Python)
    今天我們聊聊基礎知識,主要介紹一種化繁為簡的神奇方法——主成分分析。注意,理解本文需要具備一定統計學基礎。有時候,如果數據集裡有太多變量,你會怎麼辦?以下是每一位分析師都可能遇到的幾種情況:試想一下,當自己身處這四種境地,你會怎麼做?不要逃,處理這些情況並沒有想像中的那麼困難,一些統計方法,如因子分析、主成分分析就有助於克服它們。
  • PCA主成分分析實戰和可視化 | 附R代碼和測試數據
    一文看懂PCA主成分分析中介紹了PCA分析的原理和分析的意義(基本簡介如下,更多見博客),今天就用數據來實際操練一下。
  • 100天搞定機器學習|Day59 主成分分析(PCA)原理及使用詳解
    PCA原理主成分分析法(Principal Component Analysis)是一種基於變量協方差矩陣對數據進行壓縮降維、去噪的有效方法,它藉助正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,轉換後的這組變量叫主成分(PC),主成分是舊特徵的線性組合。
  • 用StackOverflow訪問數據實現主成分分析(PCA)
    大數據文摘出品編譯:汪小七、張馨月、雲舟主成分分析(PCA:Principal Component Analysis)非常有助於我們理解高維數據,我利用Stack Overflow的每日訪問數據對主成分分析進行了實踐和探索,你可以在rstudio :: conf 2018上找到其中一篇演講的錄音
  • R數據分析:主成分分析及可視化
    主成分分析是一個常見的降維,探索性技術,常常在量表編制或者其它變量較多數據集分析的時候會用到,今天給大家寫寫R語言中如何快速高效的進行PCA和可視化。<- prcomp(mtcars, center = TRUE,scale. = TRUE)summary(mtcars.pca)上面的代碼就實現了整個數據的主成分分析,並且輸出了我們的每個主成分解釋的方法比。
  • 一文讀懂stata做主成分分析
    由計量經濟學服務中心綜合整理,轉載請聯繫一.主成分分析主成分分析方法是降維分析方法
  • R語言之主成分分析
    主成分分析(Principal Component Analysis,PCA),就是將多個變量通過 線性變換以選出較少個數重要變量的一種多元統計分析方法
  • 主成分分析(PCA)
    本文上半部分轉載自:http://blog.codinglabs.org/articles/pca-tutorial.html這位大佬已經寫的非常簡潔明了
  • 機器學習之數據降維總結+代碼示例復現(線性代數/矩陣論/主成分分析PCA/核主成分分析KPCA/奇異值分解SVD)
    PCA(Principal Component Analysis)主成分分析    關於主成分分析PCA的原理以及數學解釋,請參照本文章開始部分手寫筆記整理。PCA識別最靠近數據的超平面,並將樣本數據集投影到該超平面上。
  • 主成分分析PCA一站式指南
    編者按:General Assembly數據科學主講Matt Brems講解了主成分分析的原理、數學和最佳實踐。
  • 一文看懂PCA主成分分析
    主成分分析簡介主成分分析 (PCA, principal component analysis)是一種數學降維方法, 利用正交變換 (orthogonal
  • 【R與數據分析】多元統計分析之主成分分析及R實現過程
    主成分分析方法通過降維技術把多個變量化為少數幾個主成分的方法,並且這些主成分保留原始變量的絕大部分信息,通常表現為原始變量的線性組合。通過主成分分析我們能夠有效利用大量數據進行定量分析,並揭示變量之間的內在關係。(1)       我們知道主成分分析是將原來的變量指標進行重新組合的新的綜合指標,我們的目的就是要來選擇儘可能少的主成分。
  • 聚類分析和主成分分析
    下面這張圖就形象地展現了如何利用主成分分析將二維降至一維。試對該數據進行主成分分析。根據碎石圖轉折點在2個主成分或3個主成分主成分分析結果:> summary(pr,loadings=TRUE)Importance of
  • 一步步教你輕鬆學主成分分析PCA降維算法
    主成分分析(英語:Principal components analysis,PCA)是一種分析、簡化數據集的技術。主成分分析經常用於減少數據集的維數,同時保持數據集中的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是,這也不是一定的,要視具體應用而定。由於主成分分析依賴所給數據,所以數據的準確性對分析結果影響很大。
  • 【直播】我的基因組55:簡單的PCA分析千人基因組的人群分布
    今天,我們主要講的是人群分布,先用簡單的PCA來分析一下千人基因組的人群分布吧!PCA分析,就是主成分分析,我博客有講過(點擊最底部的閱讀原文或複製連結http://www.bio-info-trainee.com/1232.html進行查看)。 PCA的原本目的是因為變量太多,想把它們合併成兩三個變量,從而簡化分析步驟。
  • 用Python (scikit-learn) 做PCA分析
    ,所以在應用主成分分析之前,需要對數據中的特徵進行尺度分析。主成分分析受尺度影響,因此在應用主成分分析之前,需要對數據中的特徵進行尺度分析。你可以將數據轉換到單位尺度(均值= 0和方差= 1),這是許多機器學習算法的最優性能的要求。StandardScaler幫助標準化數據集的特性。注意,你適合於訓練集,並在訓練和測試集上進行轉換。
  • 一文讀懂PCA分析 (原理、算法、解釋和可視化)
    主成分是原有變量的線性組合,其數目不多於原始變量。組合之後,相當於我們獲得了一批新的觀測數據,這些數據的含義不同於原有數據,但包含了之前數據的大部分特徵,並且有著較低的維度,便於進一步的分析。這種投射方式會有很多,為了最大限度保留對原始數據的解釋,一般會用最大方差理論或最小損失理論,使得第一主成分有著最大的方差或變異數(就是說其能儘量多的解釋原始數據的差異);隨後的每一個主成分都與前面的主成分正交,且有著僅次於前一主成分的最大方差(正交簡單的理解就是兩個主成分空間夾角為90°,兩者之間無線性關聯,從而完成去冗餘操作)。主成分分析的意義簡化運算。