sklearn與機器學習系列專題之降維(五)一文弄懂Isomap特徵篩選&降維

2021-03-02 碼點聯盟

等度量映射(Isometric Feature Mapping,Isomap)是流形學習的一種,用於非線性數據降維,是一種無監督算法。

Isomap所採用的核心算法和MDS是一致的,區別在於原始空間中的距離矩陣的計算上。很多數據是非線性結構,不適合直接採用PCA算法和MDS算法。在非線性數據結構中,流形上距離很遠(測地距離,即在曲面上(不允許離開曲面)從A點走到B點的最短距離)的兩個數據點,在高維空間中的距離(歐式距離)可能非常近。

Isomap最主要的優點就是使用「測地距離」,而不是使用原始的歐幾裡得距離,這樣可以更好得控制數據信息的流失,能夠在低維空間中更加全面地將高維空間的數據表現出來,如下圖經典的「瑞士卷」模型,通過從點1到點9的k近鄰層層遞進方法,得到紅色曲線,即為兩點之間的測地距離。

(1)首先建立鄰近圖:對於每個樣本點,計算它的k近鄰,利用流形在局部上的歐式空間同胚性質,基於歐式距離,找出每個點在低維流形上的近鄰點,建立近鄰連接圖;(2)計算兩個點之間的測地距離:調用最短路徑算法計算任意兩樣本點之間的距離,計算近鄰圖上任意兩點之間的最短路徑,作為兩點之間的距離;(3)低維映射:得到兩點之間的測地距離後,通過MDS算法獲得樣本點在地位空間中的坐標。(1)k近鄰圖:指定近鄰點個數,例如指定距離最近的k個點為近鄰點;(2)ε近鄰圖:指定近鄰點閾值ε,距離小於ε的點被認為是近鄰點。

在建立近鄰圖時,應當注意控制近鄰圖的範圍,否則容易出現「短路」或者「斷路」問題:

(1)「短路」問題:近鄰範圍制定過大,距離很遠的點也被誤認為是近鄰;

(2)「斷路」問題:近鄰範圍制定過小,本應當相鄰的點被認為斷開的。

Isomap算法針對MDS算法,解決了MDS基於歐式距離映射非線性結構高維數據的局限性。

然而,對於新樣本,難以將其映射到低維空間。理論上可以將新樣本添加到數據集中,重新調用Isomap算法,但這方案計算量太大。一般的解決方法是,訓練一個回歸學習器對新樣本的低維空間進行預測。

以鳶尾花數據集為例,實現Isomap降維算法。原始數據集包含三種不同的分類,共150條數據,每個數據有四個特徵。
#(1)導入必要程序庫import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets,decomposition,manifold
#(2)加載數據def load_data(): iris=datasets.load_iris() return iris.data,iris.target
#(3)使用Isomapdef test_Isomap(*data): X,y=data for n in [4,3,2,1]: isomap=manifold.Isomap(n_components=n) isomap.fit(X) print('reconstruction_error(n_components=%d):%s'%(n, isomap.reconstruction_error()))X,y=load_data()test_Isomap(X,y)
#(4)降維後的樣本分布圖def plot_Isomap(*data): X,y=data Ks=[1,5,25,y.size-1] fig=plt.figure() for i,k in enumerate(Ks): isomap=manifold.Isomap(n_components=2,n_neighbors=k) X_r=isomap.fit_transform(X) ax=fig.add_subplot(2,2,i+1) colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5), (0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),) for label,color in zip(np.unique(y),colors): position=y==label ax.scatter(X_r[position,0],X_r[position,1],label='target=%d'%label,color=color) ax.set_xlabel('X[0]') ax.set_ylabel('X[1]') ax.legend(loc='best') ax.set_title("k=%d"%k) plt.suptitle('Isomap') plt.tight_layout(pad=2) plt.show()plot_Isomap(X,y)
#(5)將原始數據壓縮到一維def plot_Isomap_k_d1(*data): X,y=data Ks=[1,5,25,y.size-1] fig=plt.figure() for i,k in enumerate(Ks): isomap=manifold.Isomap(n_components=2,n_neighbors=k) X_r=isomap.fit_transform(X) ax=fig.add_subplot(2,2,i+1) colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5), (0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),) for label,color in zip(np.unique(y),colors): position=y==label ax.scatter(X_r[position],np.zeros_like(X_r[position]),label='target=%d'%label,color=color) ax.set_xlabel('X[0]') ax.set_ylabel('Y') ax.legend(loc='best') ax.set_title("k=%d"%k) plt.suptitle('Isomap') plt.tight_layout(pad=2) plt.show()plot_Isomap_k_d1(X,y)

代碼運行如下:

reconstruction_error(n_components=4):1.0094929893039135
reconstruction_error(n_components=3):1.0181252006659833
reconstruction_error(n_components=2):1.0275229261937564

reconstruction_error(n_components=1):1.0715321251523136

降維後的樣本分布如下:

將原始數據的特徵直接壓縮到一維效果如下:

sklearn與機器學習系列專題之降維(六)一文弄懂LLE特徵篩選&降維
歡迎關注公眾號「碼點聯盟」,不定期分享機器學習、深度學習乾貨,及各種資料大禮包!另外,這是一個由一線網際網路大廠算法工程師及雙985研究生創建的公眾號,後續會經常分享各類實用機器學習算法技術文章,歡迎交流討論!我們也長期承接各類機器學習、圖像處理、Halcon等算法項目,有「願意接私貨的技術員」 或 「有算法需求的個人或者公司項目」 可以通過公眾號聯繫我們!

相關焦點

  • sklearn與機器學習系列專題之降維(六)一文弄懂LLE特徵篩選&降維
    局部線性嵌入算法(Locally Linear Embedding,LLE)和上一篇專題Isomap都屬於流形學習方法。
  • sklearn與機器學習系列專題之降維(一)一文弄懂PCA特徵篩選&降維
    緩解災難的一個重要途徑就是降維。本篇圖文主要以PCA為例,講解sklearn實現降維。如下圖所示,我們用兩個特徵——一個是attack、一個是defense來描述樣本。作兩條垂直的參考線,方差相差很大。在方差較大的方向上,所包含的信息就較多。降維要儘可能保持原始數據的信息,故要取使方差最大的一個維度(本例中從二維降到一維)。
  • sklearn與機器學習系列專題之降維(七)一文弄懂t-SNE特徵篩選&降維
    在降維繫列的倒數第N篇(N≈3?
  • sklearn與機器學習系列專題之降維(二)一文弄懂LDA特徵篩選&降維
    這是機器學習中最為常用的降維方法,能降低算法的計算開銷,使得數據集更容易處理,且完全無參數的限制。但是,如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特徵,卻很難按照預想的方法對處理過程進行幹預,可能達不到預期的效果,在非高斯分布的情況下,PCA方法得出的主元可能也並不是最優的。
  • 機器學習 | 降維算法Part2
    目前,機器學習在疾病的鑑別診斷,藥物的生產研究,臨床試驗研究,放射影像學等醫學領域已有十分廣泛的應用。今天推出機器學習系列筆記第8期,本期分享內容為:機器學習之降維算法Part2。(筆者使用的是Windows系統)降維算法2.3 PCA中的SVD 2.3.1 PCA中的SVD哪裡來?
  • 機器學習 | 降維算法Part1
    目前,機器學習在疾病的鑑別診斷,藥物的生產研究,臨床試驗研究,放射影像學等醫學領域已有十分廣泛的應用。今天推出機器學習系列筆記第7期,本期分享內容為:機器學習之降維算法Part1。(筆者使用的是Windows系統)降維算法1 概述1.1 什麼叫「維度」?
  • 機器學習之數據降維總結+代碼示例復現(線性代數/矩陣論/主成分分析PCA/核主成分分析KPCA/奇異值分解SVD)
    降維的主要方法之投影法    在大多數實際問題中,訓練實例並不是均勻地分布在所有的維度上。許多的特徵幾乎是恆定不變的,而其他特徵則是高度相關的。因此導致所有訓練實例都位於(或者接近於)高維空間的低維子空間中。
  • 機器學習之特徵工程Feature-Engineering及sklearn代碼實現
    那麼做好特徵工程,就非常有利於我們得到一個「更好的」模型;在機器學習的整個過程中特徵工程佔用了70~80%的時間,其完成質量也直接影響模型最終的輸出結果。就特徵工程的流程、類型、工具、數據預處理、特徵選擇、降維在學習之餘,做簡單的總結和介紹、附可執行的python代碼。
  • tsne-高維數據的降維與可視化
    做機器學習的時候,特徵的好壞是很重要的評價指標,但是有時候我們不知道特徵到底好不好,尤其是一些高維特徵,沒有辦法可視化出來更不知道好壞,如果我們想可視化分析的話,通常我們可選的操作是進行pca降維,至少降到2-3維才能用圖的形式畫出來。
  • 「Workshop」第十一期:降維
    降維的簡介在現實生活中,大多數數據集都有高維度的變量或特徵,而算法在計算這些高冗餘特徵時,需要大量的時間,為了降低計算成本,需要對特徵進行無損歸約,數學上稱為降維。維度災難高維情形下,數據樣本稀疏,距離計算困難(許多學習方法都涉及距離計算)等問題,會導致數據的過擬合。
  • 為何推薦sklearn做單機特徵工程?【下】
    Embedded:嵌入法,先使用某些機器學習的算法和模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。類似於Filter方法,但是是通過訓練來確定特徵的優劣。我們使用sklearn中的feature_selection庫來進行特徵選擇。
  • 新手福音,機器學習工具Sklearn 中文文檔 0.19版(最新)
    AI算法工程  公眾號:datayxScikit-learn(sklearn)是機器學習中常用的第三方模塊,對常用的機器學習方法進行了封裝,包括回歸(Regression)、降維(Dimensionality
  • 【翻譯】Sklearn 與 TensorFlow 機器學習實用指南 —— 第8章 降維(下)
    由於增量 PCA 類在任何時間內僅使用數組的一小部分,因此內存使用量仍受到控制。由於核技巧,這在數學上等同於使用特徵映射φ將訓練集映射到無限維特徵空間(右下),然後使用線性 PCA 將變換的訓練集投影到 2D。請注意,如果我們可以在縮減空間中對給定實例實現反向線性 PCA 步驟,則重構點將位於特徵空間中,而不是位於原始空間中(例如,如圖中由x表示的那樣)。由於特徵空間是無限維的,我們不能找出重建點,因此我們無法計算真實的重建誤差。
  • 機器學習最主流的算法庫sklearn
    sklearn是機器學習研究人員的入門必選庫,也是機器學習算法工程師繞不過去的算法庫。本文主要介紹sklearn的主要功能、優缺點等。最後,以一個簡單的例子來告訴大家如何使用sklearn完成機器學習算法的研究和實踐。」scikit-learn是什麼?
  • 獨家 | 一文讀懂特徵工程
    對於所有機器學習模型,這些原始數據必須以特徵的形式加入到機器學習模型當中,並進行一定的提取和篩選工作。所謂特徵提取,就是逐條將原始數據轉化為特徵向量的形式,此過程涉及數據特徵的量化表示;而特徵篩選是在已提取特徵的基礎上,進一步對高維度和已量化的特徵向量進行選擇,獲取對指定任務更有效果的特徵組合以提升模型性能。在機器學習和模式識別中,特徵是在觀測現象中的一種獨立、可測量的屬性。
  • 通俗理解一個常用的降維算法(t-SNE)
    當我們想對高維數據集進行分類,但又不清楚這個數據集有沒有很好的可分性(同類之間間隔小、異類之間間隔大)時,可以通過降維算法將數據投影到二維或三維空間中。很久以前,就有人提出一種降維算法,主成分分析(PCA) 降維法,中間其他的降維算法陸續出現,比如 多維縮放(MDS),線性判別分析(LDA),等度量映射(Isomap)。
  • 基於 Python 語言的機器學習工具Sklearn
    01、Sklearn簡介sklearn(scikit-learn)是Python重要的學習庫,它封裝了機器學習中常用的算法,包括監督學習、非監督學習等,包括分類、回歸、降維和聚類四大機器學習算法,還包含特徵提取、數據處理和模型評估三大模塊。
  • 四大機器學習降維算法:PCA、LDA、LLE、Laplacian Eigenmaps
    機器學習領域中所謂的降維就是指採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x->y,其中x是原始數據點的表達,目前最多使用向量表達形式。 y是數據點映射後的低維向量表達,通常y的維度小於x的維度(當然提高維度也是可以的)。f可能是顯式的或隱式的、線性的或非線性的。
  • 超級乾貨 :一文讀懂特徵工程
    對於所有機器學習模型,這些原始數據必須以特徵的形式加入到機器學習模型當中,並進行一定的提取和篩選工作。所謂特徵提取,就是逐條將原始數據轉化為特徵向量的形式,此過程涉及數據特徵的量化表示;而特徵篩選是在已提取特徵的基礎上,進一步對高維度和已量化的特徵向量進行選擇,獲取對指定任務更有效果的特徵組合以提升模型性能。在機器學習和模式識別中,特徵是在觀測現象中的一種獨立、可測量的屬性。
  • 菜鳥學機器學習,Sklearn庫主要模塊功能簡介
    sklearn,全稱scikit-learn,是python中的機器學習庫,建立在numpy、scipy、matplotlib等數據科學包的基礎之上,涵蓋了機器學習中的樣例數據、數據預處理、模型驗證、特徵選擇、分類、回歸、聚類、降維等幾乎所有環節,功能十分強大,目前sklearn版本是0.23。