hello,大家好梯找,關于降維算法女揭,在之前分享的文章10X單細胞(10X空間轉錄組)降維分析之tSNE(算法基礎知識)詳細介紹了tSNE的降維原理,但是大家都知道,在我們分析10X單細胞或者10X空間轉錄組數據的時候悯森,有兩種降維方法,一種是tSNE绪撵,這個已經分享過瓢姻,今天我們就來分享另外一個,UMAP音诈。
什么是UMAP幻碱?
UMAP ,全稱uniform manifold approximation and projection细溅,統(tǒng)一流形逼近與投影褥傍,是基于黎曼幾何和代數拓撲的理論框架結構構建的。在處理大數據集時喇聊,UMAP優(yōu)勢明顯摔桦,運行速度更快,內存占用小承疲。Etienne Becht等人2019年在Nature Biotechnology上發(fā)表一篇文章將其應用在生物學數據上并闡述了UMAP在處理單細胞數據方面的應用和優(yōu)勢。
UMAP應該說是目前最好的降維算法了鸥咖,目前大部分10X單細胞的降維圖譜都選擇了UMAP燕鸽,因為其能最大程度的保留原始數據的特征同時大幅度的降低特征維數。
這是《生命科學的數理統(tǒng)計和機器學習》的相關探討啼辣,我們來深入探討這一個降維算法啊研,UMAP,它主導了當今的單細胞轉錄組學鸥拧。
如果你不知道tSNE是什么党远,它是如何工作的,也沒有讀過2008年的革命性的van der Maaten & Hinton原稿富弦,可以參考我的那文章10X單細胞(10X空間轉錄組)降維分析之tSNE(算法基礎知識)沟娱。盡管tSNE對一般的單細胞基因組學和數據科學產生了巨大的影響,但人們普遍認為它有一些缺點腕柜,這些缺點很快將得到解決济似。(tSNE的缺點在上次分享的文章中也做過詳細的介紹)。
究竟是什么讓我們想放棄使用tSNE單細胞轉錄組學?這里我用簡短的評論總結了幾點:
- 在scRNAseq中盏缤,tSNE并不能很好地擴展快速增加的樣本量砰蠢。試圖用FItSNE來加速它會導致大量的內存消耗,使得在計算機集群之外無法進行分析唉铜。(集群之痛)台舱,這個大家用過Seurat分析過的同學應該都知道。
- tSNE沒有保留全局數據結構潭流,這意味著只有在集群距離內才有意義竞惋,而集群之間的相似性并不能保證柜去,因此使用tSNE作為集群不是一個很好的主意。
-
tSNE實際上只能嵌入到2維或3維中碰声,即僅用于可視化目的诡蜓。
請注意,這對于更現(xiàn)代的FItSNE算法來說仍然是一個問題胰挑。
tSNE執(zhí)行從高維到低維的非參數映射蔓罚,這意味著它不利用驅動觀察到的集群的特性(也稱為PCA維度)。
tSNE不能直接處理高維數據瞻颂,在將其插入tSNE之前豺谈,通常使用自動編碼器或PCA執(zhí)行預降維
tSNE的計算占用了大量的內存,在使用大型perplexity超參數時贡这,這一點變得尤為明顯茬末,因為k近鄰的初始步長(就像Barnes-Hut過程)變得低效,而且對時間減少也很重要盖矫。更現(xiàn)代的FItSNE算法也不能解決這個問題丽惭。
tSNE是一種比較簡單的機器學習算法,可以用以下四個公式表示:
(1)定義了高維空間中任意兩點之間觀測距離的高斯概率辈双,滿足對稱性規(guī)則责掏。Eq。
(2)引入了困惑的概念作為一個約束,確定最優(yōu)σ為每個樣本湃望。
(3)聲明了低維嵌入中點對之間距離的學生t分布换衬。學生t分布是為了克服嵌入低維時的擁擠問題。
(4)給出了Kullback-Leibler散度損失函數证芭,將高維概率投影到低維概率上瞳浦,并給出了梯度下降優(yōu)化中使用的梯度的解析形式。
看看上面的圖废士,我想說的是 t分布應該提供全局距離信息叫潦,因為它們將高維空間中相距較遠的點推到低維空間中更遠的點。
然而湃密,這種良好的意愿被成本函數(KL-divergence)的選擇所扼殺诅挑,我們將在后面看到其原因。
當了解UMAP時泛源,我的第一印象是這是一種全新的拔妥、有趣的降維技術,它基于堅實的數學原理达箍,因此與純機器學習半經驗算法tSNE非常不同没龙。我的生物學同事告訴我,最初的UMAP論文“太數學化了”,看著論文的第二部分硬纤,我很高興地看到解滓,嚴格而準確的數學終于進入生命和數據科學。然而筝家,在閱讀UMAP文檔和觀看Leland McInnes在2018年SciPy大會上的演講時洼裤,我感到困惑,覺得UMAP是另一種鄰居圖技術溪王,它與tSNE如此相似腮鞍,以至于我很難理解UMAP與tSNE究竟有什么不同。
從UMAP論文中莹菱,雖然Leland McInnes試圖在附錄c中總結UMAP和tSNE之間的差異移国,但是它們之間的差異并不是很明顯。在這里道伟,我將首先總結我所注意到的UMAP和tSNE之間的不同之處迹缀,然后嘗試解釋為什么這些不同是重要的,并找出它們的影響有多大蜜徽。
UMAP在高維中使用指數概率分布祝懂,但不一定是像tSNE那樣的歐氏距離,而是任何距離都可以代入拘鞋。另外嫂易,概率沒有歸一化:
ρ是一個重要的參數,它代表了每個i數據點距離第一個最近鄰。這保證了流形的局部連接性掐禁。換句話說,這為每個數據點提供了一個局部自適應指數核颅和,因此距離度量在點與點之間變化傅事。
ρ參數是唯一在UMAP部分2和3之間的橋梁。否則,我也看不出什么模糊單形建筑,即從第二節(jié)的拓撲數據分析,與從第三節(jié)UMAP的算法實現(xiàn),似乎在一天結束的時候模糊單形集導致最近鄰圖施工峡扩。
UMAP對高維或低維概率都不應用標準化蹭越,這與tSNE非常不同,感覺很奇怪教届。然而,高或低維函數形式的概率可以看到他們已經擴展[0,1],事實證明,缺乏規(guī)范化的情況下,類似于情商分母响鹃。
(1),可以顯著降低計算時間高維圖像由于求和或集成是一個代價高昂的計算過程。想想馬爾可夫鏈蒙特卡羅(MCMC)它基本上是試圖近似地計算在貝葉斯規(guī)則的分母上的積分(UMAP使用最近鄰居的數量而不是perplexity)
(2)定義perplexity, UMAP則定義了沒有l(wèi)og2函數的最近鄰居k的個數案训,即:
UMAP使用稍微不同的高維概率對稱
symmterization是必要的因為UMAP融合在一起的點與本地不同的指標(通過參數ρ),它可能發(fā)生圖A和B節(jié)點之間的重量不等于B之間的權重和節(jié)點买置。為什么UMAP使用這種對稱而不是tSNE使用的對稱還不清楚。我將在下一篇文章(從頭開始編寫UMAP)中展示我對不同的對稱化規(guī)則的實驗强霎,這并沒有使我相信這是如此重要的一步忿项,因為它對最終的低維嵌入式產生了很小的影響。
UMAP使用曲線族1 / (1+a*y^(2b))在低維中建模距離概率,不是完全的學生t分布轩触,但非常非常相似寞酿,請注意再次沒有應用標準化:
其中,對于默認UMAP超參數a≈1.93,b≈0.79(實際上脱柱,對于min_dist = 0.001)伐弹。在實踐中,UMAP從非線性最小二乘擬合到帶有min_dist超參數的分段函數中找到a和b:
為了更好地理解曲線族1 / (1+a*y^(2b))的行為榨为,讓我們畫出不同a和b的曲線:
plt.figure(figsize=(20, 15))
y = np.linspace(0, 10, 1000)
my_prob = lambda y, a, b: np.power(1 + a*y**(2*b), -1)
plt.plot(y, my_prob(y, a = 1, b = 1))``plt.plot(y, my_prob(y, a = 1.93, b = 0.79))
plt.plot(y, my_prob(y, a = 1.93, b = 5))
plt.gca().legend(('a = 1, b = 1', 'a = 1.93, b = 0.79', 'a = 1.93, b = 5'), fontsize = 20)
plt.title('Low-Dimensional Probability of Pairwise Euclidean Distances', fontsize = 20)
plt.xlabel('Y', fontsize = 20);
plt.ylabel('Q(Y)', fontsize = 20)
plt.show()`
我們可以看到曲線族對參數b非常敏感惨好,在大的參數b處,在小的參數y處柠逞,曲線族形成了一種高峰昧狮。這意味著在UMAP超參數min_dist之下,所有的數據點都是同樣緊密相連的板壮。由于Q(Y)函數的行為幾乎像一個Heaviside階躍函數逗鸣,這意味著UMAP為所有在低維空間中相互靠近的點分配了幾乎相同的低維坐標。min_dist正是導致在UMAP維數降低圖中經常觀察到的超密集集群的原因绰精。
為了演示如何準確地找到a和b參數撒璧,讓我們展示一個簡單的分段函數(其中高峰部分是通過min_dist參數定義的),并使用函數族1 / (1+ay^(2b))通過優(yōu)化來擬合它笨使。curve_fit來自Scipy Python庫卿樱。作為擬合的結果,我們得到了函數1 / (1+ay^(2b))的初值a和初值b硫椰。
from scipy import optimize
import matplotlib.pyplot as plt
import numpy as np
MIN_DIST = 1
x = np.linspace(0, 10, 300)
def f(x, min_dist):
y = []
for i in range(len(x)):
if(x[i] <= min_dist):
y.append(1)
else:
y.append(np.exp(- x[i] + min_dist))
return y
dist_low_dim = lambda x, a, b: 1 / (1 + a*x**(2*b))
p , _ = optimize.curve_fit(dist_low_dim, x, f(x, MIN_DIST))
print(p)
plt.figure(figsize=(20,15))
plt.plot(x, f(x, MIN_DIST), 'o')
plt.plot(x, dist_low_dim(x, p[0], p[1]), c = 'red')
plt.title('Non-Linear Least Square Fit of Piecewise Function', fontsize = 20)
plt.gca().legend(('Original', 'Fit'), fontsize = 20)
plt.xlabel('X', fontsize = 20)
plt.ylabel('Y', fontsize = 20)
plt.show()
UMAP使用二元交叉熵(CE)作為成本函數繁调,而不是像tSNE那樣使用kl -散度。
由于我們需要知道交叉熵的梯度靶草,以便以后實現(xiàn)梯度下降蹄胰,讓我們快速計算它。忽略只包含p(X)的常數項奕翔,我們可以將交叉熵重新寫一下裕寨,并將其微分如下:
-
UMAP使用圖拉普拉斯變換分配初始的低維坐標,與tSNE使用的隨機正常初始化形成對比派继。
然而宾袜,這應該會對最終的低維表示產生較小的影響,至少在tSNE中是這樣的驾窟。
但是庆猫,這應該會減少UMAP每次運行時的更改,因為它不再是一個隨機初始化绅络。
Linderman和Steinerberger提出了一個有趣的假設阅悍,即在tSNE的初始階段最小化kl散度绷跑,并在早期進行放大解孙,這一假設的動機是通過圖拉普拉斯變換來進行初始化侣诺。
圖拉普拉斯益楼、譜聚類、拉普拉斯Eignemaps寻行、擴散圖霍掺、譜嵌入等,實際上是指將矩陣分解和鄰接圖方法結合起來解決降維問題的同一種有趣的方法拌蜘。在這種方法中杆烁,我們首先構造一個圖(或knn圖),然后通過構造拉普拉斯矩陣用矩陣代數(鄰接矩陣和度矩陣)將其形式化简卧,最后分解拉普拉斯矩陣兔魂,即求解特征值分解問題。
我們可以使用scikit-learn Python庫举娩,并使用spectralembedded函數在演示數據集(即與癌癥相關的成纖維細胞(CAFs) scRNAseq數據)上輕松地顯示初始的低維坐標:
from sklearn.manifold import SpectralEmbedding
model = SpectralEmbedding(n_components = 2, n_neighbors = 50)
se = model.fit_transform(np.log(X_train + 1))
plt.figure(figsize=(20,15))
plt.scatter(se[:, 0], se[:, 1], c = y_train.astype(int), cmap = 'tab10', s = 50)
plt.title('Laplacian Eigenmap', fontsize = 20)
plt.xlabel('LAP1', fontsize = 20)
plt.ylabel('LAP2', fontsize = 20)
plt.show()`
最后析校,UMAP使用隨機梯度下降(SGD)代替常規(guī)梯度下降(GD),如tSNE / FItSNE铜涉,這既加快了計算速度智玻,又減少了內存消耗。
現(xiàn)在讓我們簡要地討論一下為什么他們說tSNE只保留數據的局部結構芙代〉跎荩可以從不同的角度來理解tSNE的局部性。首先,我們有σ參數Eq纹烹。(1)本地數據點集這樣互相“感覺”页滚。因為成對歐幾里得距離衰減指數的概率,在小的σ值,它基本上是零遙遠的點(大型X)和快速增長僅為最近的鄰居(小X)。相比之下,在大的σ,遙遠而近點的概率成為限制可比和σ→∞,概率就等于1為所有任何一對點之間的距離,即成為等距點铺呵。
plt.figure(figsize=(20, 15))
x = np.linspace(0, 10, 1000)
sigma_list = [0.1, 1, 5, 10]
for sigma in sigma_list:
my_prob = lambda x: np.exp(-x**2 / (2*sigma**2))
plt.plot(x, my_prob(x))
plt.gca().legend(('$\sigma$ = 0.1','$\sigma$ = 1', '$\sigma$ = 5', '$\sigma$ = 10'), fontsize = 20)
plt.title('High-Dimensional Probability of Pairwise Euclidean Distances', fontsize = 20)
plt.xlabel('X', fontsize = 20);
plt.ylabel('P(X)', fontsize = 20)
plt.show()
有趣的是,如果我們擴大成對歐幾里得距離的概率高維度成泰勒級數在σ→∞,我們會在第二近似冪律:
關于兩兩歐幾里得距離的冪律類似于多維定標法(MDS)的成本函數逻谦,MDS是通過保存每對點之間的距離來保存全局距離,而不管它們是相距很遠還是很近陪蜻。一個可以解釋這個大的σtSNE遠程數據點之間的相互作用,所以是不完全正確的說tSNE只能處理當地的距離。然而贱鼻,我們通常會受到perplexity有限值的限制宴卖,Laurens van der Maaten建議perplexity的取值范圍在5到50之間,盡管在局部信息和全局信息之間可能會有一個很好的折衷邻悬,那就是使用平方根≈N^(1/2)來選擇perplexity症昏,其中N為樣本量。相反的極限,σ→0,我們最終的極端“局部性”高維概率的行為類似于狄拉克δ函數的行為父丰。
另一種理解tSNE“局部性”的方法是考慮KL-divergence函數肝谭。假設X是高維空間中點之間的距離Y是低維空間中點之間的距離
根據kl -散度的定義:
方程(9)的第一項對于X的大小都是趨近于0的掘宪,對于X的大小也是趨近于0的,因為指數趨近于1攘烛,而log(1)=0魏滚。對于大X,這一項仍然趨近于0因為指數前因子趨近于0的速度快于對數趨近于負無窮坟漱。因此鼠次,為了直觀地理解kl散度,只考慮第二項就足夠了:
這是一個看起來很奇怪的函數芋齿,讓我們畫出KL(X, Y)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator, FormatStrFormatter
fig = plt.figure(figsize=(20, 15))
ax = fig.gca(projection = '3d')# Set rotation angle to 30 degrees
ax.view_init(azim=30)
X = np.arange(0, 3, 0.1)
Y = np.arange(0, 3, 0.1)
X, Y = np.meshgrid(X, Y)
Z = np.exp(-X**2)*np.log(1 + Y**2)``# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,linewidth=0, antialiased=False)
ax.set_xlabel('X', fontsize = 20)
ax.set_ylabel('Y', fontsize = 20)
ax.set_zlabel('KL (X, Y)', fontsize = 20)
ax.set_zlim(0,2.2)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
這個函數的形狀非常不對稱腥寇。如果點在高維度X之間的距離很小,指數因子變成1和對數項行為日志(1 + Y ^ 2)這意味著如果Y是在低維空間的距離大,將會有一個大的懲罰,因此tSNE試圖減少Y在小X為了減少罰款。相反觅捆,對于高維空間中的長距離X, Y基本上可以是0到∞之間的任何值赦役,因為指數項趨于0,并且總是勝過對數項栅炒。因此掂摔,在高維空間中相距遙遠的點,在低維空間中可能會相互靠近职辅。因此棒呛,換句話說,tSNE并不能保證高維空間中相距較遠的點在低維空間中會保持較遠的距離域携。然而簇秒,它確實保證了在高維空間中相鄰的點在低維空間中保持相鄰。所以tSNE不是很擅長遠距離投射至低維,所以它只保留本地數據結構提供了σ不去∞秀鞭。
與tSNE不同趋观,UMAP使用交叉熵(CE)作為成本函數,而不是KL-divergence
這導致了地方-全球結構保護平衡的巨大變化锋边。在X的小值處皱坛,我們得到了與tSNE相同的極限,因為第二項由于前因子和對數函數比多項式函數慢的事實而消失:
因此豆巨,為了使懲罰規(guī)則最小化剩辟,Y坐標必須非常小,即Y→0往扔。這與tSNE的行為完全一樣贩猎。但是,在大X的相反極限萍膛,即X→∞時吭服,第一項消失,第二項的前因子為1蝗罗,得到:
這里艇棕,如果Y很小蝌戒,我們會得到一個很大的懲罰,因為Y在對數的分母上沼琉,因此北苟,我們鼓勵Y很大,這樣刺桃,對數下的比率就變成了1粹淋,我們得到零懲罰。因此瑟慈,我們在X→∞處得到Y→∞桃移,所以從高維空間到低維空間的整體距離保持不變,這正是我們想要的葛碧。為了說明這一點借杰,讓我們繪制UMAP CE成本函數:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator, FormatStrFormatter
fig = plt.figure(figsize=(20, 15))
ax = fig.gca(projection = '3d') # Set rotation angle to 30 degrees
ax.view_init(azim=30)
X = np.arange(0, 3, 0.001)
Y = np.arange(0, 3, 0.001)
X, Y = np.meshgrid(X, Y)
Z = np.exp(-X**2)*np.log(1 + Y**2) + (1 - np.exp(-X**2))*np.log((1 + Y**2) / (Y**2+0.01))
# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,linewidth=0, antialiased=False)
ax.set_xlabel('X', fontsize = 20)
ax.set_ylabel('Y', fontsize = 20)
ax.set_zlabel('CE (X, Y)', fontsize = 20)
ax.set_zlim(0,4.3)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
# Add a color bar which maps values to colors.fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
在這里,我們可以看到圖的“右”部分看起來與上面的kl散度曲面非常相似进泼。這意味著在X低的時候蔗衡,為了減少損失,我們仍然想要Y低乳绕。然而绞惦,當X很大時,Y的距離也要很大洋措,因為如果它很小济蝉,CE (X, Y)的損失將是巨大的。記住菠发,之前王滤,對于KL (X, Y)曲面,在X很大的情況下滓鸠,我們在高Y值和低Y值之間沒有差別雁乡,這就是為什么CE (X, Y)代價函數能夠保持全局距離和局部距離。
我們知道UMAP是速度比tSNE擔憂)時大量的數據點,b)嵌入維數大于2或3,c)大量環(huán)境維度的數據集糜俗。在這里,讓我們試著了解UMAP要優(yōu)于tSNE來自于數學和算法實現(xiàn)踱稍。
tSNE和UMAP基本上都包含兩個步驟:
建立一個圖在高維度的帶寬和計算指數概率,σ,使用二進制搜索和固定數量的最近的鄰居需要考慮。
通過梯度下降優(yōu)化低維表示悠抹。第二步是算法的瓶頸珠月,它是連續(xù)的,不能是多線程的锌钮。由于tSNE和UMAP都執(zhí)行第二步,所以并不清楚為什么UMAP比tSNE更有效引矩。
然而梁丘,我注意到UMAP的第一步比tSNE快得多侵浸。這有兩個原因:
-
首先,我們去掉了最近鄰數量定義中的log部分氛谜,即不像tSNE那樣使用全熵:
由于在算法上掏觉,對數函數是通過泰勒級數展開來計算的,而且在線性項前面加上一個對數前因子實際上并沒有增加多少值漫,因為對數函數比線性函數慢澳腹,所以最好完全跳過這一步。
第二個原因是我們忽略了高維概率的歸一化杨何,即式(1)中用于tSNE的高維概率歸一化酱塔。可以說危虱,這一小步實際上對演出產生了戲劇性的影響羊娃。這是因為求和或積分是一個計算開銷很大的步驟。
接下來埃跷,UMAP實際上在第二步中也變得更快了蕊玷。這種改善也有幾個原因:
采用隨機梯度下降法(SGD)代替常規(guī)梯度下降法(GD),如tSNE或FItSNE弥雹。這提高了速度垃帅,因為對于SGD,您可以從一個隨機樣本子集計算梯度剪勿,而不是像常規(guī)GD那樣使用所有樣本子集贸诚。除了速度之外,這還減少了內存消耗窗宦,因為您不再需要為內存中的所有樣本保持梯度赦颇,而只需要為一個子集保持梯度。
我們不僅跳過了高維和低維概率的標準化赴涵。這也省去了第二階段(優(yōu)化低維嵌入)的昂貴求和媒怯。
由于標準的tSNE使用基于樹的算法進行最近鄰搜索,由于基于樹的算法隨著維數的增加呈指數增長髓窜,所以生成超過2-3個嵌入維數的速度太慢扇苞。這個問題在UMAP中通過去掉高維和低維概率的標準化得到了解決。
增加原始數據集的維數寄纵,我們引入稀疏性鳖敷,即我們得到越來越多的碎片化流形,即有時存在稠密區(qū)域程拭,有時存在孤立點(局部破碎流形)定踱。UMAP解決這個問題通過引入本地連接ρ參數融合在一起(某種程度上)通過引入自適應稀疏區(qū)域指數內核,考慮了本地數據連接。這就是為什么UMAP(理論上)可以處理任意數量的維度恃鞋,并且在將其插入主維度縮減過程之前不需要預降維步驟(自動編碼器崖媚、PCA)的原因亦歉。
在這篇文章中,我們了解到盡管tSNE多年來一直服務于單細胞研究領域畅哑,但它有太多的缺點肴楷,如速度快、缺乏全球距離保存荠呐。UMAP總體上遵循了tSNE的哲學赛蔫,但是引入了一些改進,例如另一個成本函數和缺少高維和低維概率的標準化泥张。
UMAP在數據上的運用
UMAP在處理大數據時具有獨特的優(yōu)勢
除了運行速度快呵恢,內存占用小等特點,UMAP在處理細胞學數據時還有一個大的優(yōu)勢圾结,就是可以反映細胞群體之間分化的連續(xù)性和組織性瑰剃。下面將通過文獻中的數據【2】來為大家詳細講解。
1.UMAP體現(xiàn)細胞集群分化的連續(xù)性
對同一組數據分別進行tSNE和UMAP降維筝野,該數據為多達30萬個從8種不同組織富集得到的T細胞和NK細胞的樣本晌姚,并使用Phenograph聚類把細胞分為6大類,每種顏色代表一種細胞歇竟。從圖中可以看出挥唠,UMAP和tSNE都可以較好地把不同類別的細胞分開。但tSNE傾向于把相同細胞群劃分為更多的群焕议,如圖顯示宝磨,黑色圈中CD8 T細胞,在tSNE結果中盅安,群數更多唤锉,距離更遠。
同樣這組數據用組織來源對UMAP和t-SNE圖上細胞的進行顏色區(qū)分别瞭,可以觀察到一個有意思的現(xiàn)象窿祥。與UMAP相比,t-SNE更加傾向于根據它們的來源來分離總體細胞蝙寨。而 UMAP則會兼顧細胞群的類別和來源來排列晒衩,如圖中在CD4 T細胞和CD8 T細胞群內,細胞的排列與來源也會有一定的規(guī)律性墙歪,都是大致從臍帶血(CB)和外周血單核細胞(PBMC)听系,到肝臟(Liver)和脾臟(Spleen),最后到一端的扁桃或另一端的皮膚(Skin)虹菲、腸道(Gut)和肺(Lung)靠胜。
通過駐留記憶T細胞標志物CD69/CD103、記憶T細胞標志物CD45 RO和na?ve T細胞標志物CCR7表達群的分布,可以觀察到UMAP可以展示出T細胞連續(xù)的分化階段浪漠。而tSNE結果中菠赚,這些群之間也是連續(xù)的,但是卻沒有非常明顯的沿軸結構郑藏。同樣的現(xiàn)象也在造血細胞系統(tǒng)中被觀察到。由此可見瘩欺, UMAP在大數據集的處理時可以展現(xiàn)細胞集群的連續(xù)性必盖。
2.UMAP具有更好的可重復性
對三組數據(Samusik、Wong俱饿、Han_400k)分別進行數據隨機降低至100-200,000之間不同的數量級歌粥,形成小數據集∨牟海縱軸為小數據集與原始數據集的相關性失驶,代表降維方法在不同數據量上的可重復性。UMAP表現(xiàn)最好枣购,數據集越大嬉探,優(yōu)勢越明顯。
簡單比較一下tSNE和UMAP
下圖是UMAP和t-SNE對一套784維Fashion MNIST高維數據集降維到3維的效果的比較棉圈。
雖然這兩種算法都表現(xiàn)出強大的局部聚類并將相似的類別分組在一起涩堤,但UMAP還將這些相似類別的分組彼此分開。另外分瘾,UMAP降維用了4分鐘胎围,而多核t-SNE用了27分鐘。
2德召、UMAP參數
UMAP的兩個最常用的參數:n_neighbors 和 min_dist白魂,它們可有效地用于控制最終結果中局部結構和全局結構之間的平衡。
最重要的參數是 n_neighbors 上岗,近似最近鄰居數福荸。它有效地控制了UMAP局部結構與全局結構的平衡,數據較小時液茎,UMAP會更加關注局部結構逞姿,數據較大時,UMAP會趨向于代表大圖結構捆等,丟掉一些細節(jié)滞造。
第二個參數是 min_dist,點之間的最小距離栋烤。此參數控制UMAP聚集在一起的緊密程度谒养,數據較小時,會更緊密。較大的值會更松散买窟,而將重點放在保留廣泛的拓撲結構上丰泊。
上圖可以通過https://pair-code.github.io/understanding-umap/自己調整一下參數看一下。
3始绍、進一步比較UMAP與t-SNE
t-SNE和UMAP大部分的表現(xiàn)非常相似瞳购,但以下示例明顯例外:寬而稀疏的cluster中有密集的cluster(如下圖所示)。UMAP無法分離兩個嵌套的群集亏推,尤其是在維數較高時学赛。
UMAP在初始圖形構造中局部距離的使用可以解釋該算法無法處理情況的原因。由于高維點之間的距離趨于非常相似(維數的詛咒)吞杭,所以可能會因此將其混合在一起盏浇。
算法很難,所以懂的人才顯得牛
天行健芽狗,君子以自強不息