1. 程式人生 > >PCA演算法是怎麼跟協方差矩陣/特徵值/特徵向量勾搭起來的?

PCA演算法是怎麼跟協方差矩陣/特徵值/特徵向量勾搭起來的?

PCA, Principle Component Analysis, 主成份分析, 是使用最廣泛的降維演算法.
......
(關於PCA的演算法步驟和應用場景隨便一搜就能找到了, 所以這裡就不說了. )

假如你要處理一個數據集, 資料集中的每條記錄都是一個\(d\)維列向量. 但是這個\(d\)太大了, 所以你希望把資料維度給降下來, 既可以去除一些冗餘資訊, 又可以降低處理資料時消耗的計算資源(用computation budget 來描述可能更形象).

用稍微正式點的語言描述:

  • 已知:一個數據集\(D\), 記錄(或者樣本, 或input pattern)\(x_i \in D\)\(d\)
    維列向量.
  • 目標:將每個\(x \in D\) 對映到另一個\(p\)維空間, \(p < d\)(雖然等於也是可以的, 但沒什麼意義). 得到一個新的資料集\(Z\), 對\(Z\)的要求是儘量儲存\(D\)中的有效資訊.

那麼, 問題就來了. 如何將一個\(d\)維向量對映成一個\(p\)維向量? 答案是基變換. 然而基變換方式不是唯一的, 如何確保變換是最優的? 這就由優化目標"儘量儲存原資料集中的資訊" 決定了: 最好的基變換能儲存最多的資訊. 注意了, 這裡的比較都是在同一個\(p\)下進行的, 也就是說, 參與競爭的基集(basis set)們, 都把\(d\)\(D\)

對映到了一個新的\(p\)\(Z\).

那麼, (不好意思, 又一個那麼. 這不是第一個, 當然也不是最後一個. 是的, 我喜歡用這個詞.), 現在面臨的問題是, 如何衡量資訊的多少? 我並不懂資訊科學, 只知道一點, 資訊在差異中存在. 如果全是相同的東西, 量再多,它的資訊量也沒有多少. PCA演算法採用方差(variance)來度量資訊量.

那麼, 如何用variance來度量資料集\(D\)包含的資訊量呢? 一個基(basis)一個基地衡量. 資料集在某個基上的投影值(也是在這個基上的座標值)越分散, 方差越大, 這個基保留的資訊也就越多. 不嚴格的來一句, 一個基集保留下的資訊量是每個基保留下的資訊量的和.

基於上面的理念, 或者說假設, 我們已經有一種可以有效地找出最優基集的方法了: 貪心演算法---先找出保留資訊量最大的基向量, 然後是第二大的, 然後然後, 直到找滿\(p\)個基向量.

接下來, 將上面的分析用數學語言描述出來.
\(v\)為一個用於變換的基. \(D\)中的某一條記錄\(x\)\(v\)上的投影長度(即座標值)為: \[proj(x, v) = \frac {v^Tx}{||v||}\]
假如\(v\)為單位向量, 則:\[proj(x, v) = v^Tx\]
所以, 為了方便計算, 我們對\(v\)有了一個約束條件: \(v\)為單位向量. 這個太好說了, normalize 一下就行了.

於是, 整個\(D\)\(v\)上的投影長度可以打包表示為:\(Xv\), 其中, \(X\)是一個\(m \times d\)的矩陣, 每一行是一條記錄, \(m\)\(D\)中的記錄總數目. 在資料預處理時, 我們先將\(X\)每一列的均值變為0: 先算出每一列的均值, 得到均值向量\(\mu\), 然後從每一條記錄\(x_i\)中減去\(\mu\): \(x_i \gets x_i - \mu\). 最後用這些預處理後的\(x_i\)組成\(X\).
現在, 我們來計算\(D\)\(v\)上的資訊量, 即所有資料在\(v\)上的投影長度的方差:
\[ \mu (X, v) = 0 \]
\[ info(D, v) = \sigma^2(X, v) = \frac 1m \sum_{i=1}^m (v^Tx_i - \mu)^2 = \frac 1m (Xv)^T Xv = \frac 1m v^T X^T X v \]
仔細看\(X^T X\)這個東西, 因為做過均值化處理, \(\frac 1m X^T X\), 成為了原資料集\(D\)的協方差矩陣, 用\(C\)表示. 所以
\[ info(D, v) = \sigma^2(X, v) = v^T C v \]
這就是我們需要最大化的目標函式. 不過, 再回想一下, 我們之前為了方便計算還加了一個條件進來: \(v\)是一個單位向量, 即\(v^Tv = 1\). 把這個條件也加到目標函式裡去:
\[ f(v) = v^T C v - \lambda (v^T v - 1) \]
所以, 這才是我們最終需要優化的目標函式.
now, 求使\(f(v)\)最大的\(v\). \(f(v)\)取得條件極值的必要條件為:
(這個向量函式求偏導的過程類似於神經網路BP演算法求偏導過程, 以後在另一篇文章單獨推導.)
\[ \frac {\partial f}{\partial v} = 2Cv - 2\lambda v = 0 \]
\[ Cv = \lambda v \]
所以, \(v\)\(C\)的特徵向量. 它儲存的資訊量為:
\[ info(D, v) = v^TCv = v^T \lambda v = \lambda v^Tv = \lambda \]
於是, 奇蹟就這麼出現了: 資訊量儲存能力最大的基向量一定是\(D\)的協方差矩陣的特徵向量, 並且這個特徵向量儲存的資訊量就是它對應的特徵值.

接下來的戲碼你們應該都知道了: 用單位正交陣將\(C\)對角化(\(C\)是對稱矩陣, 天生如此);特徵值降序排列, 以排名前\(p\)個特徵值對應的特徵向量作為新的基集. (這個做法看起來很自然, 但若細細思量, 會發現這一步是PCA演算法裡水最深的一步, 至少我現在還沒真正理解為何要這麼做, 聽qw學長說要用什麼Rayleigh商).

剩下的問題, 比如降維後損失了多少資訊, 也很明白了, 就不多講了.

相關推薦

PCA演算法是怎麼矩陣/特徵值/特徵向量勾搭起來的?

PCA, Principle Component Analysis, 主成份分析, 是使用最廣泛的降維演算法. ...... (關於PCA的演算法步驟和應用場景隨便一搜就能找到了, 所以這裡就不說了. ) 假如你要處理一個數據集, 資料集中的每條記錄都是一個\(d\)維列向量. 但是這個\(d\)太大了,

主成分分析PCA演算法:為什麼去均值以後的高維矩陣乘以其矩陣特徵向量矩陣就是“投影”?

這是從網上看到的PCA演算法的步驟: 第一步,分別求每列的平均值,然後對於所有的樣例,都減去對應的均值。 第二步,求特徵協方差矩陣。 第三步,求協方差的特徵值…顯示全部 關注者 1,218 被瀏覽 78,113 關注問題寫回答 ​新增評論 ​分享 ​邀請回答

影象演算法的基礎知識(雙線性插值,矩陣矩陣特徵值特徵向量

0. 前言 MATLAB或者OpenCV裡有很多封裝好的函式,我們可以使用一行程式碼直接呼叫並得到處理結果。然而當問到具體是怎麼實現的時候,卻總是一臉懵逼,答不上來。前兩天參加一個演算法工程師的筆試題,其中就考到了這幾點,感到非常汗顏!趕緊補習! 1. 雙線性插值 在影象處

矩陣的數學概念及演算法計算

在講解協方差之前,我們先一起回憶一下樣本的均值、方差、標準差的定義。 方差,協方差和協方差矩陣 1、概念 方差(Variance)是度量一組資料的分散程度。方差是各個樣本與樣本均值的差的平方和的均值:  協方差(Covariance)是度量兩個變數的變動的同步程度

PCA、SVD和矩陣的關係

1、PCA : Principle Component Analysis 主成分分析 2、SVD : Singular Value Decomposition 奇異值分解 3、PCA在很多場合都有涉及,在資料紛繁難以選取時,一般都會採用PCA降維處理,值選取幾個主要的方向資料來進行分析。 比如,可將影象

矩陣PCA+Matlab

協方差矩陣與特徵值及其特徵向量 最近在利用協方差矩陣計算些東西,對結果有點混亂,所以打算整理一下這方面的東西。 一 協方差矩陣 首先,關於協方差矩陣的公式都見得到這裡就不擺了。 理解協方差矩陣是: 協方差矩陣相對於協方差是能處理多維問題 輸入協方差矩陣中的資料

PCA為什麼要用矩陣

PCA為什麼要用協方差矩陣的特徵向量矩陣來做投影矩陣呢?   降維的目的就是“降噪”和“去冗餘”。 “降噪”的目的就是使保留下來的維度間的相關性儘可能小,而“去冗餘”的目的就是使保留下來的維度含有的“能量”即方差儘可能大。 我們要最大化方差來保留更多的資訊。去噪。 &n

利用Numpy的svd函式實現的PCA為什麼是對矩陣進行SVD分解

眾所周知,PCA是資料分析中經常用到的一種方法,主要用途是對高維資料進行降維,有兩大目的:去相關和去冗餘。 其大致的原理是通過對資料協方差矩陣進行特徵分解找到使資料各維度方差最大的主成分,並將原資料投影到各主成分上達到去相關的目的,若在投影到各主成分時,僅選取特徵值最大的前若干個主成分,

矩陣PCA深入原理剖析

一、協方差矩陣一個維度上方差的定義:協方差的定義:(a)協方差就是計算了兩個維度之間的相關性,即這個樣本的這兩個維度之間有沒有關係。協方差為0,證明這兩個維度之間沒有關係,協方差為正,兩個正相關,為負則負相關。協方差矩陣的定義:對n個維度,任意兩個維度都計算一個協方差,組成矩

矩陣的幾何解釋--矩陣特徵值分解部分,很好的解釋了奇異值分解主成分選擇的原因

http://www.360doc.com/content/16/0121/13/13800296_529534763.shtml A geometric interpretation of the covariance matrix http://www.visi

variance, covariance, 矩陣covariance matrix

總結 一起 計算 矩陣 獨立 var 隨機 度量 誤差 參考: 如何通俗易懂地解釋「協方差」與「相關系數」的概念?(非常通俗易懂) 淺談協方差矩陣 方差(variance) 集合中各個數據與平均數之差的平方的平均數。在概率論與數理統計中,方差(Variance)用來度量隨機

矩陣(基礎知識)

wid 知識 來源 alt 均值 info 各類 對角線 維數 參考來源:http://pinkyjie.com/2010/08/31/covariance/ 我們知道標準差、均值等是用於描述數據的分布情況,但是這些大多用於一維數據,然而現實生活中會碰到各類多維數據,那麽這

矩陣

對稱 矩陣 都是 line sum AR 方向 bar In 協方差矩陣 以兩個隨機變量來描述 協方差性質 協方差為正時,兩個變量的變化方向一致,正相關 協方差為負時,兩個變量的變化方向相反,負相關 協方差為零時,不相關 定義 協方差 \[Cov(x,y) = \fra

淺談矩陣(轉)

但是 資料 sample 可能 tlab 原來 data- 一個 處理 原文地址:http://pinkyjie.com/2010/08/31/covariance/ 今天看論文的時候又看到了協方差矩陣這個破東西,以前看模式分類的時候就特困擾,沒想到現在還是搞不清楚,索性開

[Matlab]矩陣計算使用cov函數的結果與自編程序結果存在不一致

使用 exec https efault http fault 64bit 算法 brush 目前還弄不清是什麽原因,有多大影響,只知道存在這個問題。 運行版本: 1.MatlabR2015b windows64Bit 2.https://octave-online.net

統計學中的矩陣(陣列訊號基礎)

在處理陣列訊號的時候,為了獲得空間訊號維度的相關性,以估計目標的資訊。故使用協方差矩陣能夠獲得這些,因為協方差矩陣是每一維度下(也就是陣元)訊號的相關性。當兩個維度相關時,訊號的協方差也是最大的。   一、統計學的基本概念   統計學裡最基本的概念就是樣本的均值、

【 MATLAB 】 cov以及矩陣基礎知識

Covariance 翻譯為協方差,因此,MATLAB裡面的函式cov也就是求協方差了。至於MATLAB語言裡面的協方差函式cov的語法是什麼樣的以及怎麼用的,我們稍後再說,這裡首先介紹下協方差相關的基礎知識點。 本文內容參考自MATLAB的幫助手冊,有的時候不得不說,資料手冊才是最好的教材

矩陣和相關係數矩陣(R語言)

一、協方差矩陣 1.協方差定義                                     &n

吳恩達機器學習中矩陣向量表示推導

一、多維隨機變數的協方差矩陣 對多維隨機變數列向量,我們往往需要計算各維度之間的協方差,這樣協方差就組成了一個n×nn×n的矩陣,稱為協方差矩陣。協方差矩陣是一個對角矩陣,對角線上的元素是各維度上隨機變數的方差。 我們定義協方差為, 矩陣內的元素為  協方差矩陣為 

機器學習中的矩陣的深入理解(簡單舉例)

目錄 1、統計學的定義 2、協方差矩陣的由來 3、MATLAB實戰練習 4、心得感悟 注意:一定是一個對稱的方陣,一定是一個對稱的方陣!!!記住就好啦~ 最近老師講課還有看論文的時候經常看到協方差矩陣這個破東西,自己還是搞不太清楚,查了協方差矩陣的資料,惡補之後決定馬上記