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; 量产工具一一显…

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

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

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

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

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

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

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

据知名官改版系统 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下载…

《算法笔记》总结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…

NET Core 中的空对象设计模式

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

k8s离线部署芋道源码前端

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

Hugging face Transformers(4)—— Model

Hugging Face 是一家在 NLP 和 AI 领域具有重要影响力的科技公司&#xff0c;他们的开源工具和社区建设为NLP研究和开发提供了强大的支持。它们拥有当前最活跃、最受关注、影响力最大的 NLP 社区&#xff0c;最新最强的 NLP 模型大多在这里发布和开源。该社区也提供了丰富的教程…

【Bug优化】支付宝支付中“交易订单处理失败,请稍后再试”问题

引言 近期&#xff0c;一位友友问&#xff1a;他在集成支付宝支付功能时遇到了一个棘手的问题&#xff0c;当用户在支付过程中选择放弃支付&#xff0c;尝试重新支付同一订单时&#xff0c;前端会显示“交易订单处理失败&#xff0c;请稍后再试”。 这个问题的核心在于支…

文章SameStr(一):图1代码

“Publication Figure 1” 百度云盘链接: https://pan.baidu.com/s/15g7caZp354zIWktpnWzWhQ 提取码: 4sh7 Libraries Standard Import library(tidyverse) library(cowplot) library(scales) library(ggpubr)Special # devtools::install_github("pmartinezarbizu/…

Spring的AOP基础以及AOP的核心概念

2. AOP基础 学习完spring的事务管理之后&#xff0c;接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心&#xff0c;我们先来学习AOP的基础。 在AOP基础这个阶段&#xff0c;我们首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c;让大家快速体…

Ubuntu配置GitHub(第一次clone/push)

文章目录 1. 安装Git&检查连接2. 注册GitHub3. 生成&GitHub添加SSH3.1. 检查&删除已有id_rsa3.2. 生成SSH3.3. GitHub添加id_rsa.pub SSH3.4. 检查SSH 4. 继续开发可以参考参考 1. 安装Git&检查连接 安装 sudo apt-get install git检查SSH连接 ssh -T gitgi…

【工具分享】零零信安攻击面管理平台

文章目录 00SEC-ASM™功能介绍功能演示 最近闲来无事&#xff0c;到处网上冲浪&#xff0c;无意间发现了长亭云图攻击面管理平台&#xff0c;无奈需要授权才能使用&#xff0c;于是就找到了平替&#xff1a;零零信安攻击面管理平台。 长亭云图攻击面管理平台&#xff1a;https:…