尧图精选

DeepChem 实战:基于 ToxCast 数据集训练多任务随机森林毒性预测模型

🕒 发布时间:2026/9/17 8:58:14 📁 来源:尧图网络
DeepChem 实战基于 ToxCast 数据集训练多任务随机森林毒性预测模型【免费下载链接】deepchemDemocratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology项目地址: https://gitcode.com/GitHub_Trending/de/deepchemToxCast 是美国 EPA 主导的体外高通量毒性筛选计划与 Tox21 同源其公开数据包含 8000 余种化合物在超过 600 项生化与细胞实验上的定性结果。本篇指南以 examples/toxcast/README.md 为核心骨架完整讲解如何在 DeepChem 中加载 ToxCast 数据、进行特征化与数据变换、划分训练/验证/测试集并训练一个可复用的多任务随机森林分类模型同时结合仓库源码与底层molnet加载器补充实现细节。ToxCast 数据集是什么ToxCastToxicity Forecaster与 Tox21 来自同一研究倡议但数据规模更大它基于体外高通量筛选in vitro high-throughput screening对大型化合物库进行毒理学测试。DeepChem 仓库中经过处理的 ToxCast 集合包含超过 600 项实验在约 8000 种化合物上的定性结果。该数据集的原始来源论文为Richard, Ann M., et al. ToxCast chemical landscape: paving the road to 21st century toxicology. Chemical research in toxicology 29.8 (2016): 1225-1251.原始数据文件是一个 CSV 表格其中被 DeepChem 使用的列包括列含义smiles化合物分子结构的 SMILES 表示ACEA_T47D_80hr_Negative~Tanguay_ZF_120hpf_YSE_up各生物测定Bioassay的实验结果列任务列的命名遵循检测平台_细胞类型/模型_时间点_读出信号的约定例如ATG_AR_TRANS_up雄激素受体报告基因上调、TOX21_ERa_BLA_Agonist_ratio雌激素受体激动剂比率、Tanguay_ZF_120hpf_MORT_up斑马鱼胚胎致死等具体实验信息可参考 EPA 官网的 high-throughput assay information 栏目。数据加载器从 CSV 到 DeepChem 数据集本示例的自定义加载器位于 examples/toxcast/toxcast_datasets.py其核心函数为load_toxcast(featurizerECFP, splitindex)完整流程如下import os import deepchem as dc def load_toxcast(featurizerECFP, splitindex): current_dir os.path.dirname(os.path.realpath(__file__)) dataset_file os.path.join(current_dir, ./processing/toxcast_data.csv.gz) dataset dc.utils.save.load_from_disk(dataset_file) if featurizer ECFP: featurizer dc.feat.CircularFingerprint(size1024) elif featurizer GraphConv: featurizer dc.feat.ConvMolFeaturizer() TOXCAST_tasks dataset.columns.values[1:].tolist() # 第一列是 smiles其余全是任务列 loader dc.data.CSVLoader( tasksTOXCAST_tasks, smiles_fieldsmiles, featurizerfeaturizer) dataset loader.featurize(dataset_file) return TOXCAST_tasks, (train, valid, test), transformers这段代码揭示了 ToxCast 示例的几个关键设计任务列的自动推导通过dataset.columns.values[1:].tolist()把 CSV 中除smiles外的所有列当作多任务学习的标签列无需手工维护任务清单——这正是 ToxCast 数据列即实验的体现。数据文件位置实际数据位于 examples/toxcast/processing/toxcast_data.csv.gz仓库同时保留了toxcast_539.csv.gz与toxcast_571.csv.gz等中间版本可通过 processing/tox.py 的加工流程追溯生成过程详见下文。支持的两种特征化方式load_toxcast通过字符串参数切换特征化器featurizer取值实际特征化器说明ECFP默认dc.feat.CircularFingerprint(size1024)1024 位圆形ECFP指纹基于 RDKit 实现适合传统机器学习模型GraphConvdc.feat.ConvMolFeaturizer()分子图卷积特征为图神经网络模型准备指纹特征与图特征的关键差异在于ECFP 把分子编码为定长 0/1 向量可直接输入随机森林等 sklearn 模型ConvMolFeaturizer则生成带原子邻接关系的图结构需要配合图卷积类模型使用。数据平衡变换与数据集划分加载器在返回数据前还做了两项重要的预处理# 1. 类别平衡变换为不平衡的多任务分类数据自动加权 transformers [dc.trans.BalancingTransformer(datasetdataset)] for transformer in transformers: dataset transformer.transform(dataset) # 2. 数据集划分 splitters { index: dc.splits.IndexSplitter(), random: dc.splits.RandomSplitter(), scaffold: dc.splits.ScaffoldSplitter() } splitter splitters[split] train, valid, test splitter.train_valid_test_split(dataset)BalancingTransformerToxCast 数据严重不平衡阴性远多于阳性见 examples/low_data/toxcast_maml.py 中的注释该变换器会为每个任务计算样本权重让训练时少数类获得更高权重是提升多任务毒性模型效果的关键一步。三种内置划分器IndexSplitter按顺序划分默认、RandomSplitter随机划分、ScaffoldSplitter按分子骨架划分用于评估泛化到新化学骨架的能力。使用时只需把split参数改为random或scaffold即可切换。训练多任务随机森林模型examples/toxcast/toxcast_rf.py 展示了完整的训练脚本其核心思想是SingletaskToMultitask为每一个任务单独训练一个随机森林子模型再统一管理from sklearn.ensemble import RandomForestClassifier from deepchem.molnet import load_toxcast import deepchem as dc toxcast_tasks, toxcast_datasets, transformers load_toxcast() (train_dataset, valid_dataset, test_dataset) toxcast_datasets metric dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean) def model_builder(model_dir): sklearn_model RandomForestClassifier( class_weightbalanced, n_estimators500, n_jobs-1) return dc.models.SklearnModel(sklearn_model, model_dir) model dc.models.SingletaskToMultitask(toxcast_tasks, model_builder) model.fit(train_dataset)注意这里直接使用from deepchem.molnet import load_toxcast即调用的是 MolNet 提供的官方加载器见下文而非示例目录下的同名函数——两条路径最终产出的数据结构一致(tasks, (train, valid, test), transformers)。关键参数说明配置值作用class_weightbalancedsklearn 内置参数与BalancingTransformer形成双保险进一步缓解类别不平衡n_estimators500随机森林超参数500 棵决策树兼顾精度与训练耗时n_jobs-1随机森林超参数使用全部 CPU 核心并行训练加快速度SingletaskToMultitaskDeepChem 封装按任务列表为每个任务构造独立子模型评估时自动汇总模型训练完成后使用 ROC-AUC 作为评估指标多个任务的均值分别对训练集和验证集打分train_scores model.evaluate(train_dataset, [metric], transformers) valid_scores model.evaluate(valid_dataset, [metric], transformers)evaluate会返回每个任务的 ROC-AUC 及整体均值。对 ToxCast 这种典型的多任务毒性筛选场景ROC-AUC 能较好衡量模型在阳性样本极少情况下的排序能力。运行方式确保 DeepChem 已正确安装后在仓库根目录执行python examples/toxcast/toxcast_rf.py脚本会自动完成数据加载、特征化、变换、训练与评估并依次打印训练集与验证集的评估分数。MolNet 官方加载器更现代的调用方式示例脚本中实际使用的deepchem.molnet.load_toxcast定义在 deepchem/molnet/load_function/toxcast_datasets.py它比示例目录下的旧版加载器功能更完整是当前推荐入口。其完整签名如下def load_toxcast( featurizerECFP, splitterscaffold, transformers[balancing], reloadTrue, data_dirNone, save_dirNone, **kwargs ) - (tasks, (train, valid, test), transformers)相比旧版加载器的主要增强自动下载若本地不存在数据会从TOXCAST_URLDeepChem 官方数据仓库自动下载toxcast_data.csv.gz到data_dir无需手工准备数据文件。内置完整任务清单模块顶部定义了TOXCAST_TASKS列表deepchem/molnet/load_function/toxcast_datasets.py共 617 项任务涵盖核受体AR/ER/PPAR/VDR 等、应激通路ARE/HSE/NFkB、ADME 相关酶CYP450 系列、离子通道、GPCR、斑马鱼发育毒性Tanguay_ZF_120hpf_*等多个毒理学终点。缓存机制reloadTrue时首次调用会按特征化器 划分器的组合把处理好的数据集缓存到磁盘后续调用直接加载缓存避免重复特征化。参数化更灵活featurizer、splitter、transformers均可传字符串或对象splitterNone时不划分全部数据作为单一数据集返回。大数据集分片加载内部通过CSVLoader.create_dataset(dataset_file, shard_size8192)以 8192 行为一个分片shard进行特征化内存友好。MolNet 加载器是 DeepChem 全部基准数据集tox21、sider、pcba、muv 等的统一入口deepchem/molnet/run_benchmark.py 中把toxcast注册进MODELS与DATASETS字典因此 ToxCast 也可直接参与run_benchmark.py的自动化基准评测模型包括 rf、tf、graphconv、weave 等详见该文件的模型注册表。原始数据的加工管线examples/toxcast/processing/tox.py 记录了 ToxCast 原始数据到toxcast_data.csv.gz的加工过程可以理解为数据血缘lineage说明读取三份中间文件casn_to_smiles.csv.gzCAS 登记号 → SMILES、code_to_casn.csv.gz实验代号 → CAS 号、code_to_hitc.csv.gz实验代号 × 化合物的命中矩阵 hit-call通过code → casn → smiles两级映射把命中矩阵中的实验代号替换为 SMILES 字符串丢弃无法映射到 SMILES 的行脚本中以badCounter统计处理缺失值后输出reprocessed_tox_cast.csv。这条管线说明 ToxCast 的最终 CSV 中的smiles列是从化学登记号体系CASRN映射而来而非直接由 EPA 提供 SMILES理解这一点有助于排查数据质量问题。进阶场景ToxCast 用于小样本元学习由于 ToxCast 任务数量多617 项但单任务样本稀疏它还是 DeepChem 元学习Meta-Learning示例的理想数据源。examples/low_data/toxcast_maml.py 演示了使用 MAMLModel-Agnostic Meta-Learning在 ToxCast 上做小样本毒性预测数据规模脚本注释明确指出 ToxCast 包含6874 个分子、617 个任务且数据高度稀疏——大多数任务只覆盖少数分子且阴性远多于阳性每任务构造正负样本交替的批次保证每个 batch 正负例数量均衡用 80% 的任务做元训练剩余任务做验证比较微调前后compute_scores(False)vscompute_scores(True)的 ROC-AUC 与准确率变化。该示例展示了同一份 ToxCast 数据在不同学习范式多任务分类 vs 元学习下的复用方式也印证了任务多、样本稀疏、类别不平衡是 ToxCast 的核心数据特征建模时需针对性处理。小结从 examples/toxcast/README.md 出发本文完整覆盖了 ToxCast 毒理学数据的加载、特征化、平衡变换、数据集划分与多任务随机森林训练全流程。实践中的关键要点可归纳为数据形态CSV 中smiles列 617 个实验任务列约 8000 化合物定性二分类结果两类入口旧版 toxcast_datasets.py本地文件 三种划分器与新版 MolNet 加载器自动下载 缓存 更全的参数化推荐使用后者不平衡处理BalancingTransformer与随机森林的class_weightbalanced双管齐下模型结构SingletaskToMultitask为每个任务构建独立随机森林500 棵树、全核并行以 ROC-AUC 均值评估进阶方向同一数据集可迁移到 MAML 元学习、图卷积等更复杂的建模方案。如需继续探索可参考仓库内相关实现ToxCast MolNet 加载器、数据加工脚本、基准评测注册表、MAML 元学习示例。【免费下载链接】deepchemDemocratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology项目地址: https://gitcode.com/GitHub_Trending/de/deepchem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →