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.hqwc.cn/news/223446.html

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

相关文章

Go——三、运算符以及流程控制

Go 一、Go语言运算符1、算数运算符2、关系运算符3、逻辑运算符4、位运算符5、赋值运算符6、其他运算符7、运算符优先级 二、Go的流程控制1、if else2、for 循环结构3、for range(键值循环)4、switch case5、break:跳出循环6、go:跳…

AI视觉识别有哪些工业应用

AI视觉识别,主要是利用人工智能算法对图像或视频数据进行分析和处理,以提取关键信息并执行筛选、判断、预警等任务。AI视觉识别涵盖多种应用,如人脸识别、目标检测和识别、图像分割、行为识别、视频分析等。本篇就简单介绍一下AI视觉识别的应…

C语言:求Sn=a+aa+aaa+aaaa+……(n个a)之值,其中a表示一个数字,n表示a的位数,n由键盘录入。

分析: 在主函数 main 中,程序首先定义四个整型变量 a、n、i 和 sn,并初始化 a、n 和 i 的值,其中 sn 用于记录数列的和。然后使用 scanf 函数从标准输入中读取用户输入的两个整数 a 和 n。 接下来,程序通过 while …

共享模型之不可变

前言 该文章后续还需要进行修改!! 不可变的解释是对象属性不可以更改。 在多线程下,格式转化使用SimpleDateFormat可能会报错。这是因为线程之间互相影响导致。 public class test {public static void main(String[] args) {SimpleDateFo…

【JavaEE】多线程 (2) --线程安全

目录 1. 观察线程不安全 2. 线程安全的概念 3. 线程不安全的原因 4. 解决之前的线程不安全问题 5. synchronized 关键字 - 监视器锁 monitor lock 5.1 synchronized 的特性 5.2 synchronized 使⽤⽰例 1. 观察线程不安全 package thread; public class ThreadDemo19 {p…

Windows安装mysql8.0

官网地址:MySQL :: MySQL Community Downloads 选择相应版本信息下载 默认选择点击下一步 默认配置点击next 设置密码 默认配置

每天一道算法题:51. N 皇后

难度 困难 题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n_ _皇后问题 的…

关于水杯水

主要难点1.碰撞 (水杯移动太快碰撞出问题 2.吃水 (参数碰撞问题水随着时间变少 一.首先发射源:不易过小或者过大 过小>>>>水解算空间大水动态剧烈稳定慢 过大>>>>穿插漏水(不用担心一般model环节会给&am…

Ubuntu安装Vmtools (最新安装教程)

Ubuntu安装Vmtools 1. 设置root用户密码2. 切换root用户3. 安装vmools 1. 设置root用户密码 出现认证失败(Authentication failure)的原因有两种,要么是密码输入错误,要么是新安装的系统还没有给root设置密码,&#x…

Python---可变和非可变数据类型

在Python中一共有7种数据类型: 数值(int整型、float浮点类型)、bool类型(True和False)、字符串类型(str)、元组(tuple 1,2,3)、列表(list [1, 2, 3]&#xf…

i社为什么不出游戏了?

I社,即国际知名的游戏公司,近来为何鲜有新游问世?曾经风靡一时的游戏开发者,如今为何陷入了沉寂?这其中的种种原因,值得我们深入剖析。 首先,I社近期的沉寂可能与其内部管理层的调整和战略规划…

MATLAB中FFT频谱分析使用详解

文章目录 语法说明语法一:Y fft(X)fft(X)返回X长度的傅里叶变换 语法二:Y fft(X,N)如果 X的长度小于 N,则为 X补上尾零以达到长度 N(FFT插值)双边谱转换为单边谱 如果 X 的长度大于 N,则对 X 进行截断以达到长度 N。 语法三&…