机器学习与药物筛选的心得体会

机器学习在药物设计里面的应用可以说还是比较常见的,尤其是搞计算的都会或多或少的涉及到这块。比如国内做这块比较多的,浙江大学的侯廷军教授,北京化工大学的闫爱霞教授,华东理工大学的几个做模拟计算的老师,上海药物所,上海交大的张健教授等。根据我读过他们的文章,很少有人会走到实验验证这个阶段。都是拿个体系,做个模型,再做几个理论的验证,就把文章发表出去了。这其中的原因是啥子,为什么不做实验来验证,我之前也不是很明白。最近我自己结合自己的课题需要,也做了这方面的工作。在这里我给大家分享我的经验,希望帮助大家更好的理解机器学习与虚拟筛选。
机器学习最常用来分类,在各个领域都会用到。举个例子,在药物设计领域,有些化合物活性好,有些化合物活性不好,有些化合物活性适中。这里面就牵涉到分类了,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.mzph.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…