機器學習與藥物篩選的心得體會

機器學習在藥物設計里面的應用可以說還是比較常見的,尤其是搞計算的都會或多或少的涉及到這塊。比如國內做這塊比較多的,浙江大學的侯廷軍教授,北京化工大學的閆愛霞教授,華東理工大學的幾個做模擬計算的老師,上海藥物所,上海交大的張健教授等。根據我讀過他們的文章,很少有人會走到實驗驗證這個階段。都是拿個體系,做個模型,再做幾個理論的驗證,就把文章發表出去了。這其中的原因是啥子,為什么不做實驗來驗證,我之前也不是很明白。最近我自己結合自己的課題需要,也做了這方面的工作。在這里我給大家分享我的經驗,希望幫助大家更好的理解機器學習與虛擬篩選。
機器學習最常用來分類,在各個領域都會用到。舉個例子,在藥物設計領域,有些化合物活性好,有些化合物活性不好,有些化合物活性適中。這里面就牽涉到分類了,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!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity機器學習 ML-Agents第一個例子

上一節我們安裝了機器學習mlagents的開發環境,本節我們創建第一個例子,了解什么是機器學習。 我們的例子很簡單,就是讓機器人自主移動到目標位置,不能移動到地板范圍外。 首先我們來簡單的了解以下機器學習的過程。 機器學習的過…

分布式鎖之基于zookeeper實現分布式鎖(三)

3. 基于zookeeper實現分布式鎖 實現分布式鎖目前有三種流行方案,分別為基于數據庫、Redis、Zookeeper的方案。這里主要介紹基于zk怎么實現分布式鎖。在實現分布式鎖之前,先回顧zookeeper的相關知識點 3.1. 知識點回顧 3.1.1. 安裝啟動 安裝&#xff1a…

『亞馬遜云科技產品測評』活動征文|搭建圖床chevereto

『亞馬遜云科技產品測評』活動征文|搭建圖床chevereto 提示:本篇文章授權活動官方亞馬遜云科技文章轉發、改寫權,包括不限于在 Developer Centre, 知乎,自媒體平臺,第三方開發者媒體等亞馬遜云科技官方渠道 文章目錄 『…

Python 獲取本地和廣域網 IP

Python 獲取本地IP ,使用第三方庫,比如 netifaces import netifaces as nidef get_ip_address():try:# 獲取默認網絡接口(通常是 eth0 或 en0)default_interface ni.gateways()[default][ni.AF_INET][1]# 獲取指定網絡接口的IP地…

字符串相加

題意: 給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和并同樣以字符串形式返回。 你不能使用任何內建的用于處理大整數的庫(比如 BigInteger), 也不能直接將輸入的字符串轉換為整數形式。 示例 1&#xff…

利用STM32CubeMX解讀時鐘樹

1,低速時鐘 LSE是外部晶振作時鐘源,主要提供給實時時鐘模塊,所以一般采用32.768KHz。LSI是由內部RC振蕩器產生,也主要提供給實時時鐘模塊,頻率大約為40KHz。(LSE和LSI)只是提供給芯片中的RTC(實時時鐘)及IWDG(獨立看門…

【c++】棧教程

今天來講講棧 棧是什么? 老樣子,先來看一道題: 【棧】棧的基本操作 描述 棧的定義:棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此,表頭對于棧來說具有特殊的意義,稱為棧頂。相應地&#xff0…

佳易王羽毛球館計時計費軟件燈控系統安裝教程

佳易王羽毛球館計時計費軟件燈控系統安裝教程 佳易王羽毛球館計時計費軟件,點擊開始計時的時候,自動打開燈,結賬后自動關閉燈。 因為場館每一場地的燈功率都很大,需要加裝交流接觸器。這個由專業電工施工。 1、計時計費功能 &…

docker安裝mysql8

之前自己在網上找了一些docker安裝mysql8的方法,結果都不行,于是自己根據自己遇到的情況再結合網上搜索到的安裝方式調整了一下,成功執行安裝。以下是我自己的執行命令 先拉取docekr鏡像 docker pull mysql:8.0.20啟動鏡像 docker run -p 3…

使用Git bash切換Gitee、GitHub多個Git賬號

Git是分布式代碼管理工具,使用命令行的方式提交commit、revert回滾代碼。這里介紹使用Git bash軟件來切換Gitee、GitHub賬號。 ? ? 假設在gitee.com上的郵箱是alicefoxmail.com 、用戶名為alice;在github上的郵箱是bobfoxmail.com、用戶名為bob。 賬號…

tcp/ip協議2實現的插圖,數據結構2 (19 - 章)

(68) 68 十九1 選路請求與消息 函rtalloc,rtalloc1,rtfree (69)

HarmonyOS ArkTS 保存應用數據(十)

1 概述 在移動互聯網蓬勃發展的今天,移動應用給我們生活帶來了極大的便利,這些便利的本質在于數據的互聯互通。因此在應用的開發中數據存儲占據了非常重要的位置,HarmonyOS應用開發也不例外。 2 什么是首選項 首選項為應用提供Key-Value鍵…

Java面向對象第2天

精華筆記: 構造方法:構造函數、構造器、構建器---------------復用給成員變量賦初始值代碼 作用:給成員變量賦初始值 與類同名,沒有返回值類型(連void都沒有) 在創建(new)對象時被自動調用 若自己不寫構造方法,則編…

Electron+VUE3開發簡版的編輯器【文件預覽】

簡版編輯器的功能主要是: 打開對話框,選擇文件后臺讀取文件文件前端展示文件內容。主要技術棧是VUE3、Electron和Nodejs,VUE3做頁面交互,Electron提供一個可執行Nodejs的環境以及支撐整個應用的環境,nodeJS負責讀取文件內容。 環境配置、安裝依賴這些步驟就不再敘述了。 …

SQL Server 百萬數據查詢優化技巧三十則

點擊上方藍字關注我 互聯網時代的進程越走越深,使用MySQL的人也越來越多,關于MySQL的數據庫優化指南很多,而關于SQL SERVER的T-SQL優化指南看上去比較少,近期有學習SQLSERVER的同學問到SQL SERVER數據庫有哪些優化建議&#xff1f…

Linux進程通信——信號(一)

原理 對于 Linux來說,實際信號是軟中斷,許多重要的程序都需要處理信號。 信號,為 Linux 提供了一種處理異步事件的方法。比如,終端用戶輸入了ctrlc來中斷程序,會通過信號機制停止一個程序。 概述 信號的名字和編號 …

【Docker】從零開始:8.Docker命令:Commit提交命令

【Docker】從零開始:8.Docker命令:Commit命令 基本概念鏡像鏡像分層什么是鏡像分層為什么 Docker 鏡像要采用這種分層結構 本章要點commit 命令命令格式docker commit 操作參數實例演示1.下載一個新的ubuntu鏡像2.運行容器3.查看并安裝vim4.退出容器5提交自己的鏡像…

【數據結構/C++】線性表_雙鏈表基本操作

#include <iostream> using namespace std; typedef int ElemType; // 3. 雙鏈表 typedef struct DNode {ElemType data;struct DNode *prior, *next; } DNode, *DLinkList; // 初始化帶頭結點 bool InitDNodeList(DLinkList &L) {L (DNode *)malloc(sizeof(DNode))…

成為AI產品經理——模型評估概述

目錄 一、模型宣講和評估的原因 二、模型宣講 三、模型評估 1. 重要特征 ① 特征來源 ②特征意義 2.選擇測試樣本 3.模型性能和穩定性 一、模型宣講和評估的原因 劉海豐老師提到他們在做一個金融AI產品未注重模型指標&#xff0c;過于注重業務指標&#xff0c;導致產生…

解決:ImportError: cannot import name ‘Adam‘ from ‘keras.optimizers‘

解決&#xff1a;ImportError: cannot import name ‘Adam‘ from ‘keras.optimizers‘ 背景 在使用之前的代碼時&#xff0c;報錯&#xff1a; from keras.optimizers import Adam ImportError: cannot import name ‘Adam’ 報錯問題 from keras.optimizers import Adam I…