公開課地址:https://class.coursera.org/ml-003/class/index
授課老師:Andrew Ng
1、motivation 1:data compression(動機1-資料壓縮)
所謂資料壓縮就是對高維資料進行降維,從而減少資料存放區容量。至於要進行資料壓縮的原因,顯然是資料量太大造成的,先看下面這個例子:
從中可以看到,我們對平面上二維點進行降維,讓這些點都落在一條直線上,最後只需要儲存這條直線而無需儲存整個平面。從二維到一維,顯然能減少資料的儲存空間,不過這種方法有利也有弊,很顯然降維以後資料就不那麼準確了,而且在直線上我們這裡只能記錄每個資料點之間的位置關係,丟失了原有的部分資訊。
除了二維降到一維,我們也可以讓三維資料降到二維,和上面的做法類似,無非是讓三維點投影到二維平面上:
2、motivation 2:data visualization(動機2-資料視覺效果)
考慮一個在國家之間比較的例子,比較的因素包括很多,諸如GDP,生活環境指數等等,如下表:
表中資料倒是很詳細,但是我們無法用一幅圖來表示,沒有一種直觀的感受。因此,我們需要採用資料降維的思想,先把資料降到二維,然後繪圖:
但是需要注意,我們需要自己指定橫縱座標的兩個維度分別代表什麼,例如這裡z1代表country size/GDP,z2代表 per.person GDP. 這種指定因人而異,與所要分析的內容相關。
3、principal component analysis problem formulation(主成分分析問題形式)
主成分分析是一種降維的方法,通過分析資料點特徵情況,把資料進行降維,實現從n維降到k維的目的:
需要注意的是,主成分分析並不是線性迴歸,尤其是針對二維資料降維時,如所示[藍線為PCA面],PCA衡量的是樣本點到直線的正交距離(樣本點到直線作垂線段),而線性迴歸衡量的是樣本點與預測值直接的垂直距離(平行y軸):
更標準的解釋是:PCA中為的是尋找一個面,將各樣本點投影到這個面後使得各點間方差最大(跟y沒有關係,是尋找最能夠表現這些特徵的一個平面);而線性迴歸是給出樣本點並根據樣本點去預測y。
4、principle component analysis algorithm(主成分分析演算法)
主成分分析演算法首先要做的就是對資料進行預先處理,比如前面講的特徵標準化:
接下來就是利用PCA演算法進行計算了,假設要把n維的資料降到k維,首先要計算共變數矩陣,然後利用奇異值分解SVD來求得一個U矩陣,不懂SVD的看這裡:
http://zh.wikipedia.org/wiki/%E5%A5%87%E5%BC%82%E5%80%BC%E5%88%86%E8%A7%A3
如果瞭解了SVD的知識,應該知道從n維降維到k維,也就是選出這n個特徵中最重要的k個,也就是選出特徵值最大的k個。上面的matlab命令中U矩陣的特徵值已經按從大到小排好序,我們只需要選擇最前面與其對應的的k個特徵向量即可。於是我們得到Ureduce矩陣:
再將其與之前採用n維特徵向量表示的樣本點資料相乘,就得到了以k維特徵向量表示的樣本資料。很顯然,這裡我們並沒有選擇U中的全部向量,所以叫主成分分析。
5、reconstruction from compressed data(從壓縮資料中恢複)
我們已經知道如何把資料進行壓縮,但是有時候需要把資料進行恢複。恢複時採用逆運算即可:
Xapprox=Ureduce*Z就能求出恢複後的資料,注意這裡是求不出未經處理資料的,只能是近似資料。
6、choosing the number of principle of components(選擇主成分的數目)
進行主成分分析時,需要指定k的數目,由於資料的部分資訊在壓縮後就無法恢複了,所以我們在不想丟失太多資訊的情況下儘可能壓縮資料,這也是一個權衡的問題:
在設定一個閾值後,可以通過計算誤差率來確定k值,比如當閾值設定為0.01時,表示保留了99%的方差。可以證明,如果採用matlab進行計算,上面的誤差率可以換成S(參看SVD)來表示:
當閾值為0.01時:
7、advice for applying PCA(PCA應用建議)
我們已經知道資料集被劃分為訓練集、驗證集和測試集三類,但是在使用PCA降維時需要注意只能針對訓練集進行降維,選擇的主分量只應用於訓練集:
PCA的好處前面已經提到過:
需要注意,在過擬合的時候如果採用PCA進行降維消去過擬合的做法是錯誤的,而應該採用規格化參數來防止過擬合:
最後是在應用PCA之前,你應該確保在未經處理資料上進行了嘗試,只有在這種嘗試達不到你預期結果時才採用PCA。
-----------------------------------------弱弱的分割線------------------------------------------------
這一講的主要內容是對資料進行降維,最常見的方法應該是PCA。不過在實際應用中,有時候我們一眼就能看到哪些特徵是多餘的應該刪除,但是用PCA算下來卻不是如此。所以也不應該盲目信任PCA,盡量採用多種方法去嘗試。個人覺得這一講中SVD幾乎沒講,其實SVD才應該是重點,那些之前學過矩陣分析而不懂SVD有何應用的童鞋,現在該明白SVD的作用所在了吧。