How to Use UMAP
How to Use UMAP
- 1.介紹
- 2. 企鵝數據
- 參考
1.介紹
??UMAP 是一種通用的流形學習和降維算法。 它旨在與 scikit-learn 兼容,使用相同的 API 并能夠添加到 sklearn 管道中。 如果您已經熟悉 sklearn,您應該能夠使用 UMAP 作為 t-SNE 和其他降維類的替代品。 如果您對 sklearn 不太熟悉,本教程將引導您了解使用 UMAP 轉換和可視化數據的基礎知識。
??首先,我們需要導入一堆有用的工具。 我們顯然需要 numpy,但我們將使用 sklearn 中可用的一些數據集以及 train_test_split 函數來劃分數據。 最后,我們需要一些繪圖工具(matplotlib 和 seaborn)來幫助我們可視化 UMAP 的結果,而 pandas 可以讓這更容易一些。
2. 企鵝數據
??下一步是獲取一些可以使用的數據。 為了讓我們更容易理解,我們將從企鵝數據集開始。 它并不能很好地代表真實數據的樣子,但它的點數和特征數都很小,可以讓我們了解降維的作用。
penguins = pd.read_csv("https://github.com/allisonhorst/palmerpenguins/raw/5b5891f01b52ae26ad8cb9755ec93672f49328a8/data/penguins_size.csv") print(penguins.head())??上面代碼有時會報錯如下:
??可以將上述代碼換成如下代碼讀取企鵝數據集:
??由于這是出于演示目的,我們將去掉數據中的 NA; 在現實世界中,人們希望更加注意正確處理丟失的數據。
??有關數據集本身的更多詳細信息,請參閱 github 存儲庫。 它包括三種企鵝的喙(culmen)和鰭狀肢和重量的測量值,以及有關企鵝的一些其他元數據。 我們總共測量了 334 只不同的企鵝。 可視化這些數據有點棘手,因為我們不能輕松地繪制 4 維。 幸運的是,四個并不是一個很大的數字,所以我們可以通過一個成對的特征散點圖矩陣來了解發生了什么。 Seaborn 讓這一切變得簡單。
??通過給出數據的所有 2D 視圖,這讓我們對數據的外觀有了一些了解。 四個維度足夠低,我們可以(某種程度上)重建全維度數據在我們腦海中的樣子。 現在我們有點知道我們在看什么,問題是像 UMAP 這樣的降維技術可以為我們做什么? 通過以盡可能多地保留數據結構的方式減少維度,我們可以獲得數據的可視化表示,使我們能夠“看到”數據及其結構,并開始對數據本身有一些直覺。
??要使用 UMAP 完成這項任務,我們首先需要構造一個 UMAP 對象來為我們完成這項工作。 這就像實例化類一樣簡單。 因此,讓我們導入 umap 庫并執行此操作。
??首先在運行代碼環境中安裝umap:
??導入并實例化umap:
import umap as umap reducer = umap.UMAP()??在我們可以對數據進行任何工作之前,將其清理一下會有所幫助。 我們不需要 NA,我們只需要測量列,并且由于測量是在完全不同的尺度上,因此將每個特征轉換為 z 分數(與平均值的標準偏差數)以進行可比性會很有幫助。
penguin_data = penguins[["culmen_length_mm","culmen_depth_mm","flipper_length_mm","body_mass_g",] ].values scaled_penguin_data = StandardScaler().fit_transform(penguin_data)??現在我們需要訓練我們的減速器,讓它了解流形。 對于這個 UMAP 遵循 sklearn API 并有一個方法 fit ,我們傳遞希望模型學習的數據。我們將希望減少我們使用的數據表示,所以調用 fit_transform 方法(首先調用 fit 然后將轉換后的數據作為 numpy 數組返回的)。
embedding = reducer.fit_transform(scaled_penguin_data) print(embedding.shape) # (334, 2)??結果是一個包含 334 個樣本的數組,但只有兩個特征列(而不是我們開始時的四個)。 這是因為默認情況下,UMAP 會縮減為 2D。 數組的每一行都是對應企鵝的二維表示。 因此,我們可以將嵌入繪制為標準散點圖和目標數組的顏色(因為它適用于與原始數據順序相同的轉換數據)。
plt.scatter(embedding[:, 0],embedding[:, 1],c=[sns.color_palette()[x] for x in penguins.species_short.map({"Adelie":0, "Chinstrap":1, "Gentoo":2})]) plt.gca().set_aspect('equal', 'datalim') # 用于設置軸縮放的方面,即y-unit與x-unit的比率 plt.title('UMAP projection of the Penguin dataset', fontsize=24) plt.show()??這在捕獲數據結構方面很有用,從散點圖矩陣可以看出,這是相對準確的。 當然,我們至少從散點圖矩陣中學到了這么多——我們可以這樣做,因為我們只有四個不同的維度要分析。 如果我們有更多維度的數據,散點圖矩陣很快就會變得難以繪制,并且更難以解釋。
參考
[1] UMAP官方文檔
總結
以上是生活随笔為你收集整理的How to Use UMAP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时区介绍
- 下一篇: 201771010112罗松《面向对象程