Datawhale AI 夏令营 机器学习挑战赛

一、赛事背景

在当今科技日新月异的时代,人工智能(AI)技术正以前所未有的深度和广度渗透到科研领域,特别是在化学及药物研发中展现出了巨大潜力。精准预测分子性质有助于高效筛选出具有优异性能的候选药物。以PROTACs为例,它是一种三元复合物由目标蛋白配体、linker、E3连接酶配体组成,靶向降解目标蛋白质。本次大赛聚焦于运用先进的人工智能算法预测其降解效能,旨在激发参赛者创新思维,推动AI技术与化学生物学的深度融合,进一步提升药物研发效率与成功率,为人类健康事业贡献智慧力量。通过此次大赛,我们期待见证并孵化出更多精准、高效的分子性质预测模型,共同开启药物发现的新纪元。

二、赛事任务

选手根据提供的demo数据集,可以基于demo数据集进行数据增强、自行搜集数据等方式扩充数据集,并自行划分数据。运用深度学习、强化学习或更加优秀人工智能的方法预测PROTACs的降解能力,若DC50>100nM且Dmax<80% ,则视为降解能力较差(demo数据集中Label=0);若DC50<=100nM或Dmax>=80%,则视为降解能力好(demo数据集中Label=1)。

下面给出代码流程:

  1. 数据加载
    • 使用pandas库从Excel文件中加载训练和测试数据集。
  2. 数据预处理
    • 删除训练集中不需要的列('DC50 (nM)'和'Dmax (%)')。
    • 检查测试集中的列,如果某列的非空值少于10个,则将该列从训练和测试集中删除。
    • 将训练和测试集合并为一个数据集,以便进行统一处理。
  3. SMILES转换
    • 使用rdkit库将SMILES字符串转换为isomeric SMILES,并将其连接成一个字符串。
  4. TF-IDF计算
    • 使用TfidfVectorizer计算SMILES字符串的TF-IDF值,并将其添加到数据集中。
  5. 自然数编码
    • 对所有对象类型的列进行自然数编码,即将每个唯一值映射到一个整数。
  6. 数据分割
    • 将带有标签的数据分割为训练集和验证集,测试集保持不变(包含NaN标签)。
  7. 特征筛选
    • 选择除'uuid'、'Label'和'smiles_list'之外的所有列作为特征。
  8. 网格搜索优化参数
    • 使用GridSearchCV进行参数优化,找到最佳的CatBoost分类器参数。
  9. 模型训练和验证
    • 使用最佳参数训练CatBoost分类器,并使用验证集进行早停,以防止过拟合。
  10. 预测和保存结果
    • 使用训练好的模型对测试集进行预测,并将预测结果保存为CSV文件。

下面是具体代码的分享

import numpy as np  
import pandas as pd  
from catboost import CatBoostClassifier  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import f1_score  
from rdkit import Chem  
from rdkit.Chem import Descriptors  
from sklearn.feature_extraction.text import TfidfVectorizer  
import os, gc, warnings 
from sklearn.model_selection import GridSearchCV, KFold  
warnings.filterwarnings('ignore')  # 数据加载  
train_full = pd.read_excel(r'C:\\Users\\admin\\Desktop\\dataset-new\\dataset-new\\traindata-new.xlsx')  
test = pd.read_excel(r'C:\\Users\\admin\\Desktop\\dataset-new\\dataset-new\\testdata-new.xlsx')  # 数据预处理  
train_full = train_full.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)  
drop_cols = []  
for f in test.columns:  if test[f].notnull().sum() < 10:  drop_cols.append(f)  
train_full = train_full.drop(drop_cols, axis=1)  
test = test.drop(drop_cols, axis=1)  data = pd.concat([train_full, test], axis=0, ignore_index=True)  
cols = data.columns[2:]  # 假设前两列是uuid和Label(或类似的列),这里需要根据实际情况调整  # SMILES转换  
data['smiles_list'] = data['Smiles'].apply(lambda x: [Chem.MolToSmiles(mol, isomericSmiles=True) for mol in [Chem.MolFromSmiles(x)]])  
data['smiles_list'] = data['smiles_list'].map(lambda x: ' '.join(x))  # TF-IDF计算  
tfidf = TfidfVectorizer(max_df=0.9, min_df=1, sublinear_tf=True)  
res = tfidf.fit_transform(data['smiles_list'])  
tfidf_df = pd.DataFrame(res.toarray())  
tfidf_df.columns = [f'smiles_tfidf_{i}' for i in range(tfidf_df.shape[1])]  
data = pd.concat([data, tfidf_df], axis=1)  # 自然数编码  
def label_encode(series):  unique = list(series.unique())  return series.map(dict(zip(unique, range(series.nunique()))))  for col in cols:  if data[col].dtype == 'object':  data[col] = label_encode(data[col])  labeled_data = data[data.Label.notnull()]  train, val = train_test_split(labeled_data, test_size=0.01, random_state=42, stratify=labeled_data['Label'])  # 外部验证集仍然是原始测试集,它包含NaN标签  
test = data[data.Label.isnull()]   # 特征筛选  
features = [f for f in train.columns if f not in ['uuid', 'Label', 'smiles_list']]  # 构建训练集和验证集  
x_train = train[features]  
y_train = train['Label'].astype(int)  
x_val = val[features]  
y_val = val['Label'].astype(int)  # 网格搜索优化参数  
params = {  'learning_rate': [0.1],  'depth': [ 6],  'l2_leaf_reg': [1],  'bootstrap_type': ['Bernoulli'],  'od_type': ['Iter'],  'random_seed': [42]  
}  model = CatBoostClassifier(iterations=20, eval_metric='AUC', verbose=1)  
grid_search = GridSearchCV(model, params, cv=5, scoring='f1', verbose=1, n_jobs=-1)  
grid_search.fit(x_train, y_train)  # 输出最佳参数  
print("Best parameters:", grid_search.best_params_)  
print("Best score:", grid_search.best_score_)  # 使用最佳参数训练模型,并使用验证集进行早停  
best_model = CatBoostClassifier(**grid_search.best_params_, iterations=2, eval_metric='AUC', use_best_model=True, verbose=1)  
best_model.fit(x_train, y_train, eval_set=[(x_val, y_val)])  # 预测  
test_pred = best_model.predict_proba(test[features])[:, 1]  # 保存结果  
pd.DataFrame({  'uuid': test['uuid'],  'Label': np.where(test_pred > 0.5, 1, 0)  
}).to_csv('submit.csv', index=None)

最后是运行结果:

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

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

相关文章

Hi3861 OpenHarmony嵌入式应用入门--MQTT

MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xff0c;是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…

AutoMQ 生态集成 Kafdrop-ui

Kafdrop [1] 是一个为 Kafka 设计的简洁、直观且功能强大的Web UI 工具。它允许开发者和管理员轻松地查看和管理 Kafka 集群的关键元数据&#xff0c;包括主题、分区、消费者组以及他们的偏移量等。通过提供一个用户友好的界面&#xff0c;Kafdrop 大大简化了 Kafka 集群的监控…

量产工具一一UI系统(四)

目录 前言 一、按钮数据结构抽象 1.ui.h 二、按键处理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、单元测试 1.ui_test.c 2.上机测试 前言 前面我们实现了显示系统框架&#xff0c;输入系统框架和文字系统框架&#xff0c;链接&#xff1a; 量产工具一一显…

Redis 底层数据结构

• 简单动态字符串 • 链表 • 字典 • 跳跃表 • 整数集合 • 压缩列表 • 对象 SDS 增加了len和free属性&#xff0c;记录buf数组的使用空间和剩余空间。好处:strken函数直接读取len值&#xff0c;时间复杂度是O(1)&#xff1b;预分配buf长度&#xf…

集控中心操作台材质选择如何选择

作为集控中心的核心组成部分&#xff0c;操作台不仅承载着各种设备和工具&#xff0c;更是工作人员进行监控、操作和管理的重要平台。因此&#xff0c;选择适合的集控中心操作台材质显得尤为重要。 一、材质选择的考量因素 在选择集控中心操作台材质时&#xff0c;我们需要综合…

SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate

在我们的业务流程之中不一定都会是自己模块查询自己模块的信息&#xff0c;有些时候就需要去结合其他模块的信息来进行一些查询完成相应的业务流程&#xff0c;但是在SpringCloud每个模块都相对独立&#xff0c;数据库也有数据隔离。所以当我们需要其他微服务模块的信息的时候&…

什么是SpringCloud Stream?

Spring Cloud Stream 是一个构建消息驱动微服务的框架&#xff0c;其基于Spring Boot来开发&#xff0c;并使用Spring Integration来连接消息代理中间件。该项目的目标是提供一套用于开发消息驱动应用的通用模型&#xff0c;并定义了用于发送和接收消息的绑定器&#xff08;Bin…

前端javascript中的排序算法之选择排序

选择排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 是一种原址排序法&#xff1b; 将数组分为两个区间&#xff1a;左侧为已排序区间&#xff0c;右侧为未排序区间。每趟从未排序区间中选择一个值最小的元素&#xff0c;放到已排序区间的末尾&#xff0c;从…

玩转springboot之为什么springboot可以直接执行

为什么springboot可以直接执行 先看一下springboot打包生成的MANIFEST.MF内容是什么 Manifest-Version: 1.0Implementation-Title: exam-adminImplementation-Version: 1.0-SNAPSHOTStart-Class: com.zhanghe.exam.ApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Bo…

小米采取措施禁止国行版设备安装国际版系统 刷机后将报错无法进入系统

据知名官改版系统 Xiaomi.EU 测试者 Kacper Skrzypek 发布的消息&#xff0c;小米目前已经在开机引导中新增区域检测机制&#xff0c;该机制将识别硬件所属的市场版本&#xff0c;例如中国大陆市场销售的小米即将在安装国际版系统后将无法正常启动。 测试显示该检测机制是在开…

1.DDR3 SO-DIMM 内存条硬件总结

最近在使用fpga读写DDR3&#xff0c;板子上的DDR3有两种形式与fpga相连&#xff0c;一种是直接用ddr3内存颗粒&#xff0c;另一种是通过内存条的形式与fpga相连。这里我们正好记录下和ddr3相关的知识&#xff0c;先从DDR3 SO-DIMM 内存条开始。 1.先看内存条的版本 从JEDEC下载…

四步带你实现【Open3d】--边缘检测

Open3D边缘检测技术从3D数据中精准识别并提取边界&#xff0c;对于场景解析、物体轮廓提取等任务至关重要。Open3D提供多种算法&#xff0c;帮助用户高效实现边缘检测&#xff0c;促进3D数据的深度分析和应用。 一、安装 pip install open3d # 即可 二、使用 首先&#…

《算法笔记》总结No.5——递归

一.分而治之 将原问题划分为若干个规模较小而结构与原问题相同或相似的子问题&#xff0c;然后分别解决这些子问题&#xff0c;最后合并子问题的解&#xff0c;即可得到原问题的解&#xff0c;步骤抽象如下&#xff1a; 分解&#xff1a;将原问题分解为若干子问题解决&#x…

用VLM训练实时计算机视觉模型

经过数十亿个参数训练的 AI 模型非常强大&#xff0c;但并不总是适合实时使用。但是&#xff0c;它们可以通过自动监督快速专用模型的标注来减少人力投入。 ‍ 如果你曾经构建过计算机视觉模型&#xff0c;就就会知道监督需要大量工作——人类花时间&#xff08;数小时或数天&a…

自动化测试全攻略:从入门到精通!

1、自动化测试专栏 随着技术的发展和工作需求的增长&#xff0c;自动化测试已成为软件质量保障体系中不可或缺的一环。 为了帮助广大测试工程师、开发者和对自动化测试感兴趣的读者们更好地掌握这一技能&#xff0c;今年特别推出了全新的《自动化测试全攻略&#xff1a;从入门…

scratch绘制四个三角形 2024年6月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

scratch绘制四个三角形 一、题目要求 2024年6月电子学会图形化编程Scratch等级考试二级真题 1、准备工作 1.保留默认角色小猫; 2.添加背景Stars。 2、功能实现 1 .隐藏角色小猫&#xff0c;设置画笔裙始位置为(0,0)&#xff0c;画笔颜色为黄色&#xff0c;画笔的粗细为5…

Scala Trait(特征)

Scala Trait(特征) Scala中的Trait是一种特殊的概念,它类似于Java中的接口,但提供了更多的功能。Trait允许我们定义一组方法,这些方法可以被子类实现,同时还可以包含方法的实现。这使得Trait既具有接口的灵活性,又具有抽象类的实用性。在本文中,我们将深入探讨Scala Tra…

NET Core 中的空对象设计模式

介绍 一种称为“空对象模式”的行为设计模式提供了一个对象来表示接口缺少的对象。在空对象会导致空引用异常的情况下&#xff0c;这是一种提供替代行为的方法。在本文中&#xff0c;我们将深入探讨 C# 空对象模式&#xff0c;并逐步解决更复杂的情况。 空对象设计模式它是什…

k8s离线部署芋道源码前端

目录 概述 编译Dockerfile 构建Dockerfilenginx.conf构建 k8s部署前端镜像部署ingress 概述 本篇将对 k8s离线部署芋道源码前端 进行详细的说明&#xff0c;对如何构建 Dockerfile&#xff0c;如何整合 Nginx&#xff0c;如何整合 ingress 进行实践。 相关文章&#xff1a;naco…

python 进阶教程--PIL图像处理

PIL图像处理 1. Pillow库简介2. 图像处理基础3. 图像操作4. 图像增强5. 图像处理进阶6. 图像绘制7. 图像序列和动画8. 图像识别和特征提取9. 实战项目10. 常见问题解答 1. Pillow库简介 PIL与Pillow的关系 PIL&#xff08;Python Imaging Library&#xff09;是一个提供图像处…