中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Isomap在Python中怎么實現

發布時間:2021-12-27 13:48:39 來源:億速云 閱讀:418 作者:iii 欄目:大數據

這篇文章主要講解了“Isomap在Python中怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Isomap在Python中怎么實現”吧!

主成分分析是一種強大的方法,但它往往失敗,因為它假設數據可以線性建模。PCA將新的特征表示為現有特征的線性組合,將每個特征乘以一個系數。

Isomap在Python中怎么實現

為了解決主成分分析的局限性,人們通過對具有不同結構的數據進行應用而產生了各種各樣的技術。然而,流形學習尋求一種可以推廣到所有數據結構的方法。

不同的數據結構指的是數據中不同的屬性。例如,它可能是線性可分的,也可能是非常稀疏的。數據中的關系可以是相切的、平行的、包絡的或正交的。PCA在非常特定的數據結構子集上工作得很好,因為它是在線性假設下工作的。

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

Isomap在Python中怎么實現

這種數據經常出現在現實世界的數據集中。除此之外,當PCA呈現傾斜分布、極值時,PCA可能會變得很糟糕(參見非線性PCA以獲得解決方案)。我們需要一種可推廣的降維方法。

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

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

PCA試圖創建幾個線性超平面來表示維度,就像多元回歸構造作為數據的估計,流形學習嘗試學習流形,流形是多維空間中光滑的曲面。如下圖所示,這些通常是通過對圖像進行細微的變換而形成的。

Isomap在Python中怎么實現

然后,local linear patches可以提取與流形相切的部分。這些patches(補丁)通常有足夠的數量,因此可以準確地表示流形。

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

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

  • 數據中存在著可以通過流形建模的非線性關系—曲面跨越多個維度,平滑,且不太“搖擺”(太復雜)。

  • 保持數據的多維形狀并不重要。與其用特定的方向來“展開”或“投影”數據(如PCA)來保持數據的一般形狀,不如執行更復雜的操作,如展開一個卷曲的條帶或將球體從內向外翻轉。

  • 流形建模的最佳方法是將曲面視為由幾個鄰域組成的曲面。如果每個數據點都設法保持與所有其他點之間的距離,而只保留與它相鄰的點之間的距離,則可以在數據中保持幾何關系。

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

Isomap在Python中怎么實現

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

Isomap在Python中怎么實現

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

Isomap在Python中怎么實現

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

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

Isomap在Python中怎么實現

當在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通常會在中心具有更高密度。

Isomap在Python中怎么實現

注意,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還需要標簽信息。

Isomap在Python中怎么實現

然而,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分布來優先保持局部距離。

感謝各位的閱讀,以上就是“Isomap在Python中怎么實現”的內容了,經過本文的學習后,相信大家對Isomap在Python中怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北辰区| 兴化市| 财经| 平阴县| 厦门市| 五莲县| 惠安县| 山东| 绥阳县| 潜江市| 华池县| 孟州市| 亚东县| 绥芬河市| 曲阳县| 黄石市| 甘肃省| 宜昌市| 衡南县| 延边| 建昌县| 湘乡市| 沐川县| 绵竹市| 隆昌县| 汝州市| 仁化县| 鄢陵县| 临湘市| 榆中县| 乌拉特前旗| 垦利县| 雅安市| 灵寿县| 金秀| 外汇| 静乐县| 贵溪市| 孟州市| 剑阁县| 左云县|