斯坦福NG機器學習課程:Dimensionality_reduction筆記

Dimensionality_reduction

首先通過圖形化描述引出爲什麼需要進行數據降維?以及數據降維的motivation。

Data compression

Data compression 降低維度:好處減少計算機內存、磁盤等硬件使用,更重要的是加速學習算法執行速度。例子



上面是很簡單直觀的降維的圖形描述,分別有2維降維1維,三維降維2維。

習題:


Visualization

降低維度另一個目的:進行Visualization,維度太高我們無法用圖形直觀來進行可視化處理,所以降低維度到2維3維最大好處就有方便可視化。下面舉例一個國家經濟構成因素表


假設有50個特徵,則特徵向量爲50維,這樣表達一個data的特徵很複雜。假設我們能把50維降到2維,則變爲下面另外一張表格所示。


可視化的結果類似下圖:



用二維數據儘可能表示出50維特徵所攜帶的信息!下面習題中簡單看到,我們需要降低維數,而且最希望降低到2維或者3維,這樣我們可以很好很簡單進行可視化。

習題:


PCA算法

前面這麼多都是在描述降維,以及降維後帶給我們的好處,但是沒有提到如何進行降維的算法,現在引出PCA(principle component analysis)算法。

通常情況下 PCA之前先進行feature scaling 和mean normalization, PCA算法描述如下:



進行project 來降低n維到k維,最小化projection error(數學上可以證明其實就是最大化數據方差,後面進行比較詳細描述)。直觀上理解爲什麼可以降維?因爲我們在高維時可能很多維數據相互關聯,所以我們沒必要用那麼多維去表達數據特徵。降維我們可能在允許的一定範圍內損失了一些信息,但是維度降低,避免維災難,大大加速學習算法速度,這樣是值得去做的。

特別注意區分兩個不同問題:PCA與線性迴歸的關係?

PCA不是線性迴歸!首先需要區別就是兩者優化目標函數都是不一致的。此外線性回顧是用來預測y變量的值,而PCA中沒有涉及y值問題,只是進行降維,project到line或者surface上使得projection error最小。看圖更好明白。


左邊圖示線性迴歸的cost function 它求得是真實值與預測值的差異,表現在圖形上是垂直x軸上方向真實值與預測值差值,而右邊是PCA算法,求得是真實值到直線的垂直距離,很明瞭兩者所求的東西都是完全不一樣的!

習題:


看上面這個簡單例題,我們想利用PCA,最小projection error 直觀上看到斜率爲-1直線能滿足,所以選擇D 

在PCA之前需要進行 數據預處理(data preprocessing),進行數據預處理類似監督學習中處理,只是這裏是無監督學習,我們沒有類標籤。前面提到feature scaling 和mean normalization 下面描述具體怎麼做這兩個過程。


前面都在對PCA算法進行描述,接下來說PCA具體該怎麼計算,看下圖


上圖所示:我們需要計算黑色圈內標記向量,以及投影到新的維度下的座標值。課程中不會講到這個計算問題證明,那些內容超出了課程要求(PS:在舊版本的視頻中NG有詳細對這部分內容進行推導,可能是數學推導過程比較複雜,講解耗時大家聽了也比較吃力,新的課程中NG刪掉了數學推理過程,因爲工具包實現PCA只需要很少代碼,現在只是讓大家瞭解其中原理,弱化裏面具體數學推導過程),只講到怎麼操作能做到。

PCA算法流程:


計算分爲兩步:1. 計算協方差矩陣 2. 計算協方差矩陣特徵向量 圖片中eig函數與svd函數能實現相同功能。但是NG傾向於使用svd,這裏說的是在octave實現層面東西啦。svd產生計算返回三個矩陣,我們只需要用到U矩陣。svd函數中文叫奇異值分解(詳細內容可以參考:點擊打開鏈接 )

下面圖片顯示如何由n維降維到k維的一個具體過程,其實就是矩陣計算過程。


選擇U矩陣k列,其實中間就是矩陣運算,可以看到最終z爲k維,這裏只是描述操作流程,忽略了其中所有的數學證明!

PCA的summary 


上圖是PCA算法總的執行流程,沒有證明這個流程得到是滿足projection error最小化。因爲數學證明比較複雜,但是在octave或者matlab中用比較少的代碼就能實現。

習題:


Choosing thenumber of principal components

Choosing thenumber of principal components(通俗說就是確定上面說到的k,即最終降到多少維,我們肯定需要選擇k的標準,我們想盡量降維,並且還能儘可能多的保留原來數據的信息)

選擇k的標準見下圖:


圖片中顯示了不同閾值下選擇。

選擇k的兩種算法:


先看左邊算法流程很簡單就是多次嘗試,先設定k=1計算不等式是否成立,成立就找到了最小的k,不成立增加k繼續嘗試,我們發現這個算法簡單但是比較低效,需要多次嘗試。

右邊方法:得到S矩陣,利用數學證明得到結論,不需要像左邊多次計算Ureduce 所以我們選擇k的方法如下:


通過99% variance retained我們可以直觀上對PCA效果有了解。

這裏需要先暫停一下爲什麼需要保留99%variance 

PCA 的問題其實是一個基的變換,使得變換後的數據有着最大的方差。方差的大小描述的是一個變量的信息量,我們在講一個東西的穩定性的時候,往往說要減小方差,如果一個模型的方差很大,那就說明模型不穩定了。但是對於我們用於機器學習的數據(主要是訓練數據),方差大才有意義,不然輸入的數據都是同一個點,那方差就爲0了,這樣輸入的多個數據就等同於一個數據了。以下面這張圖爲例子:


這個假設是一個攝像機採集一個物體運動得到的圖片,上面的點表示物體運動的位置,假如我們想要用一條直線去擬合這些點,那我們會選擇什麼方向的線呢?當然是圖上標有signal的那條線。如果我們把這些點單純的投影到x軸或者y軸上,最後在x軸與y軸上得到的方差是相似的(因爲這些點的趨勢是在45度左右的方向,所以投影到x軸或者y軸上都是類似的),如果我們使用原來的xy座標系去看這些點,容易看不出來這些點真正的方向是什麼。但是如果我們進行座標系的變化,橫軸變成了signal的方向,縱軸變成了noise的方向,則就很容易發現什麼方向的方差大,什麼方向的方差小了。

一般來說,方差大的方向是信號的方向,方差小的方向是噪聲的方向,我們在數據挖掘中或者數字信號處理中,往往要提高信號與噪聲的比例,也就是信噪比。對上圖來說,如果我們只保留signal方向的數據,也可以對原數據進行不錯的近似了。

PCA的全部工作簡單點說,就是對原始的空間中順序地找一組相互正交的座標軸,第一個軸是使得方差最大的,第二個軸是在與第一個軸正交的平面中使得方差最大的,第三個軸是在與第1、2個軸正交的平面中方差最大的,這樣假設在N維空間中,我們可以找到N個這樣的座標軸,我們取前r個去近似這個空間,這樣就從一個N維的空間壓縮到r維的空間了,但是我們選擇的r個座標軸能夠使得空間的壓縮使得數據的損失最小。

習題:最小化projection error的數學形式描述。



Reconstruction(重構)

前面提到了數據壓縮,肯定就有數據重構(reconstruction from compressedrepresentation)


如上圖,我們反向計算可以近似重構得到x的。

習題:PCA相關性質考察


Advice forApplying PCA (總結PCA):


首先講的是在監督學習中加速,首先extract X ,PCA得到map後Z 新的訓練數據,用新的訓練數據進行學習算法,map同樣可以應用到交叉驗證集和測試集中去。說到是圖像的例子,長寬都爲100像素,總的爲10000,應用PCA降維能大大加快學習算法速度。

PCA算法應用:


我們需要應用PCA往往是加速學習算法,因爲現在硬件已經不是太大問題,主要是考慮速度。

Bad use of PCA 



PCA用來prevent overfitting 是bad!!使用。它不是一個好的解決overfitting的方法。爲了解決overfitting更好的肯定是利用正則化項來解決。PCA沒有用到類標籤,PCA就是找一個lower 維來近似高維數據,這樣肯定丟失了信息!

如果你的主要目的是加速學習算法,那麼PCA很可能是一個好的選擇。如果爲了解決overfitting問題肯定選擇加入正則化項來解決。


PCA在機器學習系統中使用情形。首先不使用PCA,當內存無法進行、算法速度慢到無法得到結果嘗試使用PCA。

習題:PCA使用的一些指導性建議!



這堂課NG有意弱化了其中關鍵步驟SVD的數學推導證明,如果感興趣大家可以看SVD_tutorial,歡迎大家批評指正!微笑



好的博客參考資料:leftnoteasy博客  點擊打開鏈接










發佈了166 篇原創文章 · 獲贊 54 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章