博文名稱(chēng):Reduce Dimensions for Single Cell
博文鏈接:https://towardsdatascience.com/reduce-dimensions-for-single-cell-4224778a2d67
發(fā)表時(shí)間:Aug 21, 2019

這是《生命科學(xué)的數(shù)學(xué)統(tǒng)計(jì)和機(jī)器學(xué)習(xí)》專(zhuān)欄中的第8篇文章,我試圖涵蓋生物信息學(xué)、生物醫(yī)學(xué)、遺傳學(xué)、進(jìn)化科學(xué)等常見(jiàn)的分析技術(shù)。 今天我們將討論應(yīng)用于單細(xì)胞基因組數(shù)據(jù)的降維技術(shù)。 其中,我們將比較線(xiàn)性降維和非線(xiàn)性降維技術(shù),以了解為什么tSNE和UMAP成為單細(xì)胞生物學(xué)的黃金標(biāo)準(zhǔn)。
單細(xì)胞數(shù)據(jù)的非線(xiàn)性結(jié)構(gòu) (Non-Linear Structure of Single Cell Data)
單細(xì)胞基因組數(shù)據(jù)是一種高維數(shù)據(jù),大約有20 000 維,對(duì)應(yīng)于蛋白質(zhì)編碼基因。 因此,為了簡(jiǎn)化數(shù)據(jù)復(fù)雜性并克服維度詛咒(維災(zāi)),可以從分析中消除冗余基因(redundant genes)。排除冗余基因并將數(shù)據(jù)投影到一個(gè)潛在空間(latent space),使該空間中數(shù)據(jù)的隱藏結(jié)構(gòu)變得清晰透明是降維的目標(biāo)。

主成分分析(Principal Component Analysis, PCA)是一種基本的線(xiàn)性降維技術(shù),由于單細(xì)胞的高度非線(xiàn)性結(jié)構(gòu),已被廣泛認(rèn)為不適用于單細(xì)胞數(shù)據(jù)。直覺(jué)來(lái)看,單細(xì)胞的非線(xiàn)性主要來(lái)自基因表達(dá)式矩陣中由dropout效應(yīng)而引起的大量的隨機(jī)零值。通常,單個(gè)細(xì)胞數(shù)據(jù)在表達(dá)式矩陣中具有60-80%的零元素。這樣的話(huà),單個(gè)細(xì)胞數(shù)據(jù)就類(lèi)似于圖像數(shù)據(jù),例如,對(duì)于手寫(xiě)數(shù)字MNIST數(shù)據(jù)集的圖像,我們有86%的像素為零值。

表達(dá)矩陣中的大量隨機(jī)零值使得數(shù)據(jù)的行為類(lèi)似于非線(xiàn)性Heaviside階躍函數(shù),即無(wú)論“非零”有多少,基因表達(dá)都是零或非零。讓我們展示針對(duì)癌癥相關(guān)成纖維細(xì)胞 (CAF) 單細(xì)胞數(shù)據(jù)集的進(jìn)行的基本線(xiàn)性和非線(xiàn)性降維技術(shù)。
線(xiàn)性降維技術(shù)
我們先從線(xiàn)性降維技術(shù)開(kāi)始。在這里,我們讀取單細(xì)胞CAFs表達(dá)數(shù)據(jù),并進(jìn)行log-transform處理,log-transform被視為是對(duì)數(shù)據(jù)進(jìn)行歸一化的方法。通常,列是基因,行是細(xì)胞,最后一列是CAFs數(shù)據(jù)集中發(fā)現(xiàn)的4個(gè)細(xì)胞群(cluster)的 ID,即該細(xì)胞的cluster名稱(chēng)。
import numpy as np
import pandas as pd
expr = pd.read_csv('CAFs.txt',sep='\t')
print("\n" + "Dimensions of input file: " + str(expr.shape) + "\n")
print("\n" + "Last column corresponds to cluster assignments: " + "\n")
print(expr.iloc[0:4, (expr.shape[1]-4):expr.shape[1]])
X = expr.values[:,0:(expr.shape[1]-1)]
Y = expr.values[:,expr.shape[1]-1]
X = np.log(X + 1)
現(xiàn)在我們將使用scikit-learn流形學(xué)習(xí)庫(kù)(scikit-learn manifold learning)應(yīng)用最主流的線(xiàn)性降維技術(shù)。 查看我的github站點(diǎn)獲得完整的腳本,為了簡(jiǎn)單起見(jiàn),這里只顯示線(xiàn)性判別分析 (Linear Discriminant Analysis,LDA) 的代碼:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
model = LinearDiscriminantAnalysis(n_components = 2, priors = None, shrinkage = 'auto',
solver = 'eigen', store_covariance = False, tol = 0.0001)
lda = model.fit_transform(X, Y)
plt.scatter(lda[:, 0], lda[:, 1], c = Y, cmap = 'viridis', s = 1)
plt.xlabel("LDA1", fontsize = 20); plt.ylabel("LDA2", fontsize = 20)
feature_importances = pd.DataFrame({'Gene':np.array(expr.columns)[:-1],
'Score':abs(model.coef_[0])})
print(feature_importances.sort_values('Score', ascending = False).head(20))

我們可以立即得出結(jié)論,線(xiàn)性降維技術(shù)并不能完全解決單細(xì)胞數(shù)據(jù)中的異質(zhì)性問(wèn)題。 例如,黃色的一小群細(xì)胞似乎沒(méi)有與其他3個(gè)細(xì)胞群區(qū)分開(kāi)。 唯一的例外是LDA 圖,但這并不是真正的無(wú)監(jiān)督學(xué)習(xí)方法,因?yàn)榕c其他方法相比,它通過(guò)細(xì)胞標(biāo)簽(cluster信息)來(lái)構(gòu)建類(lèi)別之間最可分離的潛在特征。 因此,線(xiàn)性降維技術(shù)擅長(zhǎng)保留數(shù)據(jù)的全局結(jié)構(gòu)(所有數(shù)據(jù)點(diǎn)之間的連接),而對(duì)于單細(xì)胞數(shù)據(jù)似乎更重要的是保持?jǐn)?shù)據(jù)的局部結(jié)構(gòu)(相鄰點(diǎn)之間的連接)。圖片來(lái)源

探索如何將數(shù)據(jù)如何轉(zhuǎn)化為潛在的低維特征呈現(xiàn)真的很有趣,每一種降維技術(shù)都值得發(fā)表自己的文章。想想為什么基本上每種降維技術(shù)都只適用于某一特定研究領(lǐng)域,而在其他領(lǐng)域卻不常見(jiàn),這也很有趣。例如,獨(dú)立成分分析(Independent Component Analysis,ICA)用于信號(hào)處理,非負(fù)矩陣分解(Non-Negative Matrix Factorization,NMF)用于文本挖掘,非度量多維縮放(NMDS)在宏基因組分析等中非常常見(jiàn),但很少看到NMF用于RNA測(cè)序數(shù)據(jù)分析。
非線(xiàn)性降維技術(shù)
我們轉(zhuǎn)向非線(xiàn)性降維技術(shù),檢查它們是否能夠解決單細(xì)胞數(shù)據(jù)中的所有隱藏結(jié)構(gòu)。同樣,可以在github上找到完整的代碼,為了簡(jiǎn)單起見(jiàn),這里只展示了tSNE算法的代碼,已知該算法難以處理真正的高維數(shù)據(jù),因此通常只在20–50個(gè)預(yù)降維數(shù)據(jù)上運(yùn)行,例如PCA。

from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
X_reduced = PCA(n_components = 30).fit_transform(X)
model = TSNE(learning_rate = 10, n_components = 2, random_state = 123, perplexity = 30)
tsne = model.fit_transform(X_reduced)
plt.scatter(tsne[:, 0], tsne[:, 1], c = Y, cmap = 'viridis', s = 1)
plt.title('tSNE on PCA', fontsize = 20)
plt.xlabel("tSNE1", fontsize = 20)
plt.ylabel("tSNE2", fontsize = 20)
在這里我們看到,大多數(shù)非線(xiàn)性降維技術(shù)通過(guò)保留數(shù)據(jù)的局部結(jié)構(gòu)(相鄰點(diǎn)之間的連接)成功地解決了黃色小細(xì)胞群。例如,局部線(xiàn)性嵌入(Locally Linear Embedding,LLE)通過(guò)一組局部線(xiàn)性平面逼近非線(xiàn)性流形,而這對(duì)于重建稀有細(xì)胞群(例如黃色小細(xì)胞群)至關(guān)重要。最好的可視化來(lái)自 tSNE 和 UMAP。tSNE 捕獲局部結(jié)構(gòu)以及LLE,在這種特定情況下似乎對(duì)原始表達(dá)式數(shù)據(jù)有效,但是使用PCA進(jìn)行預(yù)降維通常會(huì)提供更為精簡(jiǎn)和獨(dú)特的聚類(lèi)。相比之下,UMAP保留了局部和全局?jǐn)?shù)據(jù)結(jié)構(gòu),并基于拓?fù)鋽?shù)據(jù)分析,其中流形表示為基本單純形(Simplex)單元的集合,這確保了數(shù)據(jù)點(diǎn)之間的距離在高維流形中看起來(lái)并不完全相等,但類(lèi)似于2D 空間的距離分布。換言之,UMAP是一次優(yōu)雅的嘗試,旨在打破維度詛咒,我將在另一篇文章中專(zhuān)門(mén)介紹UMAP背后的數(shù)學(xué)。
總結(jié)
在這篇文章中,我們了解到單細(xì)胞基因組數(shù)據(jù)具有非線(xiàn)性結(jié)構(gòu)(non-linear structure ),這是由dropout效應(yīng)導(dǎo)致表達(dá)矩陣中大量隨機(jī)零值的原因。 線(xiàn)性流形學(xué)習(xí)(linear manifold learning)技術(shù)保留了數(shù)據(jù)的全局結(jié)構(gòu),但是不能完全解析所有存在的細(xì)胞群。 相比之下,保持?jǐn)?shù)據(jù)點(diǎn)之間的局部連通性(LLE、tSNE、UMAP)是單細(xì)胞基因組數(shù)據(jù)成功降維的關(guān)鍵因素。
基本概念
1. 流形學(xué)習(xí)方法(Manifold Learning)
簡(jiǎn)稱(chēng)流形學(xué)習(xí),自2000年在著名的科學(xué)雜志《Science》被首次提出以來(lái),已成為信息科學(xué)領(lǐng)域的研究熱點(diǎn)。在理論和應(yīng)用上,流形學(xué)習(xí)方法都具有重要的研究意義。假設(shè)數(shù)據(jù)是均勻采樣于一個(gè)高維歐氏空間中的低維流形,流形學(xué)習(xí)就是從高維采樣數(shù)據(jù)中恢復(fù)低維流形結(jié)構(gòu),即找到高維空間中的低維流形,并求出相應(yīng)的嵌入映射,以實(shí)現(xiàn)維數(shù)約簡(jiǎn)或者數(shù)據(jù)可視化。它是從觀(guān)測(cè)到的現(xiàn)象中去尋找事物的本質(zhì),找到產(chǎn)生數(shù)據(jù)的內(nèi)在規(guī)律。
目的:在保持流形上點(diǎn)的某些幾何性質(zhì)特征的情況下,找出一組對(duì)應(yīng)的內(nèi)蘊(yùn)坐標(biāo)(intrinsic coordinate),將流形盡量好的展開(kāi)在低維平面上,這種低維表示也叫內(nèi)蘊(yùn)特征(intrinsic feature),外圍空間的維數(shù)叫觀(guān)察維數(shù),其表示叫自然坐標(biāo),在統(tǒng)計(jì)上稱(chēng)為observation。
尋找一種映射,從高維空間中恢復(fù)出低維流形來(lái),從而利用流形的低維坐標(biāo)表示高位空間的數(shù)據(jù)點(diǎn),實(shí)現(xiàn)數(shù)據(jù)降維的目的。
2. 流形學(xué)習(xí)的分類(lèi)
分線(xiàn)性和非線(xiàn)性兩種;
線(xiàn)性的流形學(xué)習(xí)方法:主成份分析(PCA)
非線(xiàn)性的流形學(xué)習(xí)方法:等距映射(Isomap)、拉普拉斯特征映射(Laplacian eigenmaps,LE)、局部線(xiàn)性嵌入(Locally-linear embedding,LLE),tSNE,UMAP