如何通俗易懂地講解什麼是 PCA 主成分分析?

時間 2021-05-06 02:12:36

1樓:白瞳西伯利亞騎士

橫看成嶺側成峰,遠近高低各不同。

樣本的差異資訊分散在各個維度上,旋轉一下角度,原來分散的樣本資訊集中到了少數新維度上,捨棄其他維度,資訊損失很少,達到降維的目的。

樣本差異資訊就是方差,新的維度就是主成分,是舊維度的線性組合。有多少個舊維度就能構建多少個新維度,彼此不相干,叫作正交。從中選擇方差資訊最大的頭部幾個主成分,叫作降維。

2樓:信徒

想要理解PCA主成分分析的基本思想,首先要理解矩陣。

矩陣及點乘的意義?

乙個矩陣其實就是一種變換,根據矩陣點乘的定義我們知道,矩陣的點乘其實就是乙個投影的過程,而且是一種線性變換。矩陣點乘可以理解為一種把資料線性「投影」到高維度空間的過程:

假設資料 是 個 維點 組成的矩陣(矩陣記作 ,注意維度在前,個數在後),如果想完成這種「投影」過程,則變換矩陣 必須由 個基向量 組成, 且每個基向量都是 維(矩陣記作 )。這個變換過程就可以用點乘來表示

也就是 個 維點經過乙個矩陣 的線性變換,得到 個新的 維點。

也就是說,矩陣 就像一束光把一系列的P點 「投影」到其他的位置(乙個更確切的例子是,樹葉 被流水 衝到其他位置),這束光(流水)所照耀的方向,我們就把它叫做特徵向量,所以特徵向量是與變換矩陣 相關的,我們習慣叫做矩陣 的特徵向量,它決定了資料如何變換。這裡只是形象的理解,後面的內容會具體介紹特徵向量的定義。

2. 如何描述矩陣的特徵?

那麼問題來了,根據數學定義,矩陣 只是按照規則排列的一堆數字,我們無法從複雜的矩陣 中直觀的感受到這種變換過程,但是我們應該怎麼去描述這個變換過程呢?

a. 感官上的理解方法:我們把變換矩陣 的每一行都看作乙個基向量(可以模擬著座標軸去理解,相當把資料點轉換到另外乙個座標系)。

我們都知道,向量點乘描述的是乙個向量投影到另乙個向量的過程,也可以說是乙個資料點投影到乙個基向量的過程。模擬這個過程,我們就可以直觀的感受到, 就是 個 維點 在 個維度上分別被基向量 拉伸然後求和(類似於加權求和),每乙個基向量表示資料在乙個維度上的線性變換方向,所以這個「投影」過程是一種線性變換。我們把基向量 組成的 維空間叫做 維描述空間

b. 數學上的描述方法:

雖然我們感官上可以把矩陣 當做 個基向量去理解,但是我們不知道它的本質屬性(也就是只知道 的 個基向量而不知道它的 個正交基),無法在數學計算中去運用。所以在數學中就引入特徵值&特徵向量的方式來描述矩陣 的特徵,也就是特徵方程:

這種描述矩陣 的數學方法說人話就是:

矩陣 * 一組向量 = 常數 * 這組向量

如果存在一組向量 ,它們經過矩陣 的變換等效於它們被拉伸/縮放時,我們就把叫做矩陣 的特徵向量, 叫做特徵向量矩陣,把拉伸/縮放的係數矩陣 叫做特徵值矩陣,矩陣 對角線上的元素叫做特徵值( 是乙個對角矩陣,對角線上的元素是從大到小排列的,對角線之外的元素都是0,本質就是拉伸/縮放係數)。

有沒有感覺到,特徵方程給人一種類似於傅利葉變換之後透過現象看本質的感覺?

你也許會困惑,為什麼矩陣 和一組向量 相乘的效果等效於常數 和這組向量 相相乘的效果呢?

矩陣 與一組向量 相乘,本質上是對它們進行了一次線性變換,也就是旋轉或拉伸(不明白的請倒回去看第1部分的內容),而該變換的效果為常數 乘以這組向量。

也可以說我們對矩陣 進行了一次基變換,它本身是用基向量 來表示的,但為了更方便的去處理或理解它,我們把基向量的表示方式變成了正交基(特徵向量) &係數(特徵值) 的表示方式。

當我們求特徵值與特徵向量的時候(也就是求解矩陣 的特徵方程),就是為了找到矩陣 能使哪些向量(特徵向量)只發生伸縮變換,而變換的程度可以用特徵值 表示。

3. 求解特徵方程

上面已經介紹了在數學是使用特徵方程來描述乙個矩陣的特徵,但是為了求解特徵值與特徵向量,這裡需要引入一下特徵方程的定義:

設 為 階實方陣, 為乙個引數, 為單位矩陣,稱 階方陣 為矩陣 的特徵方陣,它的行列式 稱為矩陣 的特徵多項式,把

稱為矩陣 的特徵方程,把特徵方程的根稱為矩陣 的特徵根(或特徵值)。

很容易看出來,(1)(2)兩個方程只是特徵方程的兩個不同寫法,記單位矩陣為 :

由於 是特徵向量矩陣,為非零矩陣,所以

使用特徵方程(2)求得矩陣 的特徵值矩陣 之後,把它代回(3)式

也就可以求解矩陣 的特徵向量 。

4. 特徵值分解

回顧一下,可在上一部分我們知道來,在數學中是是如何描述乙個矩陣 的本質屬性(特徵值&特徵向量,也就是特徵方程,並且知道了如何求解特徵方程的特徵值和特徵向量。

但是為什麼我們可以只使用特徵值&特徵向量來描述乙個矩陣?

由於 是個方陣且不是零矩陣,且向量 線性無關,所以 存在逆矩陣,記單位矩陣為 ,則有

又有向量 是正交基,所以 是乙個正交矩陣(矩陣的行或列向量之間點積等於0,也就是向量正交,行或列向量與自身的點積等於1,也就是單位向量),也就是

所以當 存在逆矩陣,且 為正交矩陣時,也就是滿足條件(4)(5),則有

所以特徵方程(1)就可以表示如下:

注意 是乙個代表係數的對角矩陣,所以可以把它的位置交換:

把矩陣 分解成(4)式的表達形式就叫做對矩陣 進行特徵值分解(回顧第2部分的內容,可知 和 分別是矩陣 的特徵向量矩陣和特徵值矩陣),這就是為什麼我們能夠使用特徵值&特徵向量來描述乙個矩陣。

5. 什麼是奇異值分解(SVD)?

上兩節中我們介紹了如何用數學的方式描述矩陣 的性質(也就是特徵方程),並知道了怎麼求解 的特徵向量和特徵值。但是這些推導都是建立在 是方陣的基礎上,如果矩陣 不是方陣,我們在數學中該如何描述矩陣 的性質呢?

與方陣類似,我們也使用特徵值和特徵向量來描述矩陣 的性質,但是我們把它們重新起了個名字,分別叫做奇異值矩陣奇異向量矩陣

但是如何求解奇異值和奇異向量呢?

這時候就引入了奇異值分解(SVD),SVD是一種能適用於任意形狀矩陣的分解方法,對於任意矩陣 總是存在乙個奇異值分解:

其中 被稱為左奇異向量矩陣, 被稱為右奇異向量矩陣, 也就是奇異值矩陣(和方陣的特陣值矩陣類似,奇異值從大到小排列在奇異值矩陣的主對角線上,其他元素為0)。

但是現在又出現乙個問題,奇異值分解與特徵值分解的結構不一樣,我們該如何求解左奇異向量、右奇異向量和奇異值呢?這時候我們可以借用特徵值分解的思維,雖然 不是方陣,但是 和 不都是方陣了嗎?

然後按照特徵方程的解法求解,就得到左奇異向量矩陣 和右奇異向量矩陣 ,然後代回(6)式得到 。

可能你會疑惑,為什麼(7)(8)中的 和 就是(6)中的左右奇異值矩陣?下面證明:

也就是方陣 的特徵向量組成的矩陣就是(6)中的右奇異矩陣 ,同理可證左奇異矩陣 。同時也可以看出來,方陣 的特徵值矩陣是奇異值矩陣的平方(這是乙個能直接得到奇異值的技巧)。

6. 什麼是主成分分析(PCA)?與協方差矩陣有什麼關係?

現在我們回顧一下第1小節中提到的資料 (是 個 維點 組成的矩陣),已經通過就是將資料 線性變換到描述空間 ,也就是 個 維點經過乙個矩陣 的線性變換,得到 個新的 維點。

那麼就出現乙個問題,如果線性變換後的結果 的維度 ,就會造成計算量就會巨大,而且不利於探索資料 的特徵,我們該怎麼辦呢?

我們自然而然就想到了減少 的維度 (因為 是原始資料我們不能修改,所以是將 線性變換到描述空間 之後,對原始資料的「投影」 進行降維)。

我們都知道,方差的大小描述的是變數的相關性。當涉及機器模型的穩定性時,我們往往希望更小的方差,如果模型的方差很大,那就說明模型是不穩定的。當對於採集的資料而言,我們往往希望更大的方差,大方差說明資料是多樣性好,越能代表資料母體,如果方差為0,那就相當於對同乙個點反覆採集,實質上它們是同乙個資料,自然不能代表資料母體。

所以在訊號處理領域中我們常說方差大的方向是訊號的方向,方差小的方向是雜訊的方向。

PCA的策略是保留資料 最大的方差對應的維度(如果兩個變數的協方差越大,相關性越大,保留它們之後將資料投影到描述空間上的損失就越小):對於 維度的資料 ,也就是找 個相互正交的座標軸(正交基),它們滿足資料在第乙個軸上的「投影」的方差之和是最大的,然後在與第乙個軸正交的平面中去找第二個軸,資料在第二個軸上的「投影」的方差之和也是最大的,之後在與第

一、二個軸正交的平面中去找第三個軸,資料在第三個軸上的「投影」的方差之和也是最大的......直到找到 個滿足這樣條件的座標軸,我們只取前 個座標軸去近似這個 維度的空間,也就是資料 從乙個 維空間降到了 維空間,但我們使用的這個降維策略,能讓這個座標軸保證使得資料的損失最小。

既然方差是前提,我們首先就需要求解 的方差和協方差來評估 各維度的重要性。因此我們將 各維度間的方差和協方差表示在同乙個矩陣中(協方差矩陣)方便綜合評估。使用點乘得到資料 的協方差矩陣

由上面的推導可以看出, 本質上就是原始資料 的協方差矩陣(注意,雖然本質上是降低原始資料 的維度上,但是實際上只是對 的乙個副本降維,不能改變原始資料),求解矩陣 的特徵值和特徵向量之後(特徵方程求解的推導參見第3小節),就可以對矩陣 進行特徵分解:

這樣我們就可以從特徵值 中取最大的 個特徵值所對應的特徵向量做為被保留的維度,也就把把資料 降到 維,也就是:

這樣的話,就完成了對矩陣 的特徵維度從 的降維。 可以看出來,矩陣 本身的資料量是 ,特徵分解後的資料量是 ,降維之後的資料量是 且 ,這麼一看在 的情況下(海量的大資料),是不是資料量從 到最終的 ,是不是變少了?

也許你會困惑,在對矩陣 降維時,資料量是從 時,中間資料量會擴張到 ,這不是給自己找麻煩嗎?是不是就是說所謂的用主成分分析法去降維在實際運用中並沒有什麼作用?

單從資料的角度來說這並沒有錯,但在實際問題中,我們的任務往往是對資料進行處理,你可以把PCA當做對資料預處理的過程,真正的海量計算是在後續的實際任務中。資料中間擴張到 的這點犧牲,和對後續海量計算的貢獻相比是微不足道的。

再結合 看一下,是不是就像把原始資料 的 個 維點變成了 個 維點,像不像《三體》中的降維打擊?

7. 奇異值分解(SVD)與主成分分析(PCA)有什麼關係?

也許你會發現,第6節中使用PCA對資料 降維,實際上是通過對方陣 特徵值分解然後降維實現的(我們已經證明了對方陣 的降維,本質上就是對矩陣 的降維,不懂的回顧第6節),這是乙個間接過程,沒有直接對資料 進行降維,有一種走了彎路的感覺。

仔細想一下,其實我們可以直接使用SVD對資料 進行奇異值分解,然後直接降維。

然後結合(7)式有:

看到沒有, 不就是 的協方差矩陣嗎?而左奇異向量 和奇異值 不就是我們在第6節中協方差矩陣的特徵向量矩陣和特徵值矩陣嗎?既然協方差矩陣的特徵值有了,不就可以從 個維度中直接挑選出特徵值最大的 個嗎?

這不就完成了降維嗎?

所以完全可以對資料 直接進行SVD分解,得到資料 的協方差矩陣的奇異值後降維,是一種對資料降維更直接的手段。這麼一看,PCA幾乎就是對SVD的一種應用或者包裝,SVD是數學中表達矩陣性質的方法,SVD方法是完成PCA任務(降維)的重要途徑之一。

還有乙個問題,我們已經知道了左奇異向量 可以用來降維,那麼右奇異向量有什麼用呢?

結合(8)式有:

最後提乙個SVD的特性,能讓你更加喜愛它

第5小節中我們知道了矩陣的奇異值分解 ,並且知道了奇異值從大到小排列在奇異值矩陣 的主對角線上。但奇異值矩陣還有乙個特性,奇異值減小的特別快,往往在奇異值矩陣 中前10%甚至1%的奇異值之和,就佔了所有奇異值之和的99%以上。

也就是說我們不需要自己去衡量 或者 的取值,它可以實現完全自動化(當然你也可以根據已有經驗去改變這個值)。有沒有感覺到這簡直就是乙個為PCA量身定製的性質?

所以,在實現PCA常見的兩個途徑中(特徵值分解和奇異值分解),與特徵值分解的途徑相比,使用奇異值分解的途徑不僅能實現資料降維,還能實現資料壓縮,而且它還比特徵分解的途徑更加自動化。雖然對人類而言,奇異值分解的可解釋性沒有特徵值分解好,但對電腦而言這卻並不是問題。

如何通俗易懂地給外行講解金融知識?

金融的本質,是投資與融資。融資的模式,無外乎股權融資 債權融資兩種,主要區別在於是否有明確的融資期限和融資利率。股權融資,就是有福同享 有難同當的融資模式。債權融資,就是賺了不多分 虧了不免單的融資模式。所有融資端的金融產品,都是圍繞著這兩個基本點展開的。投資,其實就是融資的反向操作而已。 惠子 比...

如何通俗易懂地講解網路七層協議?

龍江六叔 你作為使用者想發個快遞,你叫來了順豐,順豐快遞員從你手裡拿走了快遞,又裝進乙個盒子,然後把乙個快遞單子貼在了上面。快遞員回到集散中心,將快遞往那一扔不管了,分揀員把快遞按投遞的省市分開,發往同一地區的快遞放進乙個大快遞包。快遞包上有乙個單子。晚上大車司機來了,把按他的行進路線把所有大包放上...

如何通俗易懂地解釋什麼是演算法?

懶等於窮丶 程式設計師路過!通俗理解就是 你要去某地,你有無數種方法,坐車,開車,騎車,跑著。比如說 你準備開車去,走到一半,發現旁邊有條小路,對比繼續開車過去可以更快,於是你就熄火停車,決定走著去。走著走著,又發現騎一輛自行車會更快,於是你就掃了一輛摩拜單車。以上只是例子,你無論怎麼樣,你的目標只...