流形學習t-SNE,LLE,Isomap

做者|Andre Ye
編譯|VK
來源|Analytics Indiamagpython

主成分分析是一種強大的方法,但它每每失敗,由於它假設數據能夠線性建模。PCA將新的特徵表示爲現有特徵的線性組合,將每一個特徵乘以一個係數。git

爲了解決主成分分析的侷限性,人們經過對具備不一樣結構的數據進行應用而產生了各類各樣的技術。然而,流形學習尋求一種能夠推廣到全部數據結構的方法。web

不一樣的數據結構指的是數據中不一樣的屬性。例如,它多是線性可分的,也多是很是稀疏的。數據中的關係能夠是相切的、平行的、包絡的或正交的。PCA在很是特定的數據結構子集上工做得很好,由於它是在線性假設下工做的。算法

爲了把事情放在上下文中,考慮300×300像素的頭像。在完美的條件下,每一個圖像都會完美地居中,但實際上,還須要考慮許多額外的自由度,例如燈光或臉部傾斜。若是咱們把一個頭像看成90000維空間中的一個點,改變各類效果,好比傾斜頭部或朝不一樣的方向看,會使它在空間中非線性移動,即便它是同一類的同一個物體。網絡

這種數據常常出如今現實世界的數據集中。除此以外,當PCA呈現傾斜分佈、極值時,PCA可能會變得很糟糕(參見非線性PCA以得到解決方案)。咱們須要一種可推廣的降維方法。數據結構

流形學習就是指這個任務。流形學習中有許多方法多是之前見過的,例如t-SNE和局部線性嵌入(LLE)。有許多文章和論文深刻到這些算法的技術和數學細節,但這篇文章將集中在通常的直覺和實現上。機器學習

注意,雖然有一些維度縮減的變體是有監督的(例如線性/二次判別分析),流形學習一般指的是無監督的降維,其中類別沒有提供給算法(雖然可能存在)。函數

PCA試圖建立幾個線性超平面來表示維度,就像多元迴歸構造做爲數據的估計,流形學習嘗試學習流形,流形是多維空間中光滑的曲面。以下圖所示,這些一般是經過對圖像進行細微的變換而造成的。工具

而後,local linear patches能夠提取與流形相切的部分。這些patches(補丁)一般有足夠的數量,所以能夠準確地表示流形。性能

這些流形不是由任何一個數學函數建模的,而是由幾個小的線性補丁,因此這些線性鄰域能夠建模任何流形。雖然這可能不是明確的某些算法如何接近建模的流形,基本思想是很是類似的。

如下是流形學習算法的基本假設或方面:

  • 數據中存在着能夠經過流形建模的非線性關係—曲面跨越多個維度,平滑,且不太「搖擺」(太複雜)。

  • 保持數據的多維形狀並不重要。與其用特定的方向來「展開」或「投影」數據(如PCA)來保持數據的通常形狀,不如執行更復雜的操做,如展開一個捲曲的條帶或將球體從內向外翻轉。

  • 流形建模的最佳方法是將曲面視爲由幾個鄰域組成的曲面。若是每一個數據點都設法保持與全部其餘點之間的距離,而只保留與它相鄰的點之間的距離,則能夠在數據中保持幾何關係。

經過研究分解這個螺旋狀數據集之間的不一樣方法,能夠很好地理解這個想法。左側是一種更像PCA的方法,用於保存數據的形狀,其中每一個點彼此鏈接。然而,右邊是一種只計算數據點鄰域之間的距離的方法。

這種對鄰域以外的點的相對忽視會致使有趣的結果。例如,考慮這個瑞士軋輥數據集,它被卷繞在三維空間中,並被簡化爲二維的條形圖。在某些狀況下,這種效果並不理想。然而,若是這條曲線是圖像中攝像機傾斜或音頻質量受到外部影響的結果,流形學習經過巧妙地解開這些複雜的非線性關係給咱們帶來了巨大的幫助。

在瑞士Roll數據集上,PCA甚至像Kernel-PCA這樣的特殊變體都沒法捕捉值的梯度。另外一方面,流形學習算法局部線性嵌入(LLE)也可以作到。

讓咱們更詳細地瞭解三種流行的流形學習算法:IsoMap、局部線性嵌入和t-SNE。

流形學習的最先探索之一是Isomap算法,即等距映射的縮寫。Isomap尋求一種低維表示,以保持點之間的「距離」。距離是曲面距離的推廣。所以,Isomap不是用畢達哥拉斯定理導出的距離公式來測量純歐幾里德距離,而是沿着發現的流形優化距離。

當在MNIST數據集上訓練時,Isomap的性能優於PCA,顯示了不一樣類型的數字的正確分割。某些數字組之間的接近和距離揭示了數據的結構。例如,距離較近的「5」和「3」(在左下角)看起來確實很類似。

下面是Isomap在Python中的實現。因爲MNIST是一個很是大的數據集,因此你可能只想在前100個訓練示例中使用.fit_transform(X[:100])訓練Isomap。

from sklearn.datasets import load_digits #mnist
from sklearn.manifold import Isomap
X, _ = load_digits(return_X_y=True) #加載數據

embedding = Isomap(n_components=2) #結果數據有2個維度,即「成分」
X_transformed = embedding.fit_transform(X) #擬合模型及變換

局部線性嵌入使用各類切線線性面片(如上圖所示)來建模流形。它能夠被認爲是對每一個鄰域進行局部PCA,生成一個線性超平面,而後全局比較結果以找到最佳的非線性嵌入。LLE的目標是以扭曲的方式「展開」或「解包」數據的結構,所以LLE一般會在中心具備更高密度。

注意,LLE在MNIST數據集上的性能相對較差。這極可能是由於MNIST數據集由多個流形組成,而LLE被設計用於處理更簡單的數據集(如Swiss Roll)。它將一個函數表示爲幾個小的線性函數的策略可能沒法很好地處理大型複雜的數據集結構。

假設數據集(X)已經加載,LLE的實現以下所示。

from sklearn.manifold import LocallyLinearEmbedding
embedding = LocallyLinearEmbedding(n_components=2) #2維
X_transformed = embedding.fit_transform(X)

t-SNE是高維可視化中最流行的選擇之一,是t分佈隨機鄰居嵌入的表明。該算法將原始空間中的關係轉化爲t分佈,即小樣本和相對未知標準差的正態分佈。這使得t-SNE對流形學習中常見的局部結構很是敏感。因爲它具備許多優勢,所以被認爲是一種可行的可視化方法。優勢以下:

  • 它可以在多個尺度上揭示數據的結構。

  • 它揭示了存在於多個流形和簇中的數據

  • 在中心匯集點的趨勢較小。

Isomap和LLE是展開單個、連續、低維流形的最佳工具。另外一方面,t-SNE關注數據的局部結構,試圖彙集局部,而不是試圖「展開」。這使得t-SNE在用多個流形去擬合高維數據方面佔據了上風。它使用梯度降低法訓練,並試圖最小化分佈之間的熵。從這個意義上講,它幾乎就像一個簡化的、無監督的神經網絡。

t-SNE很是強大,Isomap和LLE嘗試展開數據,而t-SNE嘗試彙集數據。對於像MNIST這樣的高維多流形數據集,旋轉和移位致使非線性關係,t-SNE的性能甚至比LDA更好,LDA還須要標籤信息。

然而,t-SNE也有一些缺點:

  • t-SNE在計算上很是昂貴(比較上面圖表中的運行時)。對於一百萬個樣本數據集,它可能須要幾個小時,而PCA能夠在幾秒鐘或幾分鐘內完成。

  • 該算法利用隨機性(隨機性)選取種子,若是種子放置不當,會增長算法的運行時間,下降性能。

  • 全局結構沒有被顯式地保留(即更強調聚類而不是展現全局結構)。然而,在sklearn的實現中,這個問題能夠經過使用PCA初始化點來解決,PCA是專門爲保持全局結構而構建的。

t-SNE也可在sklearn中實現:

from sklearn.manifold import TSNE
embedding = TSNE(n_components=2) ##2維
X_transformed = embedding.fit_transform(X)

t-SNE的做者Laurens van der Maaten說,當t-SNE結果很差時,應考慮如下幾點:

做爲健全性檢查,嘗試對數據運行PCA以將其減小到二維。若是這也給出了糟糕的結果,那麼也許你的數據在一開始就沒有很好的結構。若是PCA很好,但t-SNE不行,我很確定你作錯了什麼。

他爲何這麼說?流形學習不是PCA的另外一種變體,而是一種泛化。在PCA中表現良好的東西幾乎能夠保證在t-SNE或其餘流形學習技術中表現良好,由於它們是泛化。

就像一個蘋果也是一個水果(泛化)的對象同樣,若是某個事物不能產生與它的泛化類似的結果,那麼一般就是錯誤的。另外一方面,若是這兩種方法都失敗了,數據極可能很難建模。

關鍵點

  • 因爲PCA是線性的,因此不能對非線性關係進行建模。

  • 非線性關係經常出如今數據集中,由於像光照或傾斜能夠在歐幾里德空間中非線性移動同一類的數據點。

  • 流形學習試圖將PCA推廣到各類數據集結構上進行降維,其主要思想是流形或連續曲面的建模應保持局部距離優先於全局距離。

  • Isomap試圖保持流形曲面測量的距離,即不是在歐幾里德空間的距離。

  • 局部線性嵌入能夠看做是將流形表示爲若干個線性塊,其中PCA在其中執行。

  • t-SNE採用了更多的「聚類」方法,而不是「展開」方法,但仍然像其餘流形學習算法同樣,經過使用機率和t分佈來優先保持局部距離。

附加技術閱讀

原文連接:https://towardsdatascience.com/manifold-learning-t-sne-lle-isomap-made-easy-42cfd61f5183

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/

相關文章
相關標籤/搜索