GENIE3
GENIE3(GEne Network Inference with Ensemble of trees), 使用基於樹的集成學習算法,來通過基因表達數據來推斷基因調控網絡。
小知識點: GENIE3末尾的
3
並不是指GENIE的第三版本,而是因為通過法語口音來發音的話,tree
和three
發音是一樣的。附上兩個法語發音: tree, three
GENIE3內置了兩種基於樹的集成學習算法,Random Forests 和Extra-Trees. 集成學習,組合多個相對較弱的學習算法以期獲得更好的性能。隨機森林則是有多個決策樹來構成的。水平有限,本文將簡單講解Random Forests,隨機森林如何應用於基因調控網絡的推斷。
決策樹
首先先介紹一下決策樹, 它是基於if-then-else 規則的學習算法。舉一個例子,假設我們想知道基因表達量是否受組蛋白修飾的影響,於是我們可以獲取這些數據:
Chip-seq測序分析而來的組蛋白修飾數據,比如H3K4me1, H3K36me3, H3K27ac。和RNA-Seq分析得到基因基因表達量數據。然后我們通過分析整理得出一張組蛋白修飾富集區域和相應區域所在基因的表達量變化的一張表格。
H3K36me3 | H3K4me1 | H3K27ac | geneX |
---|---|---|---|
0 | 1 | 1 | up |
1 | 0 | 1 | up |
1 | 1 | 0 | up |
0 | 0 | 1 | down |
0 | 1 | 0 | down |
1 | 0 | 0 | down |
表格中0代表沒有顯著富集,1代表在gene所在位置有顯著富集, up,down分別表示對應基因表達量是上調還是下調。當然上面這個數據,是我故意編的,與實際數據應該差得很遠,不作真,僅為方便演示。然后我們就可以根據組蛋白修飾富集情況來得出一個簡單的決策樹:
類似上面這種,根據一些條件,來判斷類別的應用稱為分類。比如一個課題組坑不坑;一個西瓜是好還是壞;明天是下雨,下雪,還是下東海,等。
不過,當前我們要討論的是基因間的調控關系, 在生物體內,基因調控機制是復雜的,一個基因受多個轉錄因子調控,一個轉錄因子調控多個基因。我們不能簡單的判斷一個基因是否調控另一個基因。我們還需要考慮轉錄因子和靶基因的調控關系。
這種調控關系,我們采用回歸的方式來獲取。回歸用於預測連續的、具體的數值。比如根據房子大小,位置,樓層,朝向,來預測房子的售價;根據靶基因的多個轉錄因子基因表達量來預測靶基因的表達量。
上圖中,gene1,2,3是轉錄因子, gene4是受gene1,2,3調控的靶基因。從上圖決策樹可以看出,gene4的表達受gene1,2,3的調控作用。它是一個很簡單的回歸樹。gene1,2,3對gene4的調控作用不一,從而可以得到不同重要性分數。
私以為,上圖回歸樹思想為GENIE3用於構建調控網絡關系的重要原因之一。當然作者沒直接用回歸決策樹,而是使用基於決策樹的集成學習算法,當然是因為決策樹有缺點了。不過基本調控關系的構建思想還是回歸樹了。
還有必須提及的是,上面的例子是我自定義的,決策樹是手動構建的,比如分類的例子中,第一次選擇H3K36me3是否富集作為分類標准,第二次選擇H3K4me1是否富集作為分類標准等。在回歸的例子中,第一次分類選擇Gene3是否<1000來作為分類標准,第二次又選擇什么作為分類標准。
這在實際使用決策樹時,並不是人為選擇的,實際應用中,通常輸入屬性或特征有幾百上千上萬的都有。在基因調控關系構建過程中,也是選擇幾百個轉錄因子作為輸入的,預測靶基因的。這並不是人為選擇,而是通過算法計算挑選而來的。 決策樹中同一數據 ,使用了不同的分類標准,誰先誰后,畫出的樹不一樣,最后的效果都是不一樣的。不過這也不是本文重點,就不在提及,感興趣的童鞋可以區搜索“決策樹 CART”。
隨機森林
三個臭皮匠,頂個諸葛亮。由於單使用一個決策樹,來進行預測。其結果容易受異常值的影響,且容易發生過擬合(雖然GENIE3,不通過訓練模型,來預測新的調控關系,但是如果過擬合發生,則可能會得出錯誤的調控關系)。所以隨機森林(RF)整合多個決策樹,綜合考慮不同決策樹的輸出結果,來得到最終結果。
隨機森林的隨機體現在兩個方面:
- 樣本的隨機,RF中的每棵決策樹的輸入樣本都是隨機從所有樣本中選取N個
- 特征的隨機,RF中的每棵決策樹的輸入特征都是隨機從所有特征中選取K個
這樣的隨機避免了異常樣本,或特征對結果的影響。最終結果將參考所有決策樹的輸出結果,在分類任務,可通過投票來決定最終的結果屬於哪一類。在回歸任務中,可以將決策樹的輸出結果進行平均。
網絡推斷
如果明白前面回歸樹來預測靶基因表達量,下面的圖片就好理解了。
上圖中 Expression data 是行為樣本,列為基因。這與GENIE3的R包的輸入(行為基因,里為樣本)是不一致的,但這沒什么關系,因為R包里會將輸入轉置再進行運算的。
圖中有G個基因,將會以每個基因作為輸出(靶基因表達量),其余基因作為輸入(調控基因表達量)來構建G個隨機森林模型。進而計算每一個模型中,每個調控基因對靶基因的重要性,從而得出它們之間的調控關系。然后根據所有模型的調控關系進行排序。
有一點需要注意的是,在上圖中,是將除挑選為靶基因以外的所有基因都作為輸入基因(regulatory genes)。然而作者建議指定regulatory genes, 這時,當挑選的靶基因不在regulatory genes時,輸入基因都是regulatory genes,當挑選的靶基因在regulatory genes時,輸入基因是除台挑選靶基因意外的其余regulatory genes.
GENIE3使用
GENIE3的使用簡單,參考文檔https://bioconductor.org/packages/release/bioc/vignettes/GENIE3/inst/doc/GENIE3.html
其他
GENIE3有Python版本和R版本,熟悉這兩種語言的童鞋,可以去看一下源碼。
有些東西沒寫,有些也沒寫清楚。以后再改一下吧~
參考
https://www.cnblogs.com/fionacai/p/5894142.html
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2946910/
Gene Regulatory Networks Methods and Protocols
https://github.com/vahuynh/GENIE3