LLE
局部線性嵌入,Locally Linear Embedding(LLE)是另一個功能強大的非線性降維(nonlinear dimensional reduction,NLDR)技術。它是一個流形學習技術,並不基於投影。簡單地說,LLE工作的方式是:首先衡量每個訓練實例與它最近的鄰居們(closest neighbors,c.n.)的線性相關程度,然后在這些局部關系可以得到最好地保存的情況下,尋找一個低維的表示訓練集的方式。這個方法在展開彎曲的流形時非常有用,特別是數據集中沒有太多的噪點時。
下面的代碼使用sk-learn的LocallyLinearEmbedding類將一個瑞士卷展開:
from sklearn.manifold import LocallyLinearEmbedding lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10) X_reduced = lle.fit_transform(X)
生成的2D數據集結果如下圖所示:
我們可以看到,瑞士卷被完全地展開了,並且實例之間的距離非常好地在局部保持了。不過,在更大的規模層面上,距離並沒有保持好:左邊部分的瑞士卷是伸展的,而右邊的部分是緊縮的。盡管如此,LLE在流形建模中仍表現的非常好。
LLE的具體工作方式為:對於每條訓練實例x(i),算法識別它的k個最鄰近鄰居(在上面的代碼中k=10),然后嘗試用它的這些鄰居以一個線性函數的方式重構x(i)。更具體地說,它會找到一組權重wi,j使得x(i)與∑wi,jx(j)(其中j 初始為1,累加到第m)之間的平方距離盡可能的小,如果x(j)並不是x(i)的最近k個鄰居之一,則假設wi,j = 0。所以LLE的第一步是下面的帶約束優化問題,這里W是權重矩陣,包含所有的權重wi,j。第二個約束是對每個訓練實例x(i)的權重們一個簡單的標准化約束:
在這個步驟完成后,權重矩陣Wˆ(包含權重wˆi,j)便對訓練實例之間的局部線性關系進行了編碼。第二個步驟就是將訓練實例映射到一個d維的空間中(d < n),同時盡可能地保留這些局部關系。如果z(i)是x(i)在這個d維空間里的像(image),則我們會想要z(i)與∑wˆi,jz(j) (其中j初始為1,累加到第m)之間的平方距離盡可能的小。這個想法便產生了下一個帶約束的優化問題(如下公式所示)。它與第一個步驟非常像,但是並不是固定實例然后找到最優的權重,而是做相反的事情:保持權重固定,在低維空間中找到實例的image的最優位置。需要主要的是,這里Z是包含了所有z(i)的矩陣。
sk-learn的LLE實現,它的計算復雜度,找到k個最近鄰居的復雜度是O(m log(m)n log(k)),優化權重的復雜度是O(mnk3),以及構造低維空間表示的復雜度是O(dm2)。可惜的是,在最后一個公式中m2的會讓這個算法對超大數據集的擴展十分糟糕。
其他降維技術
還有很多種其他的降維技術,其中部分有在sk-learn中提供,下面是最熱門的幾個:
- 隨機投影
- 如它名稱所示,使用一個隨機的線性投影,將數據投影到一個低維空間中。這個聽起來很奇怪,不過結果證明,這種隨機投影實際上幾乎可以很好的保留距離。它的降維質量取決於數據的條目以及目標label的維度,而卻不是初始的維度。可以查看sklearn.random_projection 包獲取更多信息
- 多維縮放(Multidimensional Scaling,MDS)
- 在盡量保持實例之間距離的情況下減少維度
- Isomap
- 通過將每個實例與它的最近鄰居連接起來,而創建一個圖。然后在盡量保持實例之間測地距離(geodesic distances)的情況下減少維度
- t-分布式隨機鄰居嵌入(t-Distributed Stochastic Neighbor Embedding(t-SNE)
- 在保持相似實例接近而非相似實例遠離的情況下減少維度。它大部分用於數據可視化,特別是在可視化高維空間中的實例簇(clusters of instances)時(例如,將MNIST圖片在2D上進行可視化)。
- 線性判別分析(Linear Discriminant Analysi,LDA)
- 它是一個分類算法,不過在訓練時,它會學習最能分辨不同類別的判別軸(discriminative axes),然后這些軸可以被用於定義一個超平面,數據之后便可以投影到這個超平面上。這個方法的好處是投影會保持不同類別盡可能的遠離,所以LDA是一個很好的降維技術,它可以用於在執行另外的分類算法(如SVM)前進行降維。
下圖展示了其中幾種技術: