单细胞数据的降维

博文名称:Reduce Dimensions for Single Cell
博文链接:https://towardsdatascience.com/reduce-dimensions-for-single-cell-4224778a2d67
发表时间:Aug 21, 2019


From Becht et al., Nature Biotechnology 2019

这是《生命科学的数学统计和机器学习》专栏中的第8篇文章,我试图涵盖生物信息学、生物医学、遗传学、进化科学等常见的分析技术。 今天我们将讨论应用于单细胞基因组数据的降维技术。 其中,我们将比较线性降维和非线性降维技术,以了解为什么tSNEUMAP成为单细胞生物学的黄金标准。

单细胞数据的非线性结构 (Non-Linear Structure of Single Cell Data)

单细胞基因组数据是一种高维数据,大约有20 000 维,对应于蛋白质编码基因。 因此,为了简化数据复杂性并克服维度诅咒(维灾),可以从分析中消除冗余基因(redundant genes)。排除冗余基因并将数据投影到一个潜在空间(latent space),使该空间中数据的隐藏结构变得清晰透明是降维的目标。

从原始表达矩阵到潜在特征的处理过程:from Wang et al., Nature Methods 14, p. 414–416 (2017)

主成分分析(Principal Component Analysis, PCA)是一种基本的线性降维技术,由于单细胞的高度非线性结构,已被广泛认为不适用于单细胞数据。直觉来看,单细胞的非线性主要来自基因表达式矩阵中由dropout效应而引起的大量的随机零值。通常,单个细胞数据在表达式矩阵中具有60-80%的零元素。这样的话,单个细胞数据就类似于图像数据,例如,对于手写数字MNIST数据集的图像,我们有86%的像素为零值。
MNIST手写数字数据集的tSNE非线性降维

表达矩阵中的大量随机零值使得数据的行为类似于非线性Heaviside阶跃函数,即无论“非零”有多少,基因表达都是零或非零。让我们展示针对癌症相关成纤维细胞 (CAF) 单细胞数据集的进行的基本线性和非线性降维技术。

线性降维技术

我们先从线性降维技术开始。在这里,我们读取单细胞CAFs表达数据,并进行log-transform处理,log-transform被视为是对数据进行归一化的方法。通常,列是基因,行是细胞,最后一列是CAFs数据集中发现的4个细胞群(cluster)的 ID,即该细胞的cluster名称。

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)

现在我们将使用scikit-learn流形学习库(scikit-learn manifold learning)应用最主流的线性降维技术。 查看我的github站点获得完整的脚本,为了简单起见,这里只显示线性判别分析 (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))

CAFs单细胞数据集应用线性降维技术

我们可以立即得出结论,线性降维技术并不能完全解决单细胞数据中的异质性问题。 例如,黄色的一小群细胞似乎没有与其他3个细胞群区分开。 唯一的例外是LDA 图,但这并不是真正的无监督学习方法,因为与其他方法相比,它通过细胞标签(cluster信息)来构建类别之间最可分离的潜在特征。 因此,线性降维技术擅长保留数据的全局结构(所有数据点之间的连接),而对于单细胞数据似乎更重要的是保持数据的局部结构(相邻点之间的连接)。图片来源
MDS试图保持全局结构,而LLE则保持数据的局部结构

探索如何将数据如何转化为潜在的低维特征呈现真的很有趣,每一种降维技术都值得发表自己的文章。想想为什么基本上每种降维技术都只适用于某一特定研究领域,而在其他领域却不常见,这也很有趣。例如,独立成分分析(Independent Component Analysis,ICA)用于信号处理,非负矩阵分解(Non-Negative Matrix Factorization,NMF)用于文本挖掘,非度量多维缩放(NMDS)在宏基因组分析等中非常常见,但很少看到NMF用于RNA测序数据分析。

非线性降维技术

我们转向非线性降维技术,检查它们是否能够解决单细胞数据中的所有隐藏结构。同样,可以在github上找到完整的代码,为了简单起见,这里只展示了tSNE算法的代码,已知该算法难以处理真正的高维数据,因此通常只在20–50个预降维数据上运行,例如PCA。

CAFs单细胞数据集应用非线性降维技术

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)

在这里我们看到,大多数非线性降维技术通过保留数据的局部结构(相邻点之间的连接)成功地解决了黄色小细胞群。例如,局部线性嵌入(Locally Linear Embedding,LLE)通过一组局部线性平面逼近非线性流形,而这对于重建稀有细胞群(例如黄色小细胞群)至关重要。最好的可视化来自 tSNE 和 UMAP。tSNE 捕获局部结构以及LLE,在这种特定情况下似乎对原始表达式数据有效,但是使用PCA进行预降维通常会提供更为精简和独特的聚类。相比之下,UMAP保留了局部和全局数据结构,并基于拓扑数据分析,其中流形表示为基本单纯形Simplex单元的集合,这确保了数据点之间的距离在高维流形中看起来并不完全相等,但类似于2D 空间的距离分布。换言之,UMAP是一次优雅的尝试,旨在打破维度诅咒,我将在另一篇文章中专门介绍UMAP背后的数学

总结

在这篇文章中,我们了解到单细胞基因组数据具有非线性结构(non-linear structure ),这是由dropout效应导致表达矩阵中大量随机零值的原因。 线性流形学习(linear manifold learning)技术保留了数据的全局结构,但是不能完全解析所有存在的细胞群。 相比之下,保持数据点之间的局部连通性(LLE、tSNE、UMAP)是单细胞基因组数据成功降维的关键因素。


基本概念

1. 流形学习方法(Manifold Learning)
简称流形学习,自2000年在著名的科学杂志《Science》被首次提出以来,已成为信息科学领域的研究热点。在理论和应用上,流形学习方法都具有重要的研究意义。假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低维流形结构,即找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化。它是从观测到的现象中去寻找事物的本质,找到产生数据的内在规律。

目的:在保持流形上点的某些几何性质特征的情况下,找出一组对应的内蕴坐标(intrinsic coordinate),将流形尽量好的展开在低维平面上,这种低维表示也叫内蕴特征(intrinsic feature),外围空间的维数叫观察维数,其表示叫自然坐标,在统计上称为observation。

寻找一种映射,从高维空间中恢复出低维流形来,从而利用流形的低维坐标表示高位空间的数据点,实现数据降维的目的。

2. 流形学习的分类
线性非线性两种;
线性的流形学习方法:主成份分析(PCA)
非线性的流形学习方法:等距映射(Isomap)、拉普拉斯特征映射(Laplacian eigenmaps,LE)、局部线性嵌入(Locally-linear embedding,LLE),tSNE,UMAP

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容