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-learn

import lightgbm as lgb
import numpy as np
import pandas as pd

from 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.mfbz.cn/a/195421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

String类讲解(1)

🐵本篇文章将讲解String类及其包含的方法 一、介绍String类 String属于引用类型,String类是Java的一个内置类,用于表示字符串,String类中具有许多方法,可以用来操作和处理字符串 二、字符串的构造 下面介绍三种构造字…

【序列推荐】MAN:跨领域顺序推荐的混合注意网络

#论文题目:MAN:Mixed Attention Network for Cross-domain Sequential Recommendation(跨领域顺序推荐的混合注意网络) #论文地址:https://dl.acm.org/doi/10.1145/3543507.3583278 #论文源码开源地址:http…

第二十章多线程

课程重点: 线程相关概念的理解线程的生命周期线程的常用方法 20.1. 线程的简介 20.1.1. 串行与并发 如果在程序中,有多个任务需要被处理,此时的处理方式可以有串行和并发: 串行(同步):所有的任务&…

【密码学引论】分组密码

第三章 分组密码 DES、IDEA、AES、SM4 1、分组密码定义(按照五个组成部分答) 密钥空间:属于对称加密算法kekd明密文空间:将明文划分为m比特的组,每一块依次进行加密加解密算法:由key决定一个明文到密文的…

AIGC系列之:升级版的Stable Diffusion之SDXL介绍

目录 AIGC工具对比 DALL-E MidJourney Stable Diffusion 相关资料 SDXL介绍 SDXL生图效果 SDXL训练LoRA流程 AIGC工具对比 在目前的三大新兴文本转图像模型中,Stable Diffusion诞生得最晚,但由于拥有发展良好的开源社区,它的用户关注…

影响机器视觉测量精度的因素有哪些?

精度测量取决于分辨率 在机器视觉测量中提供高精度和低不确定度的决定性因素是获取的图像的分辨率。在这种情况下,术语分辨率 (或图像分辨率)意味着以实际单位的单个像素的大小。简而言之,如果一个摄像机传感器在水平方向上包含…

Vue实现可拖拽边界布局

Vue实现可拖拽边界布局 在前端开发中,有时需要实现一种可拖拽边界的布局,通过拖动分隔线来调整不同区域大小。例如,下图是一个典型的可拖拽边界布局,它由左右两个区域组成,左边是一个树形菜单,右边是一个上…

【开源】基于JAVA的农村物流配送系统

项目编号: S 024 ,文末获取源码。 \color{red}{项目编号:S024,文末获取源码。} 项目编号:S024,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2…

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )FPGA部分

一、实验目的 1、掌握用SSI(小规模集成电路)逻辑器件设计组合电路的方法。 2、掌握组合逻辑电路的调试方法。 3、学会分析和解决实验中遇到的问题。 4、学会用FPGA实现本实验内容。 二、实验原理 包括:原理图绘制和实验原理简述 1、1位半加器 2、1位全加器 3、三…

leetcode 1670

leetcode 1670 解题思路 使用2个deque作为类的成员变量 code class FrontMiddleBackQueue { public:deque<int> left;deque<int> right;FrontMiddleBackQueue() {}void pushFront(int val) {left.push_front(val);if(left.size() right.size()2){right.push_fr…

2021年06月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题2分,共20分) 第1题 执行下列程序,输出的结果为? A:12 B:24 C:8 D:30 答案:B 第2题 执行下列程序,角色说出的内容是? A:2 B:3 C:4 D:5 答案:A 第3题 执行下列程序,输出结果为?

C++基础 -6-二维数组,数组指针

二维数组在内存中的存放方式和一维数组完全相同 下表把二维数组抽象成了行列形式方便理解 a[0]指向第一行首元素地址 a指向第一行的首地址 所以a地址和a[0]地址相同,因为起点相同 但a[0]1往右偏移 但a1往下方向偏移 方便理解 an控制行 a[0]n控制列(相当于*an) 数组指针指向二…

聊聊VMware vSphere

VMware vSphere是一种虚拟化平台和云计算基础设施解决方案&#xff0c;由VMware公司开发。它为企业提供了一种强大的虚拟化和云计算管理平台&#xff0c;能够在数据中心中运行、管理和保护应用程序和数据。vSphere平台与VMware ESXi虚拟化操作系统相结合&#xff0c;提供了完整…

Linux fork笔试练习题

1.打印结果&#xff1f; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int main() {int i0;for(;i<2;i){fork();printf("A\n");}exit(0); } 结果打印 A A A A A A 2.将上面的打印的\n去掉,结果如何? printf("…

HarmonyOS 应用模型开发指南介绍

一、基本概念解析 新版文档中的知识点&#xff0c;介绍更全面&#xff0c;逻辑更清晰&#xff0c;提供了各类基本概念解析&#xff0c;帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。 1、HAP是什么&#xff1f; 开发者通过DevEco Studio把应用程序编译为一…

入门级认证 | Salesforce管理员认证最新备考指南!

Salesforce管理员认证是其他任何管理员认证的基础。通过此考试将展示你对Salesforce功能和最佳实践的了解&#xff0c;使用自定义功能来管理、维护和扩展Salesforce平台。 Admin认证对备考者的要求 Salesforce管理员认证验证了备考者在管理客户和简档、维护数据质量、配置自动…

C/C++ Zlib实现文件压缩与解压

在软件开发和数据处理中&#xff0c;对数据进行高效的压缩和解压缩是一项重要的任务。这不仅有助于减小数据在网络传输和存储中的占用空间&#xff0c;还能提高系统的性能和响应速度。本文将介绍如何使用 zlib 库进行数据的压缩和解压缩&#xff0c;以及如何保存和读取压缩后的…

2、XFP 与 SFP+:有什么区别?

在光纤网络领域&#xff0c;光模块是促进数据顺利传输的重要组件。市场继续接受10G XFP和10G SFP等10G光模块&#xff0c;促使人们对XFP与SFP进行更仔细的审视。他们有什么区别&#xff1f;XFP和SFP的定义是什么&#xff1f;他们的应用场景又如何呢&#xff1f;在下文中寻找所有…

MySQL用得好好的,为何要转ES?

MySQL是一种关系型数据库&#xff0c;它可以高效地存储和查询结构化的数据。 ES是一种分布式搜索引擎&#xff0c;它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。 MySQL 和 ES 的数据存储方式也不同。MySQL 中的数据通常是以关系型表的形式存储在磁盘上&…

8.0 泛型

通过之前的学习&#xff0c;读者可以了解到&#xff0c;把一个对象存入集合后&#xff0c;再次取出该对象时&#xff0c;该对象的编译类型就变成了Object类型&#xff08;尽管其在运行时类型没有改变&#xff09;。集合设计成这样&#xff0c;提高了它的通用性&#xff0c;但是…