主成分分析( Principal components analysis),簡稱PCA,是最主要的數(shù)據(jù)降維方法之一。本文從PCA的思想開始,一步一步推導(dǎo)PCA。
1.0 PCA的最大可分性的思想
對于,
。我們希望
從
維降到
維,同時希望信息損失最少。比如,從
維降到
:

我們既可以降維到第一主成分軸,也可以降維到第二主成分軸。那么如何找到這這些主成分軸并且選擇最優(yōu)成分軸呢?
直觀上,第一主成分軸 優(yōu)于 第二主成分軸,即具有最大可分性。
下面解決一些基本概念。
2.0 基變換
欲獲得原始數(shù)據(jù)新的表示空間,最簡單的方法是對原始數(shù)據(jù)進行線性變換(基變換):
其中是原始樣本,
是基向量,
是新表達。
數(shù)學(xué)表達:
其中是行向量,表示第
個基,
是一個列向量,表示第
個原始數(shù)據(jù)記錄.
當時即 基的維度 < 數(shù)據(jù)維度時,可達到降維的目的。即:
以直角坐標系下的點(3,2)為例,欲將點(3,2)變換為新基上的坐標,就是用(3,2)與第一個基做內(nèi)積運算,作為第一個新的坐標分量,然后用(3,2)與第二個基做內(nèi)積運算,作為第二個新坐標的分量。

實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:
可以稍微推廣一下,如果我們有m個二維向量,只要將二維向量按列排成一個兩行m列矩陣,然后用“基矩陣”乘以這個矩陣,就得到了所有這些向量在新基下的值。例如(1,1),(2,2),(3,3),想變換到剛才那組基上,則可以這樣表示:
3.0 方差
回顧一下,我們的目的是希望在降維過程中損失最少,換言之,我們希望投影后的數(shù)據(jù)盡可能分散開。這種分散程度可以用方差來表達,方差 越大,數(shù)據(jù)越分散。
定義方差
:對于單一隨機變量
,
對數(shù)據(jù)做去中心化(方便后面操作):
隨機變量表達了
的取值與其數(shù)學(xué)期望之間的偏離程度。若
較小,意味著
的取值主要集中在期望
也就是
的附近,反之,若
較大,意味著
的取值比較分散。
為了避免過于抽象,我們以一個具體的例子展開。假設(shè)我們5個樣本數(shù)據(jù),分別是 ,將它們表示成矩陣形式:
為了后續(xù)處理方便,我們首先將每個字段內(nèi)所有值都減去字段均值,其結(jié)果是將每個字段都變?yōu)榫禐?.
我們看上面的數(shù)據(jù),設(shè)第一個特征為 ,第二個特征為
, 此時某一個樣本可以寫作:
且特征的均值為2, 特征
的均值為3,所以變換后:
4.0 協(xié)方差
協(xié)方差(Covariance)在概率論和統(tǒng)計學(xué)中用于衡量兩個變量的總體誤差。
比如對于二維隨機變量,特征
除了自身的數(shù)學(xué)期望和方差,還需要討論
之間互相關(guān)系的數(shù)學(xué)特征。
定義協(xié)方差
:
當時,變量
完全獨立,這也是我們希望達到的優(yōu)化目標。
方差是協(xié)方差的一種特殊情況,即當兩個變量是相同的情況:
5.0 協(xié)方差矩陣
對于二維隨機變量,
定義協(xié)方差矩陣
:
對于n維隨機變量,
可見,協(xié)方差矩陣是行
列的對稱矩陣,主對角線上是方差,而協(xié)對角線上是協(xié)方差。
依然我們以一個具體的例子展開,還是這5個樣本數(shù)據(jù),,
,將它們?nèi)ブ行幕蟊硎境删仃囆问剑?br>
那如果有個樣本的話,
對做一些變換,用
乘以
的轉(zhuǎn)置,并乘上系數(shù)1/m:
這不正是協(xié)方差矩陣嘛!
現(xiàn)在我們可以說:
設(shè)我們有m個n維數(shù)據(jù)記錄,將其按列排成n乘m的矩陣X,設(shè)
,則
是一個對稱矩陣,其對角線分別個各個特征的方差,而第i行j列和j行i列元素相同,表示i和j兩個特征之間的協(xié)方差。
6.0 協(xié)方差矩陣對角化
回顧一下:
- 現(xiàn)在我們有
個樣本數(shù)據(jù),每個樣本有
個特征,那么設(shè)這些原始數(shù)據(jù)為
,
為
行
列的矩陣。
- 想要找到一個基
,使
,其中
,達到降維的目的。
設(shè)的協(xié)方差矩陣為
,
的協(xié)方差矩陣為
,且
。
我們的目的變?yōu)椋簩υ紨?shù)據(jù)
做PCA后,得到的
的協(xié)方差矩陣
的各個方向方差最大,協(xié)方差為0。
那么與
是什么關(guān)系呢?
我們要找的不是別的,而是能讓原始協(xié)方差矩陣對角化的
。
換句話說,優(yōu)化目標變成了尋找一個矩陣
,滿足
是一個對角矩陣,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優(yōu)化條件。
現(xiàn)在所有焦點都聚焦在了協(xié)方差矩陣對角化問題上。
由上文知道,協(xié)方差矩陣是一個是對稱矩陣,在線性代數(shù)上,實對稱矩陣有一系列非常好的性質(zhì):
1)實對稱矩陣不同特征值對應(yīng)的特征向量必然正交。
2)設(shè)特征向量重數(shù)為
,則必然存在
個線性無關(guān)的特征向量對應(yīng)于
,因此可以將這
個特征向量單位正交化。
由上面兩條可知,一個行
列的實對稱矩陣一定可以找到
個單位正交特征向量,設(shè)這
個特征向量為
,我們將其按列組成矩陣:
則對協(xié)方差矩陣有如下結(jié)論:
其中為對角矩陣,其對角元素為各特征向量對應(yīng)的特征值(可能有重復(fù))。
結(jié)合上面的公式:
其中,為對角矩陣,我們可以得到:
是協(xié)方差矩陣
的特征向量單位化后按行排列出的矩陣,其中每一行都是
的一個特征向量。如果設(shè)
按照
中特征值的從大到小,將特征向量從上到下排列,則用
的前
行組成的矩陣乘以原始數(shù)據(jù)矩陣
,就得到了我們需要的降維后的數(shù)據(jù)矩陣
。
7.0 PCA算法
總結(jié)一下PCA的算法步驟:
設(shè)有條
維數(shù)據(jù)。
1)將原始數(shù)據(jù)按列組成行
列矩陣X
2)將的每一行(代表一個特征)進行零均值化,即減去這一行的均值
3)求出協(xié)方差矩陣
4)求出協(xié)方差矩陣的特征值及對應(yīng)的特征向量
5)將特征向量按對應(yīng)特征值大小從上到下按行排列成矩陣,取前行組成矩陣
6)即為降維到
維后的數(shù)據(jù)
8.0 實例
這里以上文提到的:
,將它們表示成矩陣形式:
我們用PCA方法將這組二維數(shù)據(jù)其降到一維。
為了后續(xù)處理方便,我們首先將每個特征內(nèi)所有值都減去字段均值,其結(jié)果是將每個字段都變?yōu)榫禐?.
因為這個矩陣的每行已經(jīng)是零均值,這里我們直接求協(xié)方差矩陣:
對于矩陣:
和
分別是特征值和特征向量,
,則:
為了使這個方程式有非零解,矩陣的行列式必須是0:
即:
則:
分解得:
找到2個特征值,,
,
when :
即:
則:
和
可以取任意值,我們?nèi)w一化的
和
,即:
,
此時 和
when :
即:
則:
和
可以取任意值,我們?nèi)w一化的
和
,即:
此時 和
所以:
可以驗證協(xié)方差矩陣C的對角化:
最后我們用的第一行乘以數(shù)據(jù)矩陣,就得到了降維后的表示:
降維投影結(jié)果如下圖:
