背景
把早年沒填完的坑(單細胞測序的細胞類型鑒別)給重新拾起來
其Github描述的基本情況:
- 作者並不對單個分類器進行說明,統一包裝在benchmark工程里,還建立了docker容器
- 但說明了在scripts里有封裝好的方法,可以直接讀入數據進行分類
- 可以使用,但是整個過程需要知道,讀全文
回顧文章
1. 文章采用的方法和數據集介紹
- 22個方法,27個數據集(前十一個用於數據集內比較不同方法,PBMC用於數據集間)
- 有在單個數據集里評估各個分類器的實驗,也有在不同數據集評估單個分類器的實驗
- 方法有兩類:一是需要標記好細胞群體種類(即已分類的數據集)來訓練的監督式方法,二是需要可以分辨細胞群體種類的mark基因作為輸入的先驗知識方法和針對特殊細胞群體種類已預訓練的特殊分類器的先驗知識方法
- 數據集涵蓋不同細胞數目的、不同數目的基因的、不同細胞群體種類數目的、還包含可以用於先驗知識方法的數據集
- 數據集主要有:胰腺數據集(包含不同細胞數目的、人和小鼠的、不同測序技術的)、小鼠大腦數據集(對細胞需要有不同注釋深度的,即分類目標是分幾類,分類目標群體數越多就分得越細,分類目標群體數越多容易讓分類器分不出這個細胞究竟屬於哪類)、大數據集(Tabula Muris (TM) and Zheng 68K,細胞數目多同時細胞群體也多)、對細胞群體已排序的數據集(沒找到其特征)
2. 結果
前置知識
- 先驗知識方法必須要有相應mark基因(可以是訓練集中已知的差異基因)或者已預訓練的分類器,所以沒法對所有數據集進行分類,即這個評估大部分數據集只有監督式方法的,PMBC的兩個數據集可以評估所有方法
- 先驗知識方法如果是需要mark基因的,還探究了不同數目mark基因的效果
- 如果光用median F1-score評價的話,有失偏頗,因為有的分類器帶有拒絕選項即對不夠自信的某次分類進行拒絕,對細胞打上“未標記”標簽,這樣會避免盲目分類拉低median F1-score
- 定義數據集復雜性:獲得每個細胞群體的全部基因表達量比如記為A,計算各個群體之間A的相關性,取各個群體的最大相關累加取平均值記為復雜性
單個數據集中各個方法的評估
測試場景:對於監督式:用已知細胞群體分類的數據集(要求數據集有已分類的數據集)來訓練,再對數據集進行分類;對於先驗知識類型:具備mark基因或者預訓練的前提。
圖注:DE下標是依賴於mark基因(此處是差異基因)的先驗知識方法
小結:
- 從胰腺數據集來看,SVM和SVMrejction總體優於其他監督式分類器
- 從小鼠大腦數據來看,在不同注釋深度的實驗中,一般目的分類器(SVMrejection, SVM, and LDA)優於單細胞特異性目的的分類器
- 先驗知識方法表現並沒有在單個數據集中有所提高
- 大數據集且注釋深度較高的,SVMrejection拒絕率較高,較好的是SCINA,但是需要先驗知識(mark基因或預訓練)
- 先驗知識分類器依賴於mark基因的數目和特異性(方法原作者挑選還是基於差異基因),所以選擇mark基因的數目和決定哪些作為mark基因是個艱巨任務
- 復雜性和細胞群體數目影響median F1-score,且似乎前者影響更大
數據集間單個方法的評估
測試場景:總體是用一個數據集訓練用另一個數據集來評估,先測試只有測序方式差別的兩個數據集;其次測試PBMC1和2共42種組合(PBMC1有7種測序方式,PBMC2有6種),一個用於訓練一個用於分類;還有兩個數據集采用同一測序方式的數據集的評估。
- 紅線以左代表以灰色塊的測序方式訓練,以PBMC1其他測序方式來評估的結果
- 紅線以右代表以灰色PBMC1來訓練,PBMC2來評估
- 右邊箱線圖是總體表現
- 下方是先驗知識類型的分類器的表現,有兩種樣本的不同測序方式的評估
跨越物種、單細胞測序與單神經元測序、不同注釋深度數據集
測試場景:只對於監督式,列標簽用於訓練,灰色塊用於分類,在一個數據集訓練在灰色塊進行分類
- 深度注釋的數據集分類很難
用MNN法合並三個數據集用於訓練,另一數據集用於分類
測試場景:合並或者不合並
- 合並后SVMrejection有提高,總體SVM表現佳
拒絕選項評估
前置知識
- 拒絕選項是用來標記在訓練集中沒有的細胞
- 最好的用法是在某組織的細胞數據集訓練,就在某組織細胞的數據集分類
- 拒絕選項的優劣是,如果是未知細胞就應該全數拒絕就是好的
- 圖B是僅僅排除某個細胞種類,且用此細胞種類的數據來訓練
基因輸入特點的評估
圖注參考原文
- 一些分類方法會存在過訓練的現象,導致效能降低
- 總體SVM和SVMrejection效能較好
- 細胞數目影響不大,分類數據集增大不一定帶來runtime增加
- scmapcell, scmapcluster, SVM, RF, and NMC runtime都在6min以下
3. 討論
總結
4.方法
值得注意的點:
- SVMrejection的拒絕閾值是可以設置,本文設置為0.7
- 大多數方法都有內置的標准化,即log轉換
數據處理:
- 基於人工注釋結果去除雙峰、碎片、未標記細胞
- 去除在所有數據集所有細胞中count為0的基因
- 計算所有細胞可探測到基因的數目,再計算所有細胞探測到基因數目的中位數,篩除低於3倍MAD的細胞
- 交叉驗證之前剔除了小於10個細胞群體的數據集
- mark基因的評估基於四個特點(1) the number of marker genes, (2) the mean expression, (3) the average dropout rate, and (4) the average beta of the marker genes [37].
- 選擇差異表達基因作為mark基因的操作是基於CPM標准化加上log轉換,MAST作為one-vs-all的差異基因尋找工具,差異基因只取正數的FC
- 數據集之間探究基因特征選取時只用了所有數據集共有基因
- 不同測序技術數據集之間的評估中,用MNN法修正技術誤差和批次效應,交叉驗證采用的數據集單元作為fold,即某個數據集作為分類數據集,其他的三個為訓練數據集
- 評估矩陣即評估的指標:1、F1分值中位數;2、unlabel rate、3、計算時間
實戰
本文僅僅針對某個方法進行使用,故不全然使用其benchmark工程。參考其Github
- 先下載數據
- 安裝R3.6和python3.7,版本參考文章當時的最新版本,並安裝對應R包和python模塊
- 參考Github的General Usage,注意用法:
$ Rscripts Cross_Validation.R "CEL-Seq/CL_pbmc1Labels.csv" 1 "CEL-Seq"
$ python
>>> from run_SVMrejection import run_SVM
>>> run_SVM("CEL-Seq/CL_pbmc1.csv","CEL-Seq/CL_pbmc1Labels.csv","CEL-Seq/CV_folds.RData","Results/CEL-Seq/pbmc1")
$ R
> result <- evaluate('./Results/CEL-Seq/pbmc1/SVM_True_Labels.csv', './Results/CEL-Seq/pbmc1/SVM_Pred_Labels.csv') # evaluate.R同級目錄下
> capture.output(result, file = "Results/CEL-Seq/pbmc1/SVM_evaluation.result")" # 保存list的方法
結果包含 the corresponding accuracy, median F1-score, F1-scores for all cell populations, % unlabeled cells, and confusion matrix. 混淆矩陣是衡量細胞群體相似性的
遇到的問題
- unzip: cannot find zipfile directory in one of... 是壓縮文件大小超過2GB,不能使用默認的unzip,用7z