Seurat识别细胞类群的原理(FindNeighbors和FindClusters)

众所周知,seurat在降维之后主要依据两个函数来进行细胞分类,这里我们来深入了解一下seurat如何进行细胞分类的。
首先我们来看有关分类的两个函数

library(Seurat)
?FindNeighbors
Description:
    Constructs a Shared Nearest Neighbor (SNN) Graph for a given
     dataset. We first determine the k-nearest neighbors of each cell.
     We use this knn graph to construct the SNN graph by calculating
     the neighborhood overlap (Jaccard index) between every cell and
     its k.param nearest neighbors.
这个地方说明,这个函数首先是计算每个细胞的KNN,也就是计算每个细胞之间的相互距离,依据细胞之间距离的graph来构建snn graph(依据细胞之间“邻居”的overlop)
这里有三个问题:1、knn是什么,2、Jaccard index又是什么  3、邻居的判定
我们来看看参数(主要参数):
distance.matrix: Boolean value of whether the provided matrix is a
          distance matrix; note, for objects of class ‘dist’, this
          parameter will be set automatically
      这个参数我们通常不会设置,但是默认是TRUE。
k.param: Defines k for the k-nearest neighbor algorithm
      这个参数就是用来定义最相近的几个细胞作为邻居,默认是20
compute.SNN: also compute the shared nearest neighbor graph
     计算共享邻居的数量,一般不设置
prune.SNN: Sets the cutoff for acceptable Jaccard index when computing
          the neighborhood overlap for the SNN construction. Any edges
          with values less than or equal to this will be set to 0 and
          removed from the SNN graph. Essentially sets the strigency of
          pruning (0 - no pruning, 1 - prune everything).
     在计算SNN构造的邻域重叠时,为可接受的Jaccard index设置截止值。 值小于或等于此值的任何边将被设置为0并从SNN图中删除。 本质上设置修剪的严格程度(0-不修剪,1-修剪所有内容)。**这个我们在后面讨论**。
nn.method: Method for nearest neighbor finding. Options include: rann,
          annoy
      这个参数提供了如何判断邻居的方法,提供的可选是rann和annoy,**这个我们在后面讨论**。
      annoy.metric: Distance metric for annoy. Options include: euclidean,
          cosine, manhattan, and hamming
      (annoy距离的方式)
force.recalc: Force recalculation of SNN
      SNN强制重新计算,一般不设置

我们来一一解决其中的问题

1、什么是Jaccard index

Jaccard index , 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。
给定两个集合A,B,Jaccard 系数定义为A与B交集的大小与A与B并集的大小的比值,定义如下:

Jaccard.png

这个函数用在这里就是说,两个细胞共有"邻居"数量和所有"邻居"数量的比值,值越大,共享的”邻居“越多,两个细胞越相似。
还有Jaccard 距离的概念,公式是:
Jaccard 距离.png

2、KNN是什么,KNN是最简单的机器学习算法,这里不多介绍了,大家可以参考百度KNN
3、邻居判定方法的rann和annoy

首先来说annoy,annoy全称“Approximate Nearest Neighbors Oh Yeah”,是一种适合实际应用的快速相似查找算法。Annoy 同样通过建立一个二叉树来使得每个点查找时间复杂度是O(log n),和kd树不同的是,annoy没有对k维特征进行切分。annoy的每一次空间划分,可以看作聚类数为2的KMeans过程。收敛后在产生的两个聚类中心连线之间建立一条垂线(图中的黑线),把数据空间划分为两部分。在划分的子空间内不停的递归迭代继续划分,直到每个子空间最多只剩下K个数据节点,划分结束。最终生成的二叉树具有如下类似结构,二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息。

annoy.png

这听起来不像人话,主要的思想类似于层次聚类,不同的是annoy采用的是二分法,一直分割直到剩下k个数据点,这是一种计算相似性的算法,细胞之间距离的计算提供了euclidean, cosine, manhattan, and hamming等几种。
rann暂时没查到,以后更新

接下来查看第二个函数

library(Seurat)
?FindClusters
Description:

     Identify clusters of cells by a shared nearest neighbor (SNN)
     modularity optimization based clustering algorithm. First
     calculate k-nearest neighbors and construct the SNN graph. Then
     optimize the modularity function to determine clusters. For a full
     description of the algorithms, see Waltman and van Eck (2013) _The
     European Physical Journal B_. Thanks to Nigel Delaney
     (evolvedmicrobe@github) for the rewrite of the Java modularity
     optimizer code in Rcpp!
这个说明,依据SNN来识别类群,当然算法很复杂,我们可以参考给的网址。
我们来看看主要参数
resolution: Value of the resolution parameter, use a value above
          (below) 1.0 if you want to obtain a larger (smaller) number
          of communities.
这个参数可以理解为清晰度,值越低,可以容纳更少的共享邻居数量,聚类数也会变少。
modularity.fxn: 计算模块系数函数,1为标准函数;2为备选函数,这里没有具体说明是什么函数,我认为1是上面提到的Kronecker delta函数。
method: Method for running leiden (defaults to matrix which is fast
          for small datasets). Enable method = "igraph" to avoid
          casting large data to a dense matrix.
      这个参数表示leiden算法的计算方式,(我对算法是小白~,求大神告知)
algorithm: 模块系数优化算法,1使用原始Louvain算法;2使用Louvain algorithm with multilevel refinement;3使用SLM算法;4使用Leiden算法(注:4需要额外安装插件)
n.start: 随机开始的数量,默认是10
random.seed: 随机数种子,默认是0

里面有很多算法方面的内容,对于数学而言,不会就是不会,没什么炫耀的,但是要知道其原理。
,这里分享给大家一些链接,大家可以多多研究研究。
Kronecker delta函数
leiden
Louvain
SLM
请保持愤怒,让王多鱼倾家荡产

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

推荐阅读更多精彩内容

  • Seurat 指导聚类教程 参照官网教程 用了自己的一批真实的数据,总共有7038个细胞。以下是cellrange...
    11的雾阅读 15,089评论 10 26
  • 注:这篇技术文章是9月我就职于W公司时在完成新闻聚类后整理的技术文档,因数据管控严格,文档中的聚类结果无法从公司电...
    Mc杰夫阅读 8,547评论 5 5
  • 来自公众号:Java建设者作者cxuan 我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中...
    码农小光阅读 905评论 0 16
  • 聚类算法 前面介绍的集中算法都是属于有监督机器学习方法,这章和前面不同,介绍无监督学习算法,也就是聚类算法。在无监...
    飘涯阅读 41,252评论 3 52
  • 1)物理地址:就是内存的地址,是以字节为单位,对内存单元的编址。2)逻辑地址:用户源程序经过编译或汇编后形成的目标...
    見贤思齊_阅读 453评论 0 1