日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

How to Use UMAP

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 可以讓這更容易一些。

import numpy as np from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import seaborn as sns import pandas as pd %matplotlib inline # Notebook需要,pycharm不需要 sns.set(style='white', context='notebook', rc={'figure.figsize':(14,10)})

2. 企鵝數據

??下一步是獲取一些可以使用的數據。 為了讓我們更容易理解,我們將從企鵝數據集開始。 它并不能很好地代表真實數據的樣子,但它的點數和特征數都很小,可以讓我們了解降維的作用。

penguins = pd.read_csv("https://github.com/allisonhorst/palmerpenguins/raw/5b5891f01b52ae26ad8cb9755ec93672f49328a8/data/penguins_size.csv") print(penguins.head())

??上面代碼有時會報錯如下:

??可以將上述代碼換成如下代碼讀取企鵝數據集:

import pandas as pd import io import requests url="https://github.com/allisonhorst/palmerpenguins/raw/5b5891f01b52ae26ad8cb9755ec93672f49328a8/data/penguins_size.csv" s=requests.get(url).content penguins=pd.read_csv(io.StringIO(s.decode('utf-8'))) print(penguins.head())


??由于這是出于演示目的,我們將去掉數據中的 NA; 在現實世界中,人們希望更加注意正確處理丟失的數據。

penguins=penguins.drop('Unnamed: 0',axis=1) penguins = penguins.dropna() print(penguins.species_short.value_counts())


??有關數據集本身的更多詳細信息,請參閱 github 存儲庫。 它包括三種企鵝的喙(culmen)和鰭狀肢和重量的測量值,以及有關企鵝的一些其他元數據。 我們總共測量了 334 只不同的企鵝。 可視化這些數據有點棘手,因為我們不能輕松地繪制 4 維。 幸運的是,四個并不是一個很大的數字,所以我們可以通過一個成對的特征散點圖矩陣來了解發生了什么。 Seaborn 讓這一切變得簡單。

#hue:針對某一字段進行分類 sns.pairplot(penguins, hue='species_short') plt.show()

??通過給出數據的所有 2D 視圖,這讓我們對數據的外觀有了一些了解。 四個維度足夠低,我們可以(某種程度上)重建全維度數據在我們腦海中的樣子。 現在我們有點知道我們在看什么,問題是像 UMAP 這樣的降維技術可以為我們做什么? 通過以盡可能多地保留數據結構的方式減少維度,我們可以獲得數據的可視化表示,使我們能夠“看到”數據及其結構,并開始對數據本身有一些直覺。
??要使用 UMAP 完成這項任務,我們首先需要構造一個 UMAP 對象來為我們完成這項工作。 這就像實例化類一樣簡單。 因此,讓我們導入 umap 庫并執行此操作。
??首先在運行代碼環境中安裝umap:

pip install umap-learn -i https://mirrors.ustc.edu.cn/pypi/web/simple

??導入并實例化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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。