本文主要參考資料:
CS229 lecture notes by Andrew Ng
UFLDL主成分分析 by Andrew Ng
《機器學習實戰》第13章“使用PCA來簡化數據”
1. 運用背景
在機器學習中,PCA是一種常用的方法。其目的是將
舉例來說,如果一份數據集代表車輛的特徵,包括最大速度、扭矩等。其中有兩個特徵
另外一份真實數據是有關飛行員的,描述飛行員有兩個特徵,第一個特徵
2. 數據預處理
- 計算均值,使用下列公式,計算的結果是一個n維向量,向量中的每個元素是所有樣本的相應特徵的均值。
μ=1m∑i=1mx(i) - 對每一個樣本
x(i) ,計算其特徵中心化後的結果,即x(i)=x(i)−μ - 計算第
j 維特徵的方差(jϵ[1,n] )
σ2j=1m∑i=1m(x(i)j)2 - 對於每一個樣本
x(i) ,另其每一維特徵除以相應特徵的標準差,使得每種特徵的範圍相同。即x(i)j=x(i)jσj
步驟1-2是零均值化數據,如果原始數據的均值爲0,則可以省略該步驟,如時間序列數據、音頻數據。步驟3-4對每一維特徵的方差歸一化,確保不同尺度的特徵可以在分類中有相同的作用。如果數據爲圖像數據,每一個像素點是一個特徵,特徵的尺度都在0-255之內,則不需要做3-4步。
3.算法步驟
解決方法是尋找單位向量
假設原始數據的特徵是二維的,並且已經經過均值歸零化處理和方差歸一化處理,如下圖所示。
當選擇一個新的投影反向
我們可以看到投影后的數據仍然保持着較大的方差,數據點距離原點較遠。相反,如果按照下面的方式選擇投影方向,則投影后數據點之間的不同很少被保留下來,數據點普遍向原點靠近。
假設基向量
根據線性代數的知識,在
有關於協方差矩陣的相關知識可以參考這兩篇文章:
1. http://www.cnblogs.com/chaosimple/p/3182157.html
2. http://www.cnblogs.com/cezorzhao/archive/2013/01/11/xiefangcha.html
其中,
旋轉數據
可以將
一般而言,運算
數據降維
還原近似數據
選擇主成分個數
對圖像數據應用PCA算法
爲使PCA算法能夠有效工作,通常我們希望所有的特徵
在自然圖像上進行訓練時,對每一個像素單獨估計均值和方差的意義不大,因爲理論上圖像上任一部分的統計特性都應該和其他部分相同,圖像的這種特性稱爲平穩性。
具體而言,爲使PCA算法正常工作,我們通常要滿足以下要求:
(1)特徵的均值大致爲0
(2)不同特徵的方差彼此相似。
對於自然圖片,即使不進行方差歸一化操作,條件(2)也滿足,故而我們不再進行任何方差歸一化操作(對於音頻數據,如聲譜、文本數據、詞袋向量等,我們通常也不進行方差歸一化)。實際上,PCA算法對輸入數據具有縮放不變性,無論輸入數據被如何放大(或縮小),返回的特徵向量都不改變。更正式的說:如果將每個特徵x都乘以某個正數(即所有特徵量被放大或縮小相同的倍數),PCA的輸出特徵向量都將不會發生改變。
既然我們不做方差歸一化,那麼唯一還需要進行的規整化操作就是均值規整化,其目的是保證所有特徵的均值都在0附近。根據應用,在大多數條件下,我們並不關注所輸入圖像的整體明亮程度。比如在對象識別任務中,圖像的整體明亮程度並不會影響圖像中存在的是什麼物體。更爲正式的說,我們隊圖像塊的平均亮度值不感興趣,所以可以減去這個值來進行均值規整話。
具體的步驟是,如果
即對某幅圖像求其所有像素的均值,再令該圖像的所有像素減去這個均值。
注意:1)對每個輸入圖像塊 x^{(i)} 都要單獨直行上面兩個步驟,2)這裏的
如果你處理的圖像是非自然圖像(比如,手寫文字,或者白背景正中擺放單獨物體),其他規整化操作就值得考慮了,而那種做法最合適也取決於具體應用場合。但對自然圖像而言,對每幅圖像進行上述的零均值規整化,是默認而合理的處理。