維度打擊,機器學習中的降維演算法:ISOMAP & MDS
降維是機器學習中很有意思的一部分,很多時候它是無監督的,能夠更好地刻畫資料,對模型效果提升也有幫助,同時在資料視覺化中也有著舉足輕重的作用。
一說到降維,大家第一反應總是PCA,基本上每一本講機器學習的書都會提到PCA,而除此之外其實還有很多很有意思的降維演算法,其中就包括isomap,以及isomap中用到的MDS。
ISOMAP是‘流形學習’中的一個經典演算法,流形學習貢獻了很多降維演算法,其中一些與很多機器學習演算法也有結合,但上學的時候還看了蠻多的機器學習的書,從來沒聽說過流形學習的概念,還是在最新的周志華版的《機器學習》裡才看到,很有意思,記錄分享一下。
流形學習
流形學習應該算是個大課題了,它的基本思想就是在高維空間中發現低維結構。比如這個圖:
這些點都處於一個三維空間裡,但我們人一看就知道它像一塊捲起來的布,圖中圈出來的兩個點更合理的距離是A中藍色實線標註的距離,而不是兩個點之間的歐式距離(A中藍色虛線)。
此時如果你要用PCA降維的話,它根本無法發現這樣捲曲的結構(因為PCA是典型的線性降維,而圖示的結構顯然是非線性的),最後的降維結果就會一團亂麻,沒法很好的反映點之間的關係。而流形學習在這樣的場景就會有很好的效果。
我對流形學習本身也不太熟悉,還是直接說演算法吧。
ISOMAP
在降維演算法中,一種方式是提供點的座標進行降維,如PCA;另一種方式是提供點之間的距離矩陣,ISOMAP中用到的MDS(Multidimensional Scaling)就是這樣。
在計算距離的時候,最簡單的方式自然是計算座標之間的歐氏距離,但ISOMAP對此進行了改進,就像上面圖示一樣:
1.通過kNN(k-Nearest Neighbor)找到點的k個最近鄰,將它們連線起來構造一張圖。
2.通過計算同中各點之間的最短路徑,作為點之間的距離dij 放入距離矩陣D
3.將D 傳給經典的MDS演算法,得到降維後的結果。
ISOMAP本身的核心就在構造點之間的距離,初看時不由得為其拍案叫絕,類似的思想在很多降維演算法中都能看到,比如能將超高維資料進行降維視覺化的t-SNE。
ISOMAP效果,可以看到選取的最短路徑比較好地還原了期望的藍色實線,用這個資料進行降維會使流形得以保持:
ISOMAP演算法步驟可謂清晰明瞭,所以本文主要著重講它中間用到的MDS演算法,也是很有意思的。
經典MDS(Multidimensional Scaling)
如上文所述,MDS接收的輸入是一個距離矩陣
如果只告訴一個人這些點之間的距離(假設是歐氏距離),他會丟失那些資訊呢?
a.我們對點做平移,點之間的距離是不變的。
b.我們對點做旋轉、翻轉,點之間的距離是不變的。
所以想要從
我們不妨假設:
計算一個很重要的矩陣
可以看到我們通過
所以如果我們想通過
B中每個元素的值為:
計算距離矩陣
這時候我們有的只有
所以思路是:從D->B->X
此時我們要對X加一些限制,前面說過我們平移所有點是不會對距離矩陣造成影響的,所以我們就把資料的中心點平移到原點,對X做如下限制(去中心化):
所以有