Content html
10. Dimensionality Reduction算法
10.1 Motivationapp
10.1.1 Motivation one: Data Compression機器學習
10.2.2 Motivation two: Visualization函數
10.2 Principal Component Analysis學習
10.2.1 Problem formulation測試
10.2.2 Principal Component Analysis Algorithmspa
10.2.3 Choosing the Number of Principal Components3d
10.2.4 Advice for Applying PCA orm
若是咱們有許多冗餘的數據,咱們可能須要對特徵量進行降維(Dimensionality Reduction)。
咱們能夠找到兩個很是相關的特徵量,可視化,而後用一條新的直線來準確的描述這兩個特徵量。例如圖10-1所示,x1和x2是兩個單位不一樣本質相同的特徵量,咱們能夠對其降維。
圖10-1 一個2維到1維的例子
又如圖10-2所示的3維到2維的例子,經過對x1,x2,x3的可視化,發現雖然樣本處於3維空間,可是他們大多數都分佈在同一個平面中,因此咱們能夠經過投影,將3維降爲2維。
圖10-2 一個3維到2維的例子
降維的好處很明顯,它不只能夠數據減小對內存的佔用,並且還能夠加快學習算法的執行。
注意,降維只是減少特徵量的個數(即n)而不是減少訓練集的個數(即m)。
咱們能夠知道,但特徵量維數大於3時,咱們幾乎不能對數據進行可視化。因此,有時爲了對數據進行可視化,咱們須要對其進行降維。咱們能夠找到2個或3個具備表明性的特徵量,他們(大體)能夠歸納其餘的特徵量。
例如,描述一個國家有不少特徵量,好比GDP,人均GDP,人均壽命,平均家庭收入等等。想要研究國家的經濟狀況並進行可視化,咱們能夠選出兩個具備表明性的特徵量如GDP和人均GDP,而後對數據進行可視化。如圖10-3所示。
圖10-3 一個可視化的例子
主成分分析(Principal Component Analysis : PCA)是最經常使用的降維算法。
首先咱們思考以下問題,對於正交屬性空間(對2維空間即爲直角座標系)中的樣本點,如何用一個超平面(直線/平面的高維推廣)對全部樣本進行恰當的表達?
事實上,若存在這樣的超平面,那麼它大概應具備這樣的性質:
下面咱們以3維降到2維爲例,來試着理解爲何須要這兩種性質。圖10-4給出了樣本在3維空間的分佈狀況,其中圖(2)是圖(1)旋轉調整後的結果。在10.1節咱們默認以紅色線所畫平面(不妨稱之爲平面s1)爲2維平面進行投影(降維),投影結果爲圖10-5的(1)所示,這樣彷佛還不錯。那爲何不用藍色線所畫平面(不妨稱之爲平面s2)進行投影呢? 能夠想象,用s2投影的結果將如圖10-5的(2)所示。
圖10-4 樣本在3維正交空間的分佈
圖10-5 樣本投影在2維平面後的結果
由圖10-4能夠很明顯的看出,對當前樣本而言,s1平面比s2平面的最近重構性要好(樣本離平面的距離更近);由圖10-5能夠很明顯的看出,對當前樣本而言,s1平面比s2平面的最大可分性要好(樣本點更分散)。不難理解,若是選擇s2平面進行投影降維,咱們會丟失更多(至關多)的特徵量信息,由於它的投影結果甚至能夠在轉化爲1維。而在s1平面上的投影包含更多的信息(丟失的更少)。
這樣是否就是說咱們從3維降到1維必定會丟失至關多的信息呢? 其實也不必定,試想,若是平面s1投影結果和平面s2的相似,那麼咱們能夠推斷這3個特徵量本質上的含義大體相同。因此即便直接從3維到1維也不會丟失較多的信息。這裏也反映了咱們須要知道如何選擇到底降到幾維會比較好(在10.2.3節中討論)。
讓咱們高興的是,上面的例子也說明了最近重構性和最大可分性能夠同時知足。更讓人興奮的是,分別以最近重構性和最大可分性爲目標,可以獲得PCA的兩種等價推導。
通常的,將特徵量從n維降到k維:
注意: PCA和線性迴歸是不一樣的,如圖10-6所示,線性迴歸是以平方偏差和(SSE)最小爲目標,參見1.2.4節;而PCA是使投影(二維即垂直)距離最小;PCA與標記或者預測值徹底無關,而線性迴歸是爲了預測y的值。
圖10-6 PCA不是線性迴歸
分別基於上述兩種目標的具體推導過程參見周志華老師的《機器學習》P230。從方差的角度推導參見李宏毅老師《機器學習》課程Unsupervised Learning: Principle Component Analysis。
兩種等價的推導結論是:對協方差矩陣進行特徵值分解,將求得的特徵值進行降序排序,再取前k個特徵值對應的特徵向量構成。
其中
基於上一節給出的結論,下面給出PCA算法。
輸入:訓練集:,低維空間維數k
過程:
(其中是n*1的向量)
在matlab中具體實現以下,其中X爲m*n的矩陣:
Sigma = (1/m) * X'* X;
在實踐中一般對協方差矩陣進行奇異值分解代替特徵值分解。在matlab中實現以下:
[U, S, V] = svd(Sigma); (svd即爲matlab中奇異值分解的內置函數)
在matlab具體實現時,Ureduce = 認爲是第3步求得的U的前k個,即有:Ureduce = U( : , 1:k); 其中Ureduce爲n*k的矩陣
通過了上述4步獲得了投影矩陣Ureduce,利用Ureduce就能夠獲得投影后的樣本值
(爲k*1的向量)
下面總結在matlab中實現PCA的所有算法(假設數據已被中心化)
Sigma = (1/m) * X' * X; % compute the covariance matrix
[U,S,V] = svd(Sigma); % compute our projected directions
Ureduce = U(:,1:k); % take the first k directions
Z = Ureduce' * X; % compute the projected data points
如何選擇k(又稱爲主成分的個數)的值?
首先,試想咱們可使用PCA來壓縮數據,咱們應該如何解壓?或者說如何回到本來的樣本值?事實上咱們能夠利用下列等式計算出原始數據的近似值Xapprox:
Xapprox = Z * Ureduce (m*n = m*k * k*n )
天然的,還原的數據Xapprox越接近原始數據X說明PCA偏差越小,基於這點,下面給出選擇k的一種方法:
結合PCA算法,選擇K的算法總結以下:
這個算法效率特別低。在實際應用中,咱們只需利用svd()函數,以下:
參考:《機器學習》 周志華