機器學習在藥物設計里面的應用可以說還是比較常見的,尤其是搞計算的都會或多或少的涉及到這塊。比如國內做這塊比較多的,浙江大學的侯廷軍教授,北京化工大學的閆愛霞教授,華東理工大學的幾個做模擬計算的老師,上海藥物所,上海交大的張健教授等。根據我讀過他們的文章,很少有人會走到實驗驗證這個階段。都是拿個體系,做個模型,再做幾個理論的驗證,就把文章發表出去了。這其中的原因是啥子,為什么不做實驗來驗證,我之前也不是很明白。最近我自己結合自己的課題需要,也做了這方面的工作。在這里我給大家分享我的經驗,希望幫助大家更好的理解機器學習與虛擬篩選。
機器學習最常用來分類,在各個領域都會用到。舉個例子,在藥物設計領域,有些化合物活性好,有些化合物活性不好,有些化合物活性適中。這里面就牽涉到分類了,Active VS Inactive。如果能建立一個理論的模型來區分Active 和 Inactive的話,那這個模型就可以用來預測未知的化合物。當前機器學習的方法主要包括:na?ve Bayesian, support vector machine, recursive partitioning, andk-nearest neighbors等等。這些方法都需要一定的自變量和因變量為輸入,輸出當然是模型本身。自變量用的最多的是化合物的各種性質,比如分子量、極性、分子體積、分子表面積、氫鍵給體受體等,也可以是能夠描述分子的指紋信息(Fingerprints);因變量就是分的類別(Active VS Inactive)。當然也可以分很多類,比如高活性、中活性、低活性、無活性。自變量的選擇往往就決定你建立模型是不是達到一定可靠度最關鍵的因素(現在文章基本要求模型的準確度>80%以上吧,training set、test set、validation set)。關于自變量的選擇,最常用的就是分子描述符(2D or 3D),能夠計算描述的軟件很多,MOE,DS,還有免費的一大堆,想知道的可以看我之前發的帖子。這里我給大家分享一下我做描述符選擇的經驗。
描述符優化(Molecular descriptor selection)
描述符優化方法很多,最常用的是GA方法(遺傳算法來優化描述符),相關文獻也很多,想了解這方法可以直接去查文獻。這里我給大家說說另外一種方法。運用基本統計的方法來做,用到的軟件SPSS。主要步驟,把該計算的描述符全部計算好,然后導成CSV文件,自變量是描述符,因變量是分類(比如1代表活性,-1代表非活性)這樣我總結了四部,可以到達優化描述符的目的,如下:
( 1)Common values analysis
(2)Pearson correlation analysis
(3)A stepwise variable analysis
(4)Linear regression analysis
第一步主要是去除一些含有太多常值的描述符(比如0或者1等),這些描述對每個分子都一樣,這樣就對體系沒區別性貢獻,可以直接刪除。
第二步主要是做描述符相關性分析,比如有些描述符就是代表類似的意思(分子量MW和分子質量MM)這樣就出現描述符冗雜,這個可以再SPSS里面做,一般相關>0.9以上的都可以抹掉。
第三步主要做剔除一個描述符,對整體的影響,逐步剔除。
第四步主要做描述符和活性之前的關系回歸分析,這個很關鍵,有些描述符和活性之前的相關性(R)就很明顯,有的就不行。
經過這個過程,你可以把描述符優化到20-30個左右(我自己做的經驗)。這樣再去用各種機器學習的方法來做分類模型,基本上會得到不錯的結果。這里我選擇SVM和k-nearest neighbors(KNN)來具體說明。
SVM具體步驟:LIBSVM 3.17 package
1、把數據集轉換為LibSVM能夠識別的格式;這個可以用WEKA來實現轉化,也可以用EXCEL里面的宏功能
2、將數據集進行簡單的縮放,這個非常重要,建議必需做
3、使用一個比較合適的各函數
? ??一般情況下,我用都使用RBF函數:K(x,y)=exp(-r||x-y||^2)
4、優化超參數
? ??一般情況下用交叉驗證(cross-validation)和梯度搜索(grid-search)來實現此功能;
5、用最好的超參數來訓練訓練集
6、測試測試集
這六步基本上就可以實現SVM的所有計算,文章里面經常出現的參數(FP,FN,TP,TN,AUC)等都可以拿到,根據模型的準確度,基本上可以判斷模型的好壞,好的話,基本就可以去寫文章了(很多人都這樣做的)。
k-nearest neighbors方法:Orange 2.0 (Orange Data Mining),免費的軟件,很好用。
步驟:
1、把數據集轉換為Orange能夠識別的格式;這個可以用WEKA來實現轉化,也可以用EXCEL里面的CSV文件
2、選擇K參數
A total of k number of vectors nearest tothe vector x are used to determine the class of that unclassified vector. Theclass of the majority of the k-nearest neighbors is decided as the predictedclass of the unclassified vector x.
4、調試參數(K)
? ??一般情況下用交叉驗證(cross-validation)
5、構建模型
6、測試測試集
Orange結果輸出很人性化,基本把所有參數都給你計算好了(FP,FN,TP,TN,AUC,GA),自己來判斷模型的好壞。
還有很多人基于分子指紋作為描述符的,其實這個更合理。相對描述符而言,分子指紋代表的信息量更大,但分子指紋計算一般都牽涉到商業軟件,很難去破解指紋具體的數字信息,這樣就很難和免費的SVM或者KNN方法實現無縫銜接,我最近發現有個軟件算出來的指紋,就是用位數代表指紋的(實數集)PaDEL-Descriptor,想用的可以去下載,很好用。計算好指紋,采用對應的方法構建模型就行,步驟就和前面一樣了。這里面有幾個經驗給大家說說:
(1)指紋的維度,基本是越大,模型越好。但是達到一定程度,模型的準確度,也就不變了
(2)基于指紋的模型,一般會比基于描述的模型要好一點(這里我指的是各種考核參數,尤其準確度)
(3)實際應用效果,描述符會比指紋更能選到新的骨架化合物(novel scaffold)
(4)指紋的最大好處,可以分析出來優勢片段和劣勢片段,這對合成化學家來說非常重要!!!
也是文章比較亮的一個點
如果有可能,也可以聯合2者來做模型,優勢互補!!!
我們最近實驗室也開發了一個基于原子中心片段的方法(Atom Center Fragments),原理很簡單。片段產生是我老板的一個程序,后來被一個師弟整合到貝葉斯里面,可以實現分類,用到2個體系,其中一個就是我用的mTOR抑制劑分類,也做了一個在線的服務器(http://rcdd.sysu.edu.cn/mtor/)效果也還不錯,但這個方法處理大分子(比如抗菌分子),效果不是很好。
至于用這些分類模型來做虛擬篩選,我個人感覺,還是非常吃力的。主要原因是富集的化合物數目太大(比如你預測SPECS化合物庫,返回給你2W),這樣后期遴選化合物就非常吃力。我做了另外一個就是單獨用機器學習的方法來做的,雖然實驗也驗證了。但是遴選化合物的過程,非常復雜。
如果把機器學習和其他主流的方法經行串聯,效果會很不錯(我也是做了這方面的工作,實驗的結果還是可以的),比如先機器學習,在分子對接。這樣就大大減少了分子對接耗時的問題,畢竟機器學習,可以大大的縮小原始虛擬庫的大小(一般20W就可以縮到2W),這樣對接很快就可以做完。大家感興趣的可以試試。
通過這些,不難發現,為什么做計算的人,尤其是用機器學習的方法來分類,都不會涉及后面的實驗驗證。因為單憑這一種方法,來做篩選,富集化合物太多,很難實現化合物的遴選。對需要文章畢業的人,可以搞搞文章。但對于想做藥物的人,還是多思考一下,怎么才能更好的用在藥物篩選過程中。
如果有想做這一塊的可以和我交流。
科學無界,大愛無疆!
參考: 機器學習與藥物篩選的心得體會 - Powered by Discuz!