如何使用UMAP分析100維數(shù)據(jù),驚艷降維另人嘆為觀止!
在公眾號(hào)「python風(fēng)控模型」里回復(fù)關(guān)鍵字:學(xué)習(xí)資料?
QQ學(xué)習(xí)群:1026993837 領(lǐng)學(xué)習(xí)資料? ? ? ? ? ??

介紹
無(wú)論機(jī)器學(xué)習(xí)模型多么強(qiáng)大,它們都無(wú)法完全擊敗您在那些“啊哈!”中獲得的感覺(jué)。通過(guò)豐富的視覺(jué)效果探索數(shù)據(jù)的時(shí)刻。但是,在你說(shuō)“這真的變老了”之前,你可以創(chuàng)建很多直方圖、散點(diǎn)圖、熱圖。
在那些時(shí)刻,你需要一些東西來(lái)提醒你數(shù)據(jù)是多么的驚人和迷人。您需要從 FlowingData 或相關(guān)子版塊中的杰作視覺(jué)效果中獲得靈感,但您不必走那么遠(yuǎn)。最近,我有幸遇到了 UMAP——一個(gè) Python 包,它以驚人的美麗方式可視化和聚類高維數(shù)據(jù)。這正是我需要記住的,為什么我兩年前開(kāi)始學(xué)習(xí)數(shù)據(jù)科學(xué)。
今天,我們將學(xué)習(xí)如何使用 Uniform Manifold Approximation & Projection (UMAP) 包通過(guò)如下可視化將多維數(shù)據(jù)集投影到 2D 來(lái)分析多維數(shù)據(jù)集:
什么是UMAP?
UMAP 是一個(gè)降維算法和強(qiáng)大的數(shù)據(jù)分析工具。
它在速度方面類似于 PCA(主成分分析),并且類似于 tSNE 來(lái)降低維度,同時(shí)盡可能多地保留數(shù)據(jù)集的信息。在 2018 年引入 UMAP 算法之前,PCA 和 tSNE 存在兩個(gè)最顯著的缺陷:
PCA 速度非??欤鷥r(jià)是在縮減后丟失了數(shù)據(jù)的更精細(xì)細(xì)節(jié)
盡管 tSNE 保留了數(shù)據(jù)的底層結(jié)構(gòu),但它的速度非常慢。
稍后我們將更多地討論這些差異?,F(xiàn)在,是第一次體驗(yàn) UMAP 的時(shí)候了,我們將立即從一個(gè)具有挑戰(zhàn)性的數(shù)據(jù)集開(kāi)始:

Kaggle TPS 9 月數(shù)據(jù)集包含約 100 萬(wàn)行和約 120 個(gè)具有二進(jìn)制目標(biāo)的特征。它們都是數(shù)字的,我們對(duì)在這個(gè)數(shù)據(jù)集上執(zhí)行正確的 EDA 非常無(wú)能為力。我們的選項(xiàng)僅限于打印匯總統(tǒng)計(jì)數(shù)據(jù)和繪制每個(gè)特征的直方圖。
讓我們看看UMAP能為我們做什么。在使用它之前,我們將對(duì)數(shù)據(jù)集進(jìn)行采樣以避免過(guò)度繪制并填充缺失值:
在這里,目標(biāo)代表客戶是否要求保險(xiǎn)。
安裝和導(dǎo)入 UMAP后,我們初始化流形算法并將其擬合到X
,y
在熟悉的 Sklearnfit/transform
模式中:
默認(rèn)情況下,UMAP 將數(shù)據(jù)投影到兩個(gè)分量 (2D) 中。讓我們創(chuàng)建一個(gè)由目標(biāo)類著色的散點(diǎn)圖:

盡管看起來(lái)很有趣,但情節(jié)并沒(méi)有顯示出任何清晰的模式。這是因?yàn)槲覀冊(cè)跀M合 UMAP 之前沒(méi)有對(duì)特征進(jìn)行縮放。該算法使用距離度量對(duì)相似的數(shù)據(jù)點(diǎn)進(jìn)行分組,并且具有更高尺度的特征會(huì)影響此類計(jì)算。
因此,我們將選擇 Quantile Transformer 根據(jù)其分位數(shù)和中位數(shù)對(duì)特征進(jìn)行縮放。這種縮放方法更適合數(shù)據(jù)集,因?yàn)樗S多傾斜和雙峰特征:
plt.scatter(X_reduced_2[:, 0], X_reduced_2[:, 1], c=y, s=0.5);

現(xiàn)在,我們正在談?wù)?!UMAP 成功地捕捉到了目標(biāo)類之間隱藏的區(qū)別。我們還可以看到一些異常值(黃色斑點(diǎn)周圍的點(diǎn))。畢竟數(shù)據(jù)集并沒(méi)有那么具有挑戰(zhàn)性。
但是,這個(gè)情節(jié)與我向您展示的內(nèi)容完全不同。它仍然被過(guò)度繪制以查看每個(gè)集群內(nèi)的結(jié)構(gòu)模式。為了更上一層樓,我們將使用具有更多功能的默認(rèn) UMAP 可視化包。我們將需要一個(gè)更好的數(shù)據(jù)集。
使用 UMAP 實(shí)現(xiàn)更好的可視化
本節(jié)將分析 Kaggle TPS May 的競(jìng)爭(zhēng)數(shù)據(jù),該數(shù)據(jù)根據(jù)約 75 個(gè)數(shù)字質(zhì)量對(duì)約 200k 電子商務(wù)列表進(jìn)行分類。讓我們導(dǎo)入它并快速瀏覽一下:

目標(biāo)包含九個(gè)類。
和以前一樣,我們將縮放所有特征,但這次使用簡(jiǎn)單的對(duì)數(shù)轉(zhuǎn)換。然后,我們擬合 UMAP 流形:
擬合完成后,我們將導(dǎo)入umap.plot
包(單獨(dú)安裝)并繪制點(diǎn)云:

它不像來(lái)自太空的星云嗎?我們可以清楚地看到 8 級(jí)在空間中占主導(dǎo)地位,并聚集在中心周圍。第 6 類也明顯區(qū)別于其他類。我們?cè)诘?8 類周圍看到半圈混合數(shù)據(jù)點(diǎn)。關(guān)于單例數(shù)據(jù)點(diǎn),它們可能被歸類為異常值。
上面關(guān)于可視化的說(shuō)明——我們只是將擬合的流形(不是轉(zhuǎn)換的數(shù)據(jù)!)傳遞給
points
函數(shù)并指定顏色編碼的標(biāo)簽。我也選擇了fire
作為一個(gè)黑暗的主題。
您還可以創(chuàng)建連接圖umap.plot.connectivity
用于診斷目的并更好地理解歧管結(jié)構(gòu)。請(qǐng)注意,創(chuàng)建這些圖非常耗時(shí)且需要大量計(jì)算/內(nèi)存。


UMAP最重要的參數(shù)
底層縮減算法有許多參數(shù)可以顯著影響流形,從而影響視覺(jué)效果。最重要的四個(gè)是:
n_components
n_neighbors
min_dist
metric
正如您可能已經(jīng)猜到的那樣,n_components
控制投影后的維數(shù)。為便于可視化,默認(rèn)值為 2。但是,對(duì)于具有超過(guò) 100 個(gè)特征的數(shù)據(jù)集,2D 可能不足以完全保留數(shù)據(jù)的底層拓?fù)浣Y(jié)構(gòu)。我建議以 5 步嘗試 2-20 之間的值,并評(píng)估不同的基線模型以查看準(zhǔn)確性的變化。
接下來(lái),我們有n_neighbors
. 它控制 UMAP 在構(gòu)建流形時(shí)為每個(gè)樣本查看的本地鄰域的區(qū)域。較小的值將關(guān)注點(diǎn)縮小到局部結(jié)構(gòu),考慮到特性和小模式,可能會(huì)失去全局。
較高的值可n_neighbors
提供更大的靈活性,并允許 UMAP 專注于相應(yīng)維度中數(shù)據(jù)的更廣泛“視圖”。當(dāng)然,這是以丟失結(jié)構(gòu)的細(xì)節(jié)為代價(jià)的。此參數(shù)的默認(rèn)值為 15。
另一個(gè)關(guān)鍵參數(shù)是min_dist
控制數(shù)據(jù)點(diǎn)之間的字面距離。您可以調(diào)整默認(rèn)值 0.1 以控制不同點(diǎn)云的緊密度。較低的值將導(dǎo)致嵌入更密集,讓您更輕松地查看單個(gè)集群。這在聚類期間可能很有用。相比之下,接近 1 的值會(huì)給點(diǎn)更多的喘息空間,讓您能夠看到更廣泛的拓?fù)浣Y(jié)構(gòu)。

metric
表示計(jì)算點(diǎn)之間距離的公式。默認(rèn)值為euclidean
,但您可以在許多其他選項(xiàng)中進(jìn)行選擇,manhattan
包括minkowski
和chebyshev
。
使用 UMAP 的最佳實(shí)踐
使用 UMAP 時(shí)首先考慮的是 RAM 消耗。在幕后,UMAP 會(huì)消耗大量?jī)?nèi)存,尤其是在擬合和創(chuàng)建連接圖等圖表的過(guò)程中。我建議在至少有 16GB RAM 的機(jī)器上運(yùn)行 UMAP。
例如,即使是繪圖部分的 200k 行數(shù)據(jù)集,在創(chuàng)建連接圖時(shí)也會(huì)消耗約 18GB 的 RAM。文檔建議設(shè)置low_memory
為 True 作為可能的解決方法。此外,我建議通過(guò)使用 NumPy 將每一列轉(zhuǎn)換為可能的最小子類型來(lái)減少數(shù)據(jù)集的內(nèi)存使用量。我在上一篇文章中詳細(xì)討論了處理內(nèi)存不足問(wèn)題:
此外,不要忘記轉(zhuǎn)換/縮放數(shù)字特征,因?yàn)樗鼈兡J(rèn)具有不同的比例。我建議將 QuantileTransformer 用于雙峰、三峰等瘋狂分布。PowerTransformer 最適合偏斜特征。無(wú)論您選擇哪種變壓器,目標(biāo)始終是使特征盡可能呈正態(tài)分布。
概括
今天,我們已經(jīng)介紹了 UMAP 的基礎(chǔ)知識(shí),并且只了解了它的一小部分功能。為了進(jìn)一步閱讀,我建議查看包的文檔。在那里,您將看到 UMAP 的不同用例以及 Google 等科技巨頭如何在各種項(xiàng)目中使用它。
還有專門的部分用于將 UMAP 與其他降維算法進(jìn)行比較。對(duì)于數(shù)學(xué)愛(ài)好者,您還可以閱讀 UMAP 的工作原理及其公式的證明。感謝您的閱讀!
歡迎各位了解<python實(shí)戰(zhàn)因子分析和主成分分析>,學(xué)習(xí)機(jī)器學(xué)習(xí)降維知識(shí)
https://ke.qq.com/course/3485943
