Stanford機器學習筆記-10. 降維(Dimensionality Reduction)

10. Dimensionality Reduction

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

10.1 Motivation

10.1.1 Motivation one: Data Compression

若是咱們有許多冗餘的數據,咱們可能須要對特徵量進行降維(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)。

10.2.2 Motivation two: Visualization

咱們能夠知道,但特徵量維數大於3時,咱們幾乎不能對數據進行可視化。因此,有時爲了對數據進行可視化,咱們須要對其進行降維。咱們能夠找到2個或3個具備表明性的特徵量,他們(大體)能夠歸納其餘的特徵量。

例如,描述一個國家有不少特徵量,好比GDP,人均GDP,人均壽命,平均家庭收入等等。想要研究國家的經濟狀況並進行可視化,咱們能夠選出兩個具備表明性的特徵量如GDP和人均GDP,而後對數據進行可視化。如圖10-3所示。

圖10-3 一個可視化的例子

10.2 Principal Component Analysis

主成分分析(Principal Component Analysis : PCA)是最經常使用的降維算法。

10.2.1 Problem formulation

首先咱們思考以下問題,對於正交屬性空間(對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的目標是找到k個向量,將全部樣本投影到這k個向量構成的超平面,使得投影的距離最小(或者說投影偏差projection error最小)。
  • 以最大可分性爲目標,PCA的目標是找到k個向量,將全部樣本投影到這k個向量構成的超平面,使得樣本點的投影可以儘量的分開,也就是使投影后的樣本點方差最大化

注意: PCA和線性迴歸是不一樣的,如圖10-6所示,線性迴歸是以平方偏差和(SSE)最小爲目標,參見1.2.4節;而PCA是使投影(二維即垂直)距離最小;PCA與標記或者預測值徹底無關,而線性迴歸是爲了預測y的值。

圖10-6 PCA不是線性迴歸

分別基於上述兩種目標的具體推導過程參見周志華老師的《機器學習》P230。從方差的角度推導參見李宏毅老師《機器學習》課程Unsupervised Learning: Principle Component Analysis

兩種等價的推導結論是:對協方差矩陣進行特徵值分解,將求得的特徵值進行降序排序,再取前k個特徵值對應的特徵向量構成

其中

10.2.2 Principal Component Analysis Algorithm

基於上一節給出的結論,下面給出PCA算法。

輸入:訓練集:,低維空間維數k

過程:

  1. 數據預處理:對全部樣本進行中心化(即便得樣本和爲0)

  2. 計算樣本的協方差矩陣(Sigma)

        (其中是n*1的向量)

    在matlab中具體實現以下,其中X爲m*n的矩陣:

    Sigma = (1/m) * X'* X;

  3. 對2中求得的協方差矩陣Sigma進行特徵值分解

    在實踐中一般對協方差矩陣進行奇異值分解代替特徵值分解。在matlab中實現以下:

    [U, S, V] = svd(Sigma); (svd即爲matlab中奇異值分解的內置函數)

  4. 取最大的k個特徵值所對應的特徵向量

    在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

10.2.3 Choosing the Number of Principal Components

如何選擇k(又稱爲主成分的個數)的值?

首先,試想咱們可使用PCA來壓縮數據,咱們應該如何解壓?或者說如何回到本來的樣本值?事實上咱們能夠利用下列等式計算出原始數據的近似值Xapprox:

Xapprox = Z * Ureduce (m*n = m*k * k*n )

天然的,還原的數據Xapprox越接近原始數據X說明PCA偏差越小,基於這點,下面給出選擇k的一種方法:

結合PCA算法,選擇K的算法總結以下:

這個算法效率特別低。在實際應用中,咱們只需利用svd()函數,以下:

10.2.4 Advice for Applying PCA

  1. PCA一般用來加快監督學習算法。
  2. PCA應該只是經過訓練集的特徵量來獲取投影矩陣Ureduce,而不是交叉檢驗集或測試集。可是獲取到Ureduce以後能夠應用在交叉檢驗集和測試集。
  3. 避免使用PCA來防止過擬合,PCA只是對特徵量X進行降維,並無考慮Y的值;正則化是防止過擬合的有效方法。
  4. 不該該在項目一開始就使用PCA: 花大量時間來選擇k值,極可能當前項目並不須要使用PCA來降維。同時,PCA將特徵量從n維降到k維,必定會丟失一些信息。
  5. 僅僅在咱們須要用PCA的時候使用PCA: 降維丟失的信息可能在必定程度上是噪聲,使用PCA能夠起到必定的去噪效果。
  6. PCA一般用來壓縮數據以加快算法,減小內存使用或磁盤佔用,或者用於可視化(k=2, 3)。

 

參考:《機器學習》  周志華

相關文章
相關標籤/搜索