Garnett構建自己的分類器以定義細胞類型

2021-02-18 單細胞天地

如果您的組織類型不存在分類器我們的倉庫中,或者數據中不包含您期望的細胞類型,那麼您需要生成自己的分類器。訓練分類器的第一步是加載單細胞數據。

因為Garnett 建立在 Monocle(http://cole-trapnell-lab.github.io/monocle-release)上,所以Garnett 的數據保存在CellDataSet (CDS)類的對象中。這個類派生自Bioconductor ExpressionSet類,它為那些分析過生物微陣列實驗的人提供了一個常見的接口。Monocle提供了關於如何生成輸入cds的詳細文檔here(http://cole-trapnell-lab.github.io/monocle-release/docs/#the-celldataset-clas)。

例如,Garnett包含一個來自PBMC 10x V1表達式數據的小數據集.

1library(monocle3)
2library(garnett)
3# load in the data
4# NOTE: the 'system.file' file name is only necessary to read in
5# included package data
6#
7mat <- Matrix::readMM(system.file("extdata", "exprs_sparse.mtx", package = "garnett"))
8fdata <- read.table(system.file("extdata", "fdata.txt", package = "garnett"))
9pdata <- read.table(system.file("extdata", "pdata.txt", package = "garnett"),
10                    sep="\t")
11row.names(mat) <- row.names(fdata)
12colnames(mat) <- row.names(pdata)
13
14# create a new CDS object
15#pd <- new("AnnotatedDataFrame", data = pdata)
16#fd <- new("AnnotatedDataFrame", data = fdata)
17pbmc_cds <- new_cell_data_set(as(as.matrix(mat), 'sparseMatrix'),
18                              cell_metadata = pdata,
19                              gene_metadata = fdata)
20
21# generate size factors for normalization later
22#pbmc_cds <- estimateSizeFactors(pbmc_cds)#
23
24pbmc_cds = preprocess_cds(pbmc_cds, num_dim = 100)

構造標記(marker )文件

除了表達數據之外,您需要的第二個主要輸入是一個標記文件(marker file)。標記文件包含以易於閱讀的文本格式編寫的單元類型定義列表。細胞類型定義告訴Garnett如何選擇細胞來訓練模型。每個細胞類型定義以「>」符號和細胞類型名稱開頭,後面是一系列帶有定義信息的行。定義行以關鍵字和':'開頭,條目用逗號分隔。

一個簡單有效的例子:

1>B cells
2expressed: CD19, MS4A1
3
4>T cells
5expressed: CD3D

有幾種方法可以在Garnett標記文件格式中定義細胞類型。通常,每個細胞的定義可以包含三個主要組件。只需要第一個組件。

細胞類型的第一個也是最重要的規範是它的表達式。Garnett提供了幾種指定標記基因的選項,詳情如下。

1Format  
2expressed: gene1, gene2 
3not expressed: gene1, gene2 

這是為你的細胞類型指定標記基因的默認方法。在使用這個規範時,Garnett為每個細胞計算一個標記分數,包括潛在的洩漏(leakage)、總體表達水平和read 深度。expressed:標記應該特定於所定義的細胞類型。

FormatExampleexpressed above: gene1 value, gene2 valueexpressed above: MYOD1 4.2, MYH3 700expressed below: gene1 value, gene2 valueexpressed below: PAX6 20, PAX3 4expressed between: gene1 value1 value2, gene2 value1 value2expressed between: PAX6 10 20, PAX3 4 100

這是指定expression的另一種方法,如果您知道某個基因的確切表達範圍,這種方法會很有用。但是,通常我們不建議使用這些規範,因為它們不會考慮每個細胞中的read深度和總體表達。數據值與輸入數據的單位相同。

定義元數據

除了表達式信息之外,您還可以使用元數據進一步細化細胞類型定義。這也是指定數據中所期望的任何子類型的地方。

FormatExamplesubtype of: celltypesubtype of: T cellscustom meta data: attribute1, attribute2tissue: spleen, thymus

subtype of:允許您在定義文件中指定細胞類型是另一個細胞類型的子類型。
custom meta data:規範允許您為細胞類型提供任何進一步的元數據需求。CDS對象的pData表中的任何列都可以用作元數據規範。在上面的示例中,pData表中有一個名為「tissue」的列。

提供你的證據

最後,我們強烈建議您記錄如何選擇標記定義。為了便於跟蹤,我們提供了一個額外的規範—references:—它將存儲每種類型的引用信息。添加一組url或DOIs,它們將包含在分類器中。有關訪問此信息的函數,請參見此處(https://cole-trapnell-lab.github.io/garnett/docs#viewing-references)。

添加注釋

與R代碼類似,我們已經包含了一個注釋字符#,這樣您就可以在您的標記文件中添加注釋/注釋。任何在同一條線上的#之後的內容都會被忽略。

所以一個完整的例子是這樣的:

1>B cells
2expressed: CD19, MS4A1
3expressed above: CD79A 10
4references: https://www.abcam.com/primary-antibodies/b-cells-basic-immunophenotyping,
510.3109/07420528.2013.775654
6
7>T cells
8expressed: CD3D
9sample: blood # A meta data specification
10
11>Helper T cells
12expressed: CD4
13subtype of: T cells
14references: https://www.ncbi.nlm.nih.gov/pubmed/?term=1200072

目前,標記文件不能有回車(\r),如果您在某些Windows文本編輯器中生成標記文件,就會自動包括回車。相反,您必須使用換行字符(\n)。有許多方法可以在Windows上替換回車,例如使用notepad++,您可以使用replace、choose extended和replace all \r with \n。我打算儘快以更自動化的方式解決這個問題。

檢查標記

因為定義標記文件通常是過程中最困難的部分,所以Garnett提供了一些函數來檢查標記是否能夠正常工作。相關的兩個函數是check_marker和plot_marker。check_marker生成關於標記的信息表,plot_marker繪製最相關的信息。
除了包含的小數據集之外,我們還在包中包含了兩個示例標記文件:pbmc_bad_markers.txt

在生成您的marker_check data.frame 之後,您可以使用我們內建的繪圖函數plot_marker來查看結果。

1library(org.Hs.eg.db)
2marker_file_path <- system.file("extdata", "pbmc_bad_markers.txt",
3                                package = "garnett")
4marker_check <- check_markers(pbmc_cds, marker_file_path,
5                              db=org.Hs.eg.db,
6                              cds_gene_id_type = "SYMBOL",
7                              marker_file_gene_id_type ="SYMBOL")
8
9plot_markers(marker_check)

db: db is a required argument for a Bioconductor AnnotationDb-class package used for converting gene IDs. For example, for humans use org.Hs.eg.db(http://bioconductor.org/packages/3.8/data/annotation/html/org.Hs.eg.db). See available packages at the Bioconductor website(http://bioconductor.org/packages/3.8/data/annotation/). Load your chosen db using library(db). If your species does not have an AnnotationDb-class package, see here(https://cole-trapnell-lab.github.io/garnett/docs/#my-species-doesn-t-hav).

cds_gene_id_type: This argument tells Garnett the format of the gene IDs in your CDS object. It should be one of the values in columns(db). The default is "ENSEMBL".

marker_file_gene_id_type: Similarly to above, this argument tells Garnett the format of the gene IDs in your marker file.


這個標記圖提供了一些關於所選標記是否正確的關鍵信息。首先,紅色標記「not in db」讓我們知道標記ACTN在org.Hs.eg.db注釋中沒有作為「SYMBOL」出現。在本例中,它是一個列印錯誤。接下來,x軸顯示每個標記的模糊度評分—當包含該標記時,測量有多少個cell接受了模糊標籤—在本例中,ACTB和PTPRC具有很高的模糊度,應該排除。

check_marker輸出的值和plot_marker繪製的值是分類器可以選擇的cell 數量的估計值。然而,它使用啟發式快速找到候選細胞,並不能完全匹配標記所選擇的細胞。請使用這些數字作為相對的度量,而不是訓練集的絕對表示。

關於歧義分數的進一步說明:歧義分數是當一個標記被包含在標記文件中時,一個標記被標記為「歧義」的cell 的分數。然而,一個高模糊度的分數並不一定意味著一個給定的標記是不具體的。這可能意味著一個不同的標記是罪魁禍首,但該標記也提名了許多其他未標記的細胞(高提名率)。在決定排除哪個標記之前,請仔細查看歧義度高的標記和最模糊的cell類型marker。

在製作標記圖之後,您可能想要修改標記文件。在我們的示例中,我們將刪除ACTN、ACTB和PTPRC以得到最終的「pbmc_test」。txt的標記文件。

默認情況下,Garnett 將基因id轉換成ENSEMBL用於分類器。這使得分類器是可移植的,這樣它們就可以對未來可能具有不同基因id的數據集進行分類。然而,對於某些生物體,ENSEMBL id要麼不可用,要麼不常用。在這些情況下,可以在train_cell_classifier和check_marker中使用參數classifier_gene_id_type來指定不同的ID類型。您選擇的值將與分類器一起存儲,因此在對未來的數據集進行分類時不需要再次指定它。

訓練分類器

現在是訓練分類器的時候了。參數應該與check_marker的參數非常接近。下面我將從默認值更改的一個參數是num_unknown參數。這告訴Garnett 應該比較多少個外群細胞。默認值是500,但是在這個只有很少cell的數據集中,我們需要更少的cell。

1library(org.Hs.eg.db)
2set.seed(260)
3
4marker_file_path <- system.file("extdata", "pbmc_test.txt",
5                                package = "garnett")
6pbmc_classifier <- train_cell_classifier(cds = pbmc_cds,
7                                         marker_file = marker_file_path,
8                                         db=org.Hs.eg.db,
9                                         cds_gene_id_type = "SYMBOL",
10                                         num_unknown = 50,
11                                         marker_file_gene_id_type = "SYMBOL")
12head(pData(pbmc_cds))

1> head(pData(pbmc_cds))
2DataFrame with 6 rows and 4 columns
3                           tsne_1           tsne_2
4                        <numeric>        <numeric>
5AAGCACTGCACACA-1  3.8403149909359 12.0841914129204
6GGCTCACTGGTCTA-1 9.97096226657347 3.50539308651821
7AGCACTGATATCTC-1 3.45952940410281 4.93527280576176
8ACACGTGATATTCC-1 1.74394947394641 7.78267061846286
9ATATGCCTCTGCAA-1 5.78344829514223 8.55889827553495
10TGACGAACCTATTC-1 10.7928530485958 10.5852739146963
11                       Size_Factor FACS_type
12                         <numeric>  <factor>
13AAGCACTGCACACA-1 0.559181445161514   B cells
14GGCTCACTGGTCTA-1 0.515934033527584   B cells
15AGCACTGATATCTC-1 0.698028398302026   B cells
16ACACGTGATATTCC-1 0.815631008885519   B cells
17ATATGCCTCTGCAA-1  1.11532798424345   B cells
18TGACGAACCTATTC-1 0.649469901028841   B cells

運行train_cell_classifier之後,類型為「garnett_classifier」的輸出對象包含對細胞進行分類所需的所有信息。

查看分類基因

Garnett 分類是使用多項彈性-網絡回歸訓練(multinomial elastic-net regression)。這意味著選擇某些基因作為區分細胞類型的相關基因。所選擇的基因可能是有趣的,所以Garnett 包含了一個訪問所選擇基因的功能。注意:Garnett 沒有對輸入標記進行正則化,所以無論如何,它們都會被包含在分類器中。

我們用來查看相關基因的函數是get_feature_genes。參數是分類器,您想查看哪個節點(如果您的樹是分層的)—使用「root」作為頂部節點,使用父細胞類型名稱作為其他節點,使用db作為您的物種。如果設置convert_ids = TRUE,該函數將自動將基因id轉換為符號。

1feature_genes <- get_feature_genes(pbmc_classifier,
2                                   node = "root",
3                                   db = org.Hs.eg.db)
4head(feature_genes)
5                   B cells      T cells     Unknown
6(Intercept)     -4.44471924  2.590206989  1.85451225
7ENSG00000187608 -0.10903325 -0.199658082  0.30869133
8ENSG00000157873  0.06411921 -0.295797377  0.23167817
9ENSG00000157191 -0.07677221 -0.155893113  0.23266532
10ENSG00000173436  0.02649831  0.089393639 -0.11589195
11ENSG00000117318  0.07400983 -0.009415156 -0.06459467
12

Viewing references

我們在上面解釋了如何在標記文件中包含關於如何選擇標記的文檔。為了獲取這些信息—查看如何為已經訓練好的分類器選擇標記—使用函數get_classifier_references。除了分類器之外,還有一個額外的可選參數,稱為cell_type。如果傳遞細胞類型的名稱,則僅列印該單元類型的引用,否則將全部列印。

1get_classifier_references(pbmc_classifier )
2$`B cells`
3[1] "https://www.ncbi.nlm.nih.gov/pubmed/?term=23688120"
4[2] "https://www.ncbi.nlm.nih.gov/pubmed/?term=21149806"
5
6$`T cells`
7[1] "https://www.ncbi.nlm.nih.gov/pubmed/?term=1534551"

提交一個分類器

我們鼓勵你提交你的高質量的分類器給我們,這樣我們可以使他們對社區可用。為此,打開一個特刊並在Garnett github存儲庫中填寫表單。點擊這裡,點擊「New issue」按鈕開始!(https://github.com/cole-trapnell-lab/garnett/issues)

應用您的分類器

單細胞轉錄組數據分析||Garnett細胞類型注釋工具

相關焦點

  • 使用K-近鄰算法構建鳶尾屬分類器
    鳶尾屬是一種草本植物,約有300多種分類。現在需要建立一個分類器,對鳶尾屬進行自動分類。第一種分類算法稱為監督學習,有樣本數據可供參考;第二種分類方法為無監督學習,沒有樣本數據參考,完全需要算法自己完成分類。在這個案例中,主要設計監督學習的分類算法。監督學習算法需要有樣本數據為算法提供參考,建立樣本數據是鳶尾屬分類器的第一步工作。
  • 聽診器行業定義及分類
    打開APP 聽診器行業定義及分類 佚名 發表於 2016-08-17 14:43:37 聽診器行業定義是指內外婦兒醫師最常用的診斷用具,是醫師的標誌,現代醫學即始於聽診器的發明。
  • sklearn入門教程:監督學習流程與線性分類器
    根據目標預測變量的類型不同,我們可以把監督學習任務大體分為分類學習(預測一個分類標籤)與回歸預測(函數輸出是一個連續的值)兩類。在實際生活和工作中,我們會遇到許許多多的分類問題,比如,醫生對腫瘤性質的判定;郵政系統對手寫體郵編數字進行識別;生物學家對物種類型的鑑定;生物信息工程師對基因功能的鑑定;甚至,我們還能夠對某些大災難的經歷者是否生還進行預測等。為了展現其廣泛的應用環境,對於每一種分類學習模型,我會整理一系列文章,使用不同的任務以及數據樣例進行說明。
  • 基於Adaboost算法的人臉檢測分類器!
    本文主要基於統計的方法,通過Adaboost算法和Haar特徵來構建Haar分類器,對人臉和非人臉進行分類。本文目錄    1. 算法要點        1.1. Haar分類器訓練步驟        1.2. Haar的局限性    2. Haar原理解析        2.1.
  • 手把手教你用PyTorch實現圖像分類器(第一部分)
    最後一個項目是用PyTorch創建一個102種不同類型的花的圖像分類器。在做這個final project的時候,很多同學都遇到了類似的問題和挑戰。當我接近完成的時候,我決定與大家分享一些在未來對他人有益的建議和見解。通過3篇短文,介紹如何實現圖像分類器的概念基礎——這是一種能夠理解圖像內容的算法。
  • 哈佛大學:細胞如何自我分類
    「從理解和逆向工程中可以學到一個明確的教訓,即正在發育的胚胎中的細胞如何能夠以這種健壯和可複製的方式構建生物體的成分。」蜂窩狀的拔河比賽。微量移液測定法測量兩個細胞之間的粘附力。此外,發育中的胚胎中的細胞不斷分裂並處於運動狀態,這可能會擾亂形態發生信號。這導致細胞類型的初始混合圖案。儘管如此,即使在嘈雜的開始時,細胞也會自動分類成精確的模式,在當前的研究中,研究小組著手了解如何進行。他們專注於50年前提出的假設,即差異粘附。該模型表明細胞會粘附於某些其他細胞類型,並以類似於油和醋隨時間分離的方式自我分選。
  • 最全分類!計算機視覺的圖像標註類型及應用
    和邊界框相比,多邊形分割可以切掉目標邊緣的噪聲/無用像素,避免迷惑分類器。3. 線標註(Line Annotation)線標註創建直線和曲線,主要用於描繪圖像的各個部分。當需要標註並劃分界限的部分太小或者太薄,邊界框等方法無法描繪時,便可使用線標註。
  • ICLR2020|分類器其實是基於能量的模型?判別式分類器設計新思路
    因此,即使僅以分類器為目標而訓練時,生成模型的表現也遠遜於最佳判別模型的表現。因此,判別性能的下降就會遠遠超過來自模型中生成組件的好處。 近期一些研究試圖利用可逆架構來提升生成模型的判別表現,但這些方法的表現仍不及以生成模型為目標而聯合訓練的純判別式方法。本論文提出使用基於能量的模型(EBM/energy based models)來幫助生成模型在下遊的判別式問題上發揮自己的潛力。
  • 用 PyTorch 實現一個簡單的分類器
    有的教程又淺嘗輒止,師傅領到了門檻跟前,總感覺自己還沒有進門,教程就結束了。所以我總結了一下自己當初學習的路線,準備繼續深入鞏固自己的 pytorch 基礎;另一方面,也想從頭整理一個教程,從沒有接觸過 pytorch 開始,到完成一些最新論文裡面的工作。以自己的學習筆記整理為主線,大家可以針對參考。第一篇筆記,我們先完成一個簡單的分類器。
  • CS231N 01: 圖像分類器
    一個好的圖像分類模型必須對所有這些變化的交叉積(cross product)不變,同時保持對類間變化的敏感性。我們將構建的所有分類器都滿足這一個共同的 API:它們有一個 train(X,y) 函數,從中獲取數據和標籤進行學習。在內部,這個類應該建立標籤的某種模型,以及如何從數據中預測它們。還有一個 predict(X) 函數,它接收新的數據並預測標籤。最後是分類器本身。這裡是一個簡單的最近鄰分類器的實現,它的L1距離滿足這個模板。
  • .|2020|核酸外切酶III耦合DNAzyme構建的信號放大器在高效microRNA-21檢測
    因此,作者構建了一個簡單、通用型的核酸外切酶III (Exo-III)驅動的級聯DNAzyme放大器(cascade DNAzyme amplifier, CSA)。這种放大器具備超低背景的優勢,實現了體外和活細胞中microRNA-21高效分析。其原理如圖1所示。具體地說,一個多功能DNAzyme-caged hairpin (HP-Dz)探針在3』和5』端編碼兩個單鏈來用於靶標的識別單元。
  • 果蠅細胞中發現五種主要染色質類型
    荷蘭科學家在果蠅細胞中發現五種主要染色質類型。轉錄活性常染色質與受阻遏異染色質的染色質傳統分類曾是一個有用的模型,但它應該進行升級,以適應人們日益增加的有關染色質功能域的知識。綠色類和藍色類染色質與兩種之前定義的受阻遏異染色質類型相一致:「典型的」異染色質包括異染色質蛋白質1(HP1)、(綠染色質)和多梳組(PcG)關聯染色質(藍色染色質)。利用染色質免疫沉澱反應,Filion等人還發現組蛋白在綠色和藍色區域改變了,這與這些異染色質亞型之前的認知相匹配。
  • ACL 2018|史丹福大學:用自然語言解釋訓練分類器
    BabbleLabble,解決傳統精確分類器訓練需要許多標籤,但是每個標籤只提供有限信息(二進位分類的一位)的問題。注釋器為每個標記決策提供自然語言解釋,語義解析器將這些解釋轉換為編程的標記函數,該函數為任意數量的未標記數據生成噪聲標籤,用於訓練分類器。在三個關係抽取任務中,我們發現,通過提供解釋而不是僅僅標籤,用戶能夠更快地訓練具有相當F1分數的分類器。
  • TensorFlow分布式訓練MNIST分類器
    本節以分布式方式訓練完整的 MNIST 分類器。
  • 人工智慧在肺癌診斷中的研究進展|人工智慧|肺結節|特異度|分類器|...
    在卷積神經網絡(convolutional neural network,CNN)對影像學圖像分析方面取得的最新成果的基礎上,Nasrullah 等[12]對之前研究中使用過的深度學習肺結節檢測模型進行了大量的修改,使用多種策略的深度學習模型對肺結節進行自動檢測和分類,該系統分別使用兩種深度三維(3D)自定義混合連結網絡(customized mixed link network,CMixNet)架構進行肺結節檢測和分類
  • 雲計算學習:用PyTorch實現一個簡單的分類器
    有的教程又淺嘗輒止,師傅領到了門檻跟前,總感覺自己還沒有進門,教程就結束了。所以我總結了一下自己當初學習的路線,準備繼續深入鞏固自己的 pytorch 基礎;另一方面,也想從頭整理一個教程,從沒有接觸過 pytorch 開始,到完成一些最新論文裡面的工作。以自己的學習筆記整理為主線,大家可以針對參考。第一篇筆記,我們先完成一個簡單的分類器。
  • 細胞外囊泡和顆粒生物標誌物可定義多種人類癌症
    細胞外囊泡和顆粒生物標誌物可定義多種人類癌症 作者:小柯機器人 發布時間:2020/8/16 22:05:18 美國康奈爾醫學院David Lyden等研究人員合作發現,細胞外囊泡和顆粒生物標誌物可定義多種人類癌症。
  • Science:構建首個人類胸腺細胞圖譜,揭示人類免疫系統起源,為開發...
    構建人類胸腺細胞圖譜,圖片來自Science, 2020, doi:10.1126/science.aay3224。這種人類胸腺圖譜揭示了新的細胞類型和鑑定出指示未成熟的免疫細胞如何發育為T細胞的信號。它還可能有助於科學家們理解影響T細胞發育的疾病,比如重症綜合性免疫缺陷(SCID),並加入到正在構建的人類細胞圖譜(Human Cell Atlas)計劃中。
  • SAST Weekly|MATLAB機器學習初探——做個心音分類器
    本期的SAST weekly,想跟大家分享一下如何用MATLAB進行初步的機器學習,構建一個正常/異常心跳聲分類器。MATLAB提供了強大的數據處理功能,豐富的機器學習模型與接口,且具有一定可移植性,對代碼能力要求相對不高。對於有機器學習方面需求的數學家、工程師而言,是不錯的選擇。
  • 手把手系列 | 教你用Python構建多標籤圖像分類模型(附案例)
    製作一個圖像分類模型是一個很好的開始,但我想擴展我的視野以承擔一個更具挑戰性的任務—構建一個多標籤圖像分類模型!答案很簡單——是的!在本文中,我解釋了多標籤圖像分類背後的思想。我們將使用電影海報構建我們自己的模型。