特征臉(Eigenface)理論基礎(chǔ)之PCA主成分分析法
在之前的博客 人臉識別經(jīng)典算法一:特征臉方法(Eigenface)里面介紹了特征臉方法的原理,但是并沒有對它用到的理論基礎(chǔ)PCA做介紹,現(xiàn)在做補充。請將這兩篇博文結(jié)合起來閱讀。以下內(nèi)容大部分參考自斯坦福機器學習課程:http://cs229.stanford.edu/materials.html
假設(shè)我們有一個關(guān)于機動車屬性的數(shù)據(jù)集{x(i);i=1,...,m}(m代表機動車的屬性個數(shù)),例如最大速度,最大轉(zhuǎn)彎半徑等。假設(shè)x(i)本質(zhì)上是n維的空間的一個元素,其中n<<m,但是n對我們來說是未知的。假設(shè)xi和xj分別代表車以英里和公里為單位的最大速度。顯然這兩個屬性是冗余的,因為它們兩個是有線性關(guān)系而且可以相互轉(zhuǎn)化的。因此如果僅以xi和xj來考慮的話,這個數(shù)據(jù)集是屬于m-1維而不是m維空間的,所以n=m-1。推廣之,我們該用什么方法降低數(shù)據(jù)冗余性呢?
首先考慮一個例子,假設(shè)有一份對遙控直升機操作員的調(diào)查,用x(i)1(1是下標,原諒我這操蛋的排版吧)表示飛行員i的飛行技能,x(i)2表示飛行員i喜歡飛行的程度。通常遙控直升飛機是很難操作的,只有那些非常堅持而且真正喜歡駕駛的人才能熟練操作。所以這兩個屬性x(i)1和x(i)2相關(guān)性是非常強的。我們可以假設(shè)兩者的關(guān)系是按正比關(guān)系變化的,如下圖里的u1所示,數(shù)據(jù)散布在u1兩側(cè)是因為有少許噪聲。

接下來就是如何計算u1的方向了。首先我們需要預(yù)處理數(shù)據(jù)。
1.令
2.用x(i)-μ替代x(i)
3.求
4.用x(i)j/σj替代x(i)j
步驟1-2其實是將數(shù)據(jù)集的均值歸零,也就是只取數(shù)據(jù)的偏差部分,對于本身均值為零的數(shù)據(jù)可以忽略這兩步。步驟3-4是按照每個屬性的方差將數(shù)據(jù)重新度量,也可以理解為歸一化。因為對于不同的屬性(比如車的速度和車座數(shù)目)如果不歸一化是不具有比較性的,兩者不在一個量級上。如果將pca應(yīng)用到圖像上的話是不需要步驟3-4的,因為每個像素(相當于不同的屬性)的取值范圍都是一樣的。
數(shù)據(jù)經(jīng)過如上處理之后,接下來就是尋找數(shù)據(jù)大致的走向了。一種方法是找到一個單位向量u,使所有數(shù)據(jù)在u上的投影之和最大,當然數(shù)據(jù)并不是嚴格按照u的方向分布的,而是分布在其周圍??紤]下圖的數(shù)據(jù)分布(這些數(shù)據(jù)已經(jīng)做了前期的預(yù)處理)。

下圖中,星號代表數(shù)據(jù),原點代表數(shù)據(jù)在單位向量u上的投影(|x||u|cosΘ)

從上圖可以看到,投影得到的數(shù)據(jù)仍然有很大的方差,而且投影點離原點很遠。如果采取與上圖u垂直的方向,則可以得到下圖:

這里得到的投影方差比較小,而且離原點也更近。
上述u的方向只是感性的選擇出來的,為了將選擇u的步驟正式確定下來,可以假定在給定單位向量u和數(shù)據(jù)點x的情況下,投影的長度是xTu。舉個例子,如果x(i)是數(shù)據(jù)集中的一個點(上圖中的一個星號),那它在u上的投影xTu就是圓點到原點的距離(是標量哦)。所以,為了最大化投影的方差,我們需要選擇一個單位向量u來最大化下式:

明顯,按照||u||2=1(確保u是單位向量)來最大化上式就是求
的主特征向量。而
其實是數(shù)據(jù)集的協(xié)方差矩陣。
做個總結(jié),如果我們要找數(shù)據(jù)集分布的一維子空間(就是將m維的數(shù)據(jù)用一維數(shù)據(jù)來表示),我們要選擇協(xié)方差矩陣的主特征向量。推廣之,如果要找k維的子空間,那就應(yīng)該選擇協(xié)方差矩陣的k個特征向量u1,u2,...,uk。ui(i=1,2,...,k)就是用來表征數(shù)據(jù)集的新坐標系。
為了在u1,u2,...,uk的基礎(chǔ)上表示x(i),我們只需要計算

其中x(i)是屬于n維空間的向量,而y(i)給出了基于k維空間的表示。因此說,PCA是一個數(shù)據(jù)降維算法。u1,u2,...,uk稱為數(shù)據(jù)的k個主成分。
介紹到這里,還需要注意一些為題:
1、為什么u要選擇單位向量
選擇單位向量是為了統(tǒng)一表示數(shù)據(jù),不選成單位的也可以,但各個向量長度必須統(tǒng)一,比如統(tǒng)一長度為2、3等等。
2、各個u要相互正交
如果u不正交,那么在各個u上的投影將含有冗余成分
2、為什么要最大化投影的方差
舉個例子,如果在某個u上的投影方差為0,那這個u顯然無法表示原數(shù)據(jù),降維就沒有意義了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)批量合并多個txt文件并生成Excel文件
在數(shù)據(jù)處理中,有時會面臨合并多個文本文件的任務(wù),本文將詳細介紹如何使用Python批量合并多個txt文件,并將其生成為一個Excel文件,需要的可以參考下2023-12-12
python向MySQL數(shù)據(jù)庫插入數(shù)據(jù)的操作方法
這篇文章主要介紹了python向MySQL數(shù)據(jù)庫插入數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11
在Python中定義函數(shù)并調(diào)用的操作步驟
這篇文章主要介紹了在Python中如何定義函數(shù)并調(diào)用它,函數(shù)的定義和調(diào)用是Python編程中最基本也是最重要的概念之一,掌握它們對于進行有效的Python編程至關(guān)重要,需要的朋友可以參考下2024-01-01
Python+request+unittest實現(xiàn)接口測試框架集成實例
這篇文章主要介紹了Python+request+unittest實現(xiàn)接口測試框架集成實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Python生成六萬個隨機,唯一的8位數(shù)字和數(shù)字組成的隨機字符串實例
今天小編就為大家分享一篇Python生成六萬個隨機,唯一的8位數(shù)字和數(shù)字組成的隨機字符串實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python的Twisted框架中使用Deferred對象來管理回調(diào)函數(shù)
當說起Twisted的異步與非阻塞模式等特性時,回調(diào)函數(shù)的使用在其中自然就顯得不可或缺,接下來我們就來看Python的Twisted框架中使用Deferred對象來管理回調(diào)函數(shù)的用法.2016-05-05
python如何標準化日期時間格式轉(zhuǎn)化成非標準化格式
這篇文章主要介紹了python如何標準化日期時間格式轉(zhuǎn)化成非標準化格式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06

