主成分分析法(PCA)(含SVD奇異值分解)等降維(dimensionality reduction)算法-sklearn

親們早安、午安、晚安,上一篇主成分分析法(PCA)等降維(dimensionality reduction)算法-Python主要是了解了PCA的原理和基于Python的基本算法實現,本文主要是學習scikit-learn (sklearn)中關于降維(dimensionality reduction)的一些模型,側重于PCA在sklearn中的實現。

在sklearn中的Dimensionality Reduction中,包含的降低特征維度的方法包括主成分分析法PCA(這里面又包括不同類型的PCA方法,一般的PCAKernelPCA, SparsePCA, TruncatedSVD, IncrementalPCA )、因子分析法FA(factor analysis)、獨立成分分析ICA

1、主成分分析法PCA

1)Exact PCA?

這個方法主要是利用上一篇主成分分析法(PCA)等降維(dimensionality reduction)算法-Python中的方法,基于奇異值分解(Singular Value Decomposition)來線性降維到低維度的空間。

啥?怎么跑出來個奇異值分解SVD?這是線性代數里的名詞,關于線性代數的知識,推薦查看網易公開課里的麻省理工線性代數課程,里面有關于SVD的詳細計算。當然,如果想知道SVD的幾何意義,我覺得We Recommend a Singular Value Decomposition非常好,圖文并茂,極力推薦,由此也進一步理解了主成分分析PCA。

(1)SVD

首先考慮對角矩陣如M,如果M與一個向量(x,y)相乘如圖1,表示將(x,y)進行長度的變化如圖2:

圖1
圖2

根據圖2的變化可知,對角矩陣M的作用是將水平垂直網格作水平拉伸(或者反射后水平拉伸)的線性變化。

如果M是圖3中的對稱矩陣,那么它和向量(x,y)相乘后,也可以找到一組網格線(如圖4)

圖3
圖4

看著圖4有點蒙圈,貌似不是簡單的線性變化,辣么,先把圖4中左邊圖旋轉45度,然后再乘以M,然后得到下面的情況:

圖5

圖5表明,先旋轉45度,然后再和M相乘,此時又可以只進行簡單的拉伸變化。

對比圖4-5,當原始矩陣乘以對稱矩陣時,不一定還是進行線性變化(只在一個方向進行伸縮變化),除非這個映射時,兩邊的正交網絡是一致的。

再比如更加一般的非對稱非對角矩陣M(如圖6):

圖6
圖7

觀察圖7,對于任意一個向量,當一個一般矩陣M作用在其上面時,很難只是做線性變化。但是,我們可以如圖7最下面一行的變化,找一組網格,找兩個正交向量來表示向量。

圖8


圖9

對角矩陣Σ對角線上的取值σ_1,σ_2就是矩陣M的奇異值。

圖10

綜上所述:奇異值分解SVD幾何意義:對于任何的一個矩陣,我們要找到一組兩兩正交單位向量序列,是的矩陣作用在此向量序列后得到新的向量序列保持兩兩正交。奇異值的幾何意義:這組變化后的新的向量序列的長度。從圖10中看到,奇異值分解和特征值求解很相似,但是特征值必須是方陣才存在,但任何矩陣都可以進行奇異值分解。

好啦,奇異值分解SVD差不多搞清楚了,為啥要進行奇異值分解,其實它表現的就像PCA的意義那樣,用這些關鍵較少數量的奇異值(奇異向量)來表示原來可能比較龐大的東東,因此,在圖像壓縮等方向應用的比較多。如下:

比如,圖11是一個15*25的圖片,其像素組成是圖12中的M矩陣

圖11
圖12

結果計算發現,圖12中M的非零奇異值只有三個:σ1= 14.72;σ2= 5.22;σ3= 3.31

那么,根據上面奇異值幾何意義,其實圖11中的圖片是可以用這三個奇異值向量來表示的:M=u1σ1v1^T+u2σ2v2^T+u3σ3v3^T,,這一將原來可能要對375個像素點的計算變為123個像素點的計算。還有個問題需要強調,可能實際圖片不像圖11中那樣純粹,可能存在噪聲,如圖13(圖中出現的那些灰色的地方表示噪聲)

圖13

圖13中像素矩陣得到的奇異值為:σ1= 14.15;σ2= 4.67;σ3= 3.00;σ4= 0.21;σ5= 0.19...

σ15= 0.05等,但是看到還是前三個特征值比較大,因此,繼續用σ1,σ2,σ3表示該圖片,其他的奇異值舍去,最終得到新的圖片見圖14,顯然圖14中噪聲變少了。

圖14

關于SVD的這個奇異的理解(同時包含PCA于SVD的聯系),下面知乎大牛的解釋可能更清楚點:

圖15
圖16

(2)簡單PCA模型

class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

n_components->表示最終要保留的主成分特征數,如果不設置,則保留全部特征

whiten->是否進行白化,默認為false。啥是白化?因為我們在PCA中,保留主要的特征來計算決策,因此難免有誤差,為了降低誤差,通過白化來降低特征值之間的相關性,使其協方差矩陣變為對角矩陣。具體,來自知乎大牛關于PCA白化的解釋很詳細,請參考下圖17:

圖17

在PCA中,原始數據如圖17最左邊的紅色圖表示;然后用原始矩陣減去均值,然后求解協方差矩陣,將數據依據協方差矩陣方差最大的軸進行旋轉,得到圖17中部綠色顯示內容;然后進行白化whiten,就是白化操作的輸入是特征基準上的數據,然后對每個維度除以其特征值來對數值范圍進行歸一化。如果數據服從多變量的高斯分布,那么經過白化后,數據的分布將會是一個均值為零,且協方差相等的矩陣(及單位協方差矩陣),如圖17中最右邊藍色圖示。

svd_solver->指定奇異值分解SVD的方法,由于特征分解是奇異值分解SVD的一個特例,一般的PCA庫都是基于SVD實現的。有4個可以選擇的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般適用于數據量大(數據量超過500*500),數據維度多同時主成分比例又較低(低于80%)的PCA降維,它使用了一些加快SVD的隨機算法。 full則是傳統意義上的SVD,使用了scipy庫對應的實現。arpack和randomized的適用場景類似,區別是randomized使用的是scikit-learn自己的SVD實現,而arpack直接使用了scipy庫的sparse SVD實現。默認是auto,即PCA類會自己去在前面講到的三種算法里面去權衡,選擇一個合適的SVD算法來降維。一般來說,使用默認值就夠了。

舉栗子1:

圖18 栗子1準備數據
圖19 栗子1PCA處理數據
圖20 栗子1效果圖

篇幅有限(其實是能力+精力有限,捂臉),sklearn中的PCA模型先介紹到這里,以后再深入研究。希望內容對大家有所幫助,也希望大牛不吝賜教。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容