AI4S Cup学习赛-中枢神经系统药物研发:药物筛选与优化

赛题介绍

链接:Bohrium 案例广场 (dp.tech)

中枢神经系统类疾病长期以来存在着重要的临床未满足需求。据统计,在当前人口老龄化趋势下,阿兹海默(AD)、帕金森病(PD)等神经退行性疾病和脑癌、中风等疾病的治疗费用将达到数万亿美元,由此产生巨额的医疗保健支出。因此,获得高质量、有效的中枢神经系统药物在当前被普遍视为具有重要的科学和商业价值。

随着AI for science的兴起,AI可以在大规模化合物库中筛选具有潜在治疗作用的药物,基于计算机模拟的方法预测药物的药理活性、毒性和药代动力学特性。通过这种方式,AI可以筛选出最有前景的药物候选者,并优化其化学结构,以提高安全性和有效性。

本次学习赛将提供一批分子信息数据,选手需要以AI方法对分子是否可作为CNS(Central Nervous System)药物进行检测,实现AI助力下的CNS药物筛选和研发工作。

原理简介

中枢神经系统(CNS)包括大脑和脊髓,负责处理和调控身体的各种功能。非中枢神经系统(non-CNS)则包括神经元以外的组织,如内分泌系统和免疫系统等。

由于血脑屏障及其上各类转运体的存在,中枢神经系统用药通常需要满足一些特定的特征。药物化学家会根据特定的指标来判断一个药物是否具有成为中枢神经系统药物的潜力,如分子量和拓扑极性表面积(TPSA)不能过大,N原子和极性H原子数量不能过多,溶剂可及表面需在特定范围内等。这些特征为药物发现和优化阶段中判断分子作为CNS药物的潜力提供了启示。

SMILES 分子表达式中包含了丰富的信息。我们可以利用 SMILES 表达式构建 CNS 药物预测的机器学习模型,并可帮助研究人员深入理解中枢神经系统(CNS)药物和非中枢神经系统(non-CNS)口服药物在众多理化性质方面的差异。这将有助于加速 CNS 药物的筛选和研发过程。

赛题教程

请点击下方链接进入本次学习赛的课程主页,本赛题的一系列教程学习资料会陆续上传,请大家关注。

教程链接:https://nb.bohrium.dp.tech/courses/detail/2718054507

赛题理解及科学知识补充

背景知识

研发一款成功上市的药物需要大约10年的时间,花费10亿美金,平均研发25款药物只有1款能成功提交到药监局,所以迫切希望AI能辅助药物的设计

靶点:导致疾病发生的问题的根源,通常是生物体内某些蛋白质出现了功能的失活或失调

人们通过设计药物去有效的调节这些靶点的生物功能

对于AD阿茨海默这类疾病,大部分靶点分布在脑部、脊椎等中枢神经系统

吸收、分布、代谢、排泄、毒性

本次赛题研究的血脑屏障BBB对应着distribution,也就是药物能否顺利的送入中枢神经系统,这是药物能否成为CNS药物的关键

QSAR

QSAR模型的建立需要分子的结构和分子的某些性质,并没有加入任何和这个靶点相互作用的信息

分子结构的表示

赛题背后的逻辑是:比较不同化合物,根据这些化合物的相似性去判断新的化合物与哪些类型的化合物性质相似

对于人来说,系统命名法等方法方便人们去理解,但是对于计算机就不是这回事了

对于计算机来说,SMILES是常用的表示分子结构的方法

上图是各种分子结构的表示方法

分子特征的表示

常见的定量分子描述符

常见的定性分子描述符

ECFP分子指纹计算流程

参考文献解读

baseline

# 需要挂载 bohr CNS 数据集
DIR_PATH = '/bohr/ai4scup-cns-5zkz/v3/'
!pip install lightgbm numpy pandas rdkit scikit-learnimport lightgbm as lgb
import numpy as np
import pandas as pdfrom rdkit import Chem  # 导入RDKit中的Chem模块,用于分子对象转换
from rdkit.Chem.rdMolDescriptors import GetMorganFingerprintAsBitVect  # 从RDKit中导入GetMorganFingerprintAsBitVect函数,用于生成分子指纹(位向量转换)from sklearn.model_selection import train_test_split  # 从scikit-learn中导入train_test_split函数,用于拆分数据集
from sklearn.metrics import fbeta_score  # 从scikit-learn中导入fbeta_score函数,用于 F2 Score 计算raw_data = pd.read_csv(f"{DIR_PATH}/mol_train.csv")
test_data = pd.read_csv(f"{DIR_PATH}/mol_test.csv")# 拆分训练数据为训练集与验证集,验证集占比 20%,设定固定随机种子
train_data, valid_data = train_test_split(raw_data, test_size=0.2, random_state=hash("Datawhale") % 2023
)def smile2fingerprint(smile: str):"""将 SMILE 分子式表示为指纹数据参数:smile (string): SMILE 分子式返回:fp (Explict BitVect): 分子式的 Morgan 指纹位向量"""molecular = Chem.MolFromSmiles(smile)  # 将字符串转换为分子式对象finger_print = GetMorganFingerprintAsBitVect(molecular, 5, nBits=1024)  # 获得分子式的 Morgan 指纹位向量return finger_print# 批量将位向量转换为特征矩阵,形状为 (n, 1024),n 代表数据个数,1024 在位向量转换时指定
train_X = np.array([smile2fingerprint(smile) for smile in train_data["SMILES"]])
valid_X = np.array([smile2fingerprint(smile) for smile in valid_data["SMILES"]])
test_X = np.array([smile2fingerprint(smile) for smile in test_data["SMILES"]])# 将数据特征矩阵转换为 LightGBM 指定格式,(特征向量,对应标签)
lgb_train = lgb.Dataset(train_X, label=train_data["TARGET"])
lgb_valid = lgb.Dataset(valid_X, label=valid_data["TARGET"])# 设定 LightGBM 训练参,查阅参数意义:https://lightgbm.readthedocs.io/en/latest/Parameters.html
lgb_params = {"objective": "binary",  # 指定任务类别为二分类"seed": hash("Datawhale") % 2023,  # 设定随机种子"verbose": -1,  # 禁用输出(可选)
}# 训练模型,参数依次为:导入模型设定参数、导入训练集、设定模型迭代次数(100)、导入验证集
model = lgb.train(lgb_params, lgb_train, num_boost_round=100, valid_sets=lgb_valid)threshold = 0.5 # 模型输出的是类别概率,设定概率的判断阙值# 用验证集进行模型预测(选择训练中最好的一次)
valid_pred = model.predict(valid_X, num_iteration=model.best_iteration)
# 生成预测标签结果,如果概率大于阈值则为 1,否则为 0
valid_result = [1 if x > threshold else 0 for x in valid_pred]
# 计算验证集 F2 Score 分数
valid_score = fbeta_score(valid_data["TARGET"], valid_result, beta=2)
print(f"Valid Score: {valid_score}")# 预测测试集数据并获得预测结果
pred = model.predict(test_X, num_iteration=model.best_iteration)
result = [1 if x > threshold else 0 for x in pred]submission = pd.DataFrame()
submission["SMILES"] = test_data["SMILES"]
submission["TARGET"] = result
submission.to_csv("./submission.csv", index=False)

把finger_print = GetMorganFingerprintAsBitVect(molecular, 5, nBits=1024)中的5改成2,上了一点点分

特征工程与可视化

pass

Uni-Mol及进阶版Baseline

pass

图神经网络

pass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts图表显示不全

图表显示是显示了,但是没有展示全部,一看控制台div的高度只有1px了,手动修改高度也只是拉伸图表,并没有按规定的尺寸展示 随之开始思考为什么呢 ? ? ? 因为 Echarts 的依赖是惰性的,需要手动设置resize&#xff0…

《软件工程原理与实践》复习总结与习题——软件工程

软件生命周期 软件生命周期分为三个时期、八个阶段 软件定义时期: 1)问题定义阶段:要解决什么问题 2)可行性研究阶段:确定软件开发可行 3)需求分析阶段:系统做什么 软件开发时期:…

单片机霍尔测速系统设计+源程序

一、系统方案 1、本设计采用52单片机作为主控器。 2、霍尔测速送到液晶1602。 3、蜂鸣器报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void lcd_init()//液晶初始化函数* { write_1602com(0x38);//设置液晶工作模式,意思…

嵌入式八股 | 校招秋招 | 笔试面试 | 精选题目

欢迎关注微信公众号【赛博二哈】获取八股PDF 并加入嵌入式求职交流群。提供简历模板、学习路线、岗位整理等 欢迎加入知识星球【嵌入式求职星球】获取完整嵌入式八股。 提供简历修改、项目推荐、求职规划答疑。另有各城市、公司岗位、笔面难题、offer选择、薪资爆料等 嵌入式…

利用数据库的表,生成word文档的表结构注释说明

文章目录 1.场景说明2.解决办法3.生成文档3.1.实现思路3.2.引入Apache POI依赖3.3.获取表及表字段说明Mapper3.4.POI创建文档表格,并填充数据3.5.完整的接口下载代码3.6.效果展示 1.场景说明 在项目中表已经建立好了,但是现在想对外提供一个表的字段的描…

物联网开发(一)新版Onenet 基础配置

onenet新创建的账号,没有了多协议接入,只有新的物联网开放平台 第一讲,先给大家讲一下:新版Onenet 基础配置 创建产品 产品开发-->创建产品 产品的品类选择个:大致符合你项目的即可,没有影响 选择智…

watch函数与watchEffect函数

watach函数: 与vue2.x的配置功能一致 监视指定的一个或多个响应式数据, 一旦数据变化, 就自动执行监视回调 默认初始时不执行回调, 但可以通过配置immediate为true, 来指定初始时立即执行第一次 通过配置deep为true, 来指定深度监视 watchEffect函数:…

企业人力资源公司抖音直播招聘断播怎么处理?

企业人力资源公司抖音直播招聘断播怎么处理? 最直接的处理方式就是进行抖音直播招聘报白,报白后在直播和视频中发布招聘和企业信息,不用担心被封禁和限制流量。 可以通过抖音直播进行招聘,也可以在视频中添加小程序,…

【送书活动二期】Java和MySQL数据库中关于小数的保存问题

之前总结过一篇文章mysql数据库:decimal类型与decimal长度用法详解,主要是个人学习期间遇到的mysql中关于decimal字段的详解,最近在群里遇到一个小伙伴提出的问题,也有部分涉及,今天就再大致总结一下Java和MySQL数据库…

ChatGPT成了背锅侠:利用AI做蹭热点视频

我是卢松松,点点上面的头像,欢迎关注我哦! 在抖音\视频号上已经有很多人利用ChatGPT做热点视频的案例了,视频都是点赞大几千、几万。看完本文,你会略知一二,如下图所示: 这个视频&#xff0c…

Windows安装Docker、自定义安装目录

目录 前言一、Docker安装包下载二、自定义Docker安装路径、设置到其他盘三、安装Docker四、安装后配置1.修改镜像保存路径2.自定义镜像源(可选) 五、Docker运行验证1.docker/welcome-to-docker2.MySQL服务 总结 前言 Docker是一种开源的容器化平台&…

预付费远传水表好用还是后付费远传水表好用?

在远传水表市场中,预付费远传水表和后付费远传水表各自具有一定的优势和劣势。接下来,小编就来为大家讲下两者的优劣势,以此来判断到底是预付费远传水表好用还是后付费远传水表好用。 一、预付费远传水表 1.优点 (1)先付费后用水:…

Proteus的网络标号与总线

Proteus为了减少过多、复杂的连线,可以使用网络标号与总线配合使用。 Proteus的导线上添加了网络标号,意味着在Proteus上相同的网络标号是连在一起的,所说在图纸上看不出来。 如下图是比较好的Proteus中使用总线的绘制的图纸。可以效仿着画…

Echarts的引入使用

ECharts文档 1.下载并引入Echarts 2.准备一个具备大小的DOM容器 3.初始化echarts实例对象 4.指定配置项和数据(option) 5.将配置项设置给echarts实例对象 最后是一个js文件 echarts的引入 1.引入echarts - js 文件 <script src"js/echarts.min.js"></scri…

Git和Git小乌龟安装

目录 Git简介 Git安装 Git小乌龟简介 Git小乌龟安装 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地进行从很小到非常大的项目的版本管理。它最初是由Linux Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git具有速度、…

国密加密工业路由器 数据安全升级

国密加密工业路由器&#xff0c;简称国密加密路由器&#xff0c;是指遵循“商用密码管理规范”中规定的国家商用密码算法&#xff0c;采用国密加密芯片和密码算法的专业路由器。相比-般路由器&#xff0c;国密加密路由器具有更高级别的加密保护&#xff0c;可以有效提高数据传输…

Python---练习:求某同学成绩的总分及平均分

需求&#xff1a; 已知某同学的语文(70)、数学(90) 、英语(80)、历史(75)、地理(85)五门课的成绩,编程求该同学的总分以及平均分。 思考&#xff1a; 要求是算总分和平均分&#xff0c;先看总分&#xff0c;已经知道了各科成绩&#xff0c;那么可以用把成绩赋值给每个学科的…

PAT-10道题

PAT算法刷题 1002 1002 一&#xff1a;对于每一的1到6都进行枚举&#xff0c;进行递归操作 二&#xff1a;如果位数到了指定的n的时候&#xff0c;递归的条件&#xff0c;进行判断是否可以整除操作 #include<iostream> #include<algorithm> using namespace std; l…

antd vue a-select 下拉框位置偏移

问题 下拉框未固定 原因 select下拉框的定位是根据body定位 解决方法 在select 标签中添加&#xff1a; :getPopupContainer"(triggerNode) > (triggerNode.parentElement)" :getPopupContainer"(triggerNode) > (triggerNode.parentElement)"…

1-2、计算机组成

语雀原文链接 文章目录 1、计算机组成1-1、主板1-2、接口卡1-3、存储器&#xff08;内存&#xff09; 2、存储器2-1、存储器的重要性2-2、物理存储器2-3、逻辑存储器2-4、内存地址空间的分段2-5、存储单元2-6、指令和数据 3、总线3-1、三类总线3-2、CPU读数据例子3-3、CPU写数…