SEACells 代码学习 (1)

来自:SEACells infers transcriptional and epigenomic cellular states from single-cell genomics data。

  1. 简单介绍
    单细胞状态的细胞聚合(SEACells)是一种基于图的算法,它使用kernal archetypal分析来计算元细胞。我们的SEACells算法基于几个关键假设:(1)单细胞分析数据可以被近似为一个低维manifold(phenotypic manifold);(2)细胞间观察到的大多数变异性是由于不完全采样造成的;以及(3)大多数细胞可以被分配到一组有限的细胞状态中,每个状态都有独特的基因调控程序组合特征。

该算法首先构建一个表示phenotypic manifold)的最近邻图。然后,它应用archetypal分析来迭代地精炼meta细胞。最后,它将计数聚合到一组输出的meta细胞中。manifold构建是针对每种数据模态量身定制的,之后算法可以以数据类型不可知的方式进行。

archetypal分析是一种稳健的矩阵分解技术,已经应用于数据矩阵中,以识别处于细胞表型空间边界的极端细胞状态。与此不同的是,将archetypal分析应用于细胞-细胞相似性核心矩阵。这种核心将细胞投影到一个更高维的空间中,在这个空间中,两个细胞仅在它们共享邻居且与共享邻居的距离相似时才相似。这种转换所施加的更严格的相似性条件将高度相似的细胞投影到微小的簇中,使得边界细胞成为其簇中与每个其他细胞最相似的细胞,从而使得核心空间中的原型成为每个独特细胞状态的良好代表。因此,核心原型分析将细胞划分为高度相似的细胞的紧密簇。在细胞-细胞相似性矩阵的对角线上形成紧密的块,这些块代表不同的细胞状态。

SEACells的性能得益于:(1)使用adaptive Gaussian kernel来表示单细胞表型,以准确捕获数据中的主要变异源;(2)使用maximum–minimum sampling 进行初始化,确保在表型空间中均匀地表示细胞状态,不论细胞密度如何;以及(3)应用核心原型分析来识别高度可解释的meta细胞。自适应核心和最大-最小采样使得SEACells特别擅长稳健地识别罕见的细胞状态,这些状态通常代表在生物学或疾病中起关键作用的重要群体。

  1. core 代码 SEACells object
def SEACells(
    ad,
    build_kernel_on: str,
    n_SEACells: int,
    use_gpu: bool = False,
    verbose: bool = True,
    n_waypoint_eigs: int = 10,
    n_neighbors: int = 15,
    convergence_epsilon: float = 1e-3,
    l2_penalty: float = 0,
    max_franke_wolfe_iters: int = 50,
    use_sparse: bool = False,
):
    """Core SEACells class.

    :param ad: (AnnData) annotated data matrix
    :param build_kernel_on: (str) key corresponding to matrix in ad.obsm which is used to compute kernel for metacells
                            Typically 'X_pca' for scRNA or 'X_svd' for scATAC
    :param n_SEACells: (int) number of SEACells to compute
    :param use_gpu: (bool) whether to use GPU for computation
    :param verbose: (bool) whether to suppress verbose program logging
    :param n_waypoint_eigs: (int) number of eigenvectors to use for waypoint initialization
    :param n_neighbors: (int) number of nearest neighbors to use for graph construction
    :param convergence_epsilon: (float) convergence threshold for Franke-Wolfe algorithm
    :param l2_penalty: (float) L2 penalty for Franke-Wolfe algorithm
    :param max_franke_wolfe_iters: (int) maximum number of iterations for Franke-Wolfe algorithm
    :param use_sparse: (bool) whether to use sparse matrix operations. Currently only supported for CPU implementation.

    See cpu.py or gpu.py for descriptions of model attributes and methods.
    """

这里有3个模式,dense matrix和sparse matrix在cpu上,和 dense matrix 在gpu上。我们这里只看sparse matrix在cpu上。

if use_sparse:
        assert (
            not use_gpu
        ), "Sparse matrix operations are only supported for CPU implementation."
        try:
            from . import cpu
        except ImportError:
            import cpu
        model = cpu.SEACellsCPU(
            ad,...
        )

        return model

如果use_sparse为True,则会断言use_gpu必须为False,表明稀疏矩阵操作只支持在CPU上进行。
接着,尝试从当前包中导入一个cpu模块(表示为from . import cpu)。如果失败,则回退到导入包外的cpu模块(表示为import cpu)。

  1. SEACellsCPU Class

init: 类的构造函数,用于初始化SEACells模型。它接受诸如注释数据矩阵(ad)、用于计算元细胞的kernel(build_kernel_on)、要计算的SEACells数量(n_SEACells)等参数。

construct_kernel_matrix: 使用PCA/SVD和最近邻方法从数据矩阵构建核心矩阵。


    def construct_kernel_matrix(
        self, n_neighbors: int = None, graph_construction="union"
    ):

        # input to graph construction is PCA/SVD
        kernel_model = build_graph.SEACellGraph(
            self.ad, self.build_kernel_on, verbose=self.verbose
        )

        # K is a sparse matrix representing input to SEACell alg
        if n_neighbors is None:
            n_neighbors = self.n_neighbors

        M = kernel_model.rbf(n_neighbors, graph_construction=graph_construction)
        self.kernel_matrix = M

        # Pre-compute dot product
        self.K = self.kernel_matrix @ self.kernel_matrix.T

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

推荐阅读更多精彩内容