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閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容

  • Seurat 指導聚類教程 參照官網教程 用了自己的一批真實的數據,總共有7038個細胞。以下是cellrange...
    11的霧閱讀 15,613評論 10 26
  • 注:這篇技術文章是9月我就職于W公司時在完成新聞聚類后整理的技術文檔,因數據管控嚴格,文檔中的聚類結果無法從公司電...
    Mc杰夫閱讀 8,650評論 5 5
  • 來自公眾號:Java建設者作者cxuan 我們每個程序員或許都有一個夢,那就是成為大牛,我們或許都沉浸在各種框架中...
    碼農小光閱讀 923評論 0 16
  • 聚類算法 前面介紹的集中算法都是屬于有監督機器學習方法,這章和前面不同,介紹無監督學習算法,也就是聚類算法。在無監...
    飄涯閱讀 41,427評論 3 52
  • 1)物理地址:就是內存的地址,是以字節為單位,對內存單元的編址。2)邏輯地址:用戶源程序經過編譯或匯編后形成的目標...
    見賢思齊_閱讀 464評論 0 1