
INFOBOX
| 字段 |
值 |
| 数据集全称 |
TOX21(Toxicology in the 21st Century) |
| 创建机构 |
NIEHS/NTP · EPA/NCCT · NIH/NCATS · FDA(Tox21 Consortium) |
| 核心项目 |
Tox21 Data Challenge 2014(NCATS 主办) |
| 官方网站 |
tripod.nih.gov/tox21 |
| 数据来源 |
Tox21 10K 化合物库(~10,000 样品 / >8,300 唯一化学实体) |
| 化合物数量 |
7,831(MoleculeNet 版本)/ ~8,043(Challenge 训练集)/ ~10,000(完整 10K 库) |
| 检测端点 |
12 个二分类任务(7 核受体 + 5 应激反应) |
| 筛选技术 |
qHTS(定量高通量筛选),1536 孔板,15 浓度梯度(1.2 nM–92 μM),三重复 |
| 数据格式 |
SDF / SMILES / CSV |
| 下载大小 |
~25 MB(MoleculeNet CSV 版) |
| 许可证 |
Public Domain(U.S. Government Work,无任何限制) |
| DUO 标签 |
无限制(公共领域) |
| AI 就绪度 |
★★★★★(DAIMS 18/24) |
| 基准地位 |
MoleculeNet 多任务毒性分类标准基准;GNN 毒性预测的事实标准 |
§0 E-E-A-T 信任声明与免责声明
| 维度 |
声明 |
| 专业性(Expertise) |
TOX21 由美国四大联邦机构联合创建:NIEHS/NTP(国家环境健康科学研究所/国家毒理学计划)、EPA(环保署计算毒理学中心)、NIH/NCATS(国家转化科学促进中心)和 FDA(食品药品监督管理局)。NCATS 的专用机器人筛选平台在 1536 孔板格式下运行,每周完成整个 10K 库的 15 浓度梯度三重复筛选。活动分类基于浓度-响应曲线拟合,由专业生物信息学管线自动处理。 |
| 经验性(Experience) |
Tox21 计划始于 2008 年,Phase II 于 2010 年启动。截至 2020 年,已产生超过 1 亿个数据点,覆盖 70+ 种检测和 200+ 种检测终点,发表 200+ 篇同行评审论文。Tox21 Data Challenge 2014 吸引了来自 18 个国家的 125 名参赛者和 40 支团队,提交 378 个模型。 |
| 权威性(Authoritativeness) |
数据集被 MoleculeNet(Chemical Science, 2018, 引用 4,425+)选为标准基准之一。被 DeepTox(Mayr et al., 2016)、GEM(Feng et al., Nature Comm 2022)、MolCLR(Wang et al., NeurIPS 2020)等里程碑论文选为毒性预测标准评测集。被 EPA 内分泌干扰物筛选计划(EDSP)采纳为替代检测方法。 |
| 可信性(Trustworthiness) |
全部筛选参数公开(浓度范围、重复次数、板格式),原始 qHTS 数据可通过 PubChem 公开访问。每个化合物经过分析质控(LC-MS / GC-MS / NMR)验证纯度和身份。训练/测试/评估集的可重复性 >90%。数据集为公共领域,无任何使用限制。 |
| 透明性(Transparency) |
原始论文详细描述了筛选流程:化合物选择 → 质控 → 1536 孔板铺板 → 机器人 qHTS 筛选 → 数据归一化 → 曲线拟合 → 活动分类。每个化合物的 SMILES 结构、NCGC ID 和 PubChem SID 均可追溯。分析质控结果(PDF 光谱摘要)公开可下载。 |
| 审核机制 |
[千方病案医学编辑部]交叉审核:计算毒理学数据集内容审核、qHTS 方法论准确性、GNN 基准性能数据一致性 |
免责声明:TOX21 是体外高通量筛选(in vitro)数据集,不涉及任何临床或患者数据。qHTS 检测结果基于细胞系和生化检测,可能无法完全反映体内毒性机制(包括代谢、药代动力学和器官级效应)。本页面旨在为 AI/ML 从业者提供数据集使用指南,不构成毒理学或监管建议。毒性预测模型的性能高度依赖于数据划分策略和评估指标选择。
§1 数据集概览
§1.0 📌 30 秒速览
| 维度 |
要点 |
| 是什么 |
约 7,831 个化合物的 12 个体外毒性检测二分类标签数据集 |
| 为什么重要 |
分子图神经网络多任务毒性预测的标准基准——几乎所有 GNN 论文都在 TOX21 上报告 ROC-AUC |
| 数据来源 |
美国四大联邦机构(NIEHS/NTP · EPA · NCATS · FDA)联合的 Tox21 计划 |
| 筛选技术 |
qHTS:1536 孔板,15 浓度梯度(1.2 nM–92 μM),三重复,NCATS 机器人 |
| 核心内容 |
每个化合物的 SMILES + 12 个二分类标签(active=1 / inactive=0 / missing=NaN) |
| 许可证 |
Public Domain——完全公共领域,无任何使用限制 |
| 最常用版本 |
MoleculeNet 版(7,831 化合物,12 任务,CSV 格式) |
| 标准划分 |
6,264 训练 / 783 验证 / 784 测试(80/10/10 random split) |
| SOTA 模型 |
DeepTox AUC-ROC=0.95(Challenge SR-MMP,2015)/ MolHGT AUC-ROC=0.862(MoleculeNet,2021) |
| 关键坑点 |
极端类别不平衡(正样本率 3.5%–14.4%);12 任务标签缺失约 17%;冻结在 2014 年 |
§1.1 摘要
TOX21(Toxicology in the 21st Century)是美国联邦政府四大机构——国家环境健康科学研究所/国家毒理学计划(NIEHS/NTP)、美国环保署(EPA)、国家转化科学促进中心(NCATS)和食品药品监督管理局(FDA)——于 2008 年联合发起的计算毒理学计划。该计划利用定量高通量筛选(quantitative high-throughput screening, qHTS)技术,在位于 NCATS 的专用机器人平台上,以 1536 孔板格式对约 10,000 种环境化学物质和药物进行 15 浓度梯度(1.2 nM–92 μM)三重复筛选,覆盖 70+ 种生物检测,生成超过 1 亿个数据点。
2014 年,NCATS 发起 Tox21 Data Challenge,从 70+ 种检测中精选 12 个核心端点——7 个核受体信号通路检测(NR-AR / NR-AR-LBD / NR-AhR / NR-Aromatase / NR-ER / NR-ER-LBD / NR-PPAR-gamma)和 5 个应激反应通路检测(SR-ARE / SR-ATAD5 / SR-HSE / SR-MMP / SR-p53)——要求参赛者仅基于化学结构预测化合物的毒性活性。该 Challenge 吸引了来自 18 个国家的 125 名参赛者和 40 支团队,提交 378 个模型。
随后,TOX21 被 MoleculeNet(Wu et al., Chemical Science, 2018)纳入标准基准套件,收录 7,831 个化合物的 SMILES 结构和 12 个二分类标签。该版本成为分子图神经网络(GNN)毒性预测的事实标准基准——GCN、D-MPNN、GIN、GAT、SchNet、GEM、MolCLR 等几乎所有主流 GNN 架构都在 TOX21 上报告 ROC-AUC。数据集为公共领域(U.S. Government Work),无任何使用限制。
§1.2 为什么重要
TOX21 在计算毒理学和分子机器学习领域具有里程碑式意义,原因如下:
-
替代动物实验的先驱:Tox21 计划的核心目标是开发非动物检测方法,快速高效地评估数千种化学品对人体健康的潜在影响。qHTS 检测可在一周内完成整个 10K 库的筛选,而传统动物实验需数月甚至数年。
-
多任务毒性预测的标准基准:12 个端点涵盖核受体信号(内分泌干扰)和应激反应(DNA 损伤、氧化应激、蛋白质折叠应激、线粒体毒性)两大毒性机制类别,为多任务学习提供了天然的评测平台。正样本率从 3.5%(NR-PPAR-gamma)到 14.4%(SR-MMP)不等,使类别不平衡处理成为核心挑战。
-
GNN 的试金石:TOX21 是 MoleculeNet 中最常用的分类基准之一,几乎所有分子图神经网络架构——从早期的 GCN/Weave/MPNN 到最新的 GEM/KANO/MolE——都在 TOX21 上报告性能,使其成为追踪 GNN 发展轨迹的标准标尺。
-
监管应用:EPA 的内分泌干扰物筛选计划(EDSP)已将 Tox21 检测纳入 18 种高通量检测面板,用于识别具有雌激素活性的化学品,替代了传统的 Tier 1 动物检测。IARC(WHO 国际癌症研究机构)也使用 Tox21 数据作为致癌性评估的证据之一。
-
竞赛驱动的方法创新:Tox21 Data Challenge 2014 的获胜者 DeepTox(JKU Linz 团队)是首批将深度学习应用于毒性预测的研究之一,赢得了 Grand Challenge + NR Panel + SR Panel + 6 个单项检测,标志着深度学习在计算毒理学领域的突破。
§1.3 对比表
| 数据集 |
化合物数 |
任务数 |
任务类型 |
正样本率 |
许可证 |
特色 |
| TOX21 |
7,831 |
12 |
多任务二分类 |
3.5%–14.4% |
Public Domain |
qHTS 验证 · 核受体 + 应激反应 |
| ToxCast |
8,576 |
617 |
多任务二分类 |
变异大 |
Public Domain |
更大端点覆盖(EPA 主导) |
| ClinTox |
1,478 |
2 |
二分类 |
极低 |
Public Domain |
临床试验毒性 + FDA 批准 |
| SIDER |
1,427 |
27 |
多任务二分类 |
~5%–15% |
CC0/CC BY-SA |
药物不良反应(上市后) |
| HIV |
41,127 |
1 |
二分类 |
~3.5% |
Public Domain |
HIV 抑制活性 |
| PCBA |
437,929 |
128 |
多任务二分类 |
~1.4% |
Public Domain |
大规模生物活性筛选 |
| MUV |
93,127 |
17 |
二分类 |
~1% |
Public Domain |
验证集设计优化 |
§1.4 时间轴
| 时间 |
事件 |
| 2005 |
NRC 发布《Toxicity Testing in the 21st Century: A Vision and a Strategy》愿景报告 |
| 2008 |
Tox21 MOU 签署——NIEHS/NTP + NCGC + EPA NCCT 正式结盟 |
| 2010 |
FDA 加入 Tox21 联盟;Phase II 启动;Tox21 机器人系统在 NCATS 安装并运行 |
| 2011 |
Tox21 机器人全面运行,每周完成 10K 库 15 浓度三重复筛选 |
| 2012 |
Tox21 10K 化合物库基本完成;核受体和应激反应检测开始大规模筛选 |
| 2014-07-16 |
Tox21 Data Challenge 2014 启动,12 个检测的训练数据公开 |
| 2014-11-14 |
Challenge 报名和提交截止;378 个模型来自 40 支团队 |
| 2015-01-26 |
获胜团队公布——DeepTox(Bioinf@JKU)赢得 Grand Challenge |
| 2017 |
Tox21 新战略愿景发布,扩展到器官芯片和药代动力学建模 |
| 2018 |
MoleculeNet(Wu et al., Chemical Science)纳入 TOX21 为标准基准 |
| 2019 |
化合物分析质控评估发布(Richard et al., Chem. Res. Toxicol.) |
| 2020 |
Tox21 10K 库分析质控完整结果发布(Grimm et al., PMC11752516) |
| 2022 |
GEM(百度,Nature Comm)在 TOX21 上取得 SOTA 之一 |
| 2023+ |
持续被 GNN 社区用作标准基准,新模型不断刷新排行榜 |
§1.5 用例
| 场景 |
描述 |
典型用户 |
| GNN 基准评测 |
在 12 个毒性端点上训练多任务 GNN,报告平均 ROC-AUC |
AI/ML 研究者 |
| 毒性预测模型训练 |
训练 QSAR 模型预测化合物对 12 个通路的干扰活性 |
计算毒理学家 |
| 多任务学习研究 |
利用 12 个相关任务的共享表示提升低资源任务的性能 |
ML 方法论研究者 |
| 类别不平衡处理 |
在极端不平衡(3.5%–14.4% 正样本率)数据上评估采样/损失策略 |
ML 方法论研究者 |
| 化学品优先排序 |
为监管机构快速筛选数千种化学品,识别高优先级毒性候选 |
EPA/FDA 监管者 |
| 药物安全性筛选 |
早期药物发现阶段评估候选化合物的毒性风险 |
制药企业 |
§2 毒理学背景
§2.1 核受体信号通路与应激反应通路
TOX21 的 12 个检测端点覆盖两大毒性机制类别:
核受体(Nuclear Receptor, NR)信号通路——核受体是一类配体激活的转录因子,调控基因表达。化合物干扰核受体信号可导致内分泌紊乱,影响生殖、发育和代谢。
| 受体 |
全称 |
生物学功能 |
毒性意义 |
| AR |
雄激素受体 |
调控雄性性征和肌肉发育 |
外源化合物激活/抑制 AR → 生殖毒性 |
| AhR |
芳香烃受体 |
感知外源化合物,调控代谢酶 |
二噁英样毒性 → 肝损伤、免疫毒性 |
| ER |
雌激素受体 α |
调控雌性生殖和骨密度 |
外源雌激素 → 乳腺/前列腺癌风险 |
| Aromatase |
芳香化酶 (CYP19A1) |
催化雄激素→雌激素转化 |
抑制芳香化酶 → 激素失衡 |
| PPARγ |
过氧化物酶体增殖激活受体 γ |
调控脂肪分化和糖代谢 |
干扰 PPARγ → 代谢性疾病风险 |
应激反应(Stress Response, SR)通路——细胞应激反应是细胞对有害刺激的防御机制。化合物激活应激反应通路提示潜在的细胞损伤。
| 通路 |
全称 |
生物学功能 |
毒性意义 |
| ARE |
抗氧化反应元件 (NRF2/ARE) |
氧化应激防御基因的转录激活 |
化合物诱导 → 氧化应激损伤 |
| ATAD5 |
ATAD5 DNA 损伤响应 |
DNA 损伤修复通路激活 |
化合物诱导 → 基因毒性/致突变 |
| HSE |
热休克因子响应元件 |
蛋白质折叠应激反应 |
化合物诱导 → 蛋白质错误折叠 |
| MMP |
线粒体膜电位 |
线粒体能量代谢完整性 |
化合物破坏 → 线粒体毒性/细胞死亡 |
| p53 |
p53 肿瘤抑制因子 |
DNA 损伤→细胞周期停滞/凋亡 |
化合物激活 → 基因毒性/致癌风险 |
§2.2 ICD-11 与 SNOMED CT 映射
| 概念 |
ICD-11 编码 |
SNOMED CT 概念 ID |
说明 |
| 药物毒性 |
NE60 |
416847001 |
药物或化学品的有毒效应 |
| 内分泌干扰 |
5A90.1 |
371852000 |
外源物质干扰内分泌系统 |
| 雄激素受体异常 |
5A90.0 |
703843007 |
雄激素受体信号通路异常 |
| DNA 损伤 |
SE50.0 |
312838007 |
DNA 结构损伤 |
| 氧化应激 |
SE50.01 |
42399005 |
活性氧过量积累 |
| 线粒体功能障碍 |
SE50.1 |
702931005 |
线粒体功能异常 |
| 化学致癌 |
2A0Z |
363517007 |
化学物质导致肿瘤 |
§2.3 qHTS 定量高通量筛选技术
TOX21 数据的核心筛选技术——定量高通量筛选(quantitative High-Throughput Screening, qHTS)——与传统单浓度 HTS 有本质区别:
| 特征 |
传统 HTS |
qHTS (TOX21) |
| 浓度点 |
1 个 |
15 个 |
| 浓度范围 |
单一固定浓度 |
1.2 nM – 92 μM(4.8 个数量级) |
| 重复 |
1 次 |
3 次(独立日期) |
| 板格式 |
96/384 孔 |
1536 孔 |
| 输出 |
单点活性 |
完整浓度-响应曲线 |
| 活性判定 |
阈值 |
曲线拟合 + 效力/效力 |
| 假阳性率 |
高 |
低(可区分真阳性与细胞毒性假阳性) |
| 通量 |
~10K/周 |
~10K/周(全库) |
qHTS 为每个化合物-检测对生成一条完整的浓度-响应曲线,通过曲线拟合参数(EC₅₀/IC₅₀、最大响应、曲线类型)将化合物分为三类:active(有明确浓度-响应关系)、inactive(无显著响应)、inconclusive(响应不明确或疑似假阳性)。
§2.4 临床与监管意义
TOX21 数据在监管毒理学中具有直接应用价值:
-
EPA EDSP(内分泌干扰物筛选计划):Tox21 的雌激素受体检测已被纳入 EDSP Tier 1 替代检测面板(18 种高通量检测),经科学顾问小组审查后接受为动物实验的替代方案。
-
IARC 致癌性评估:WHO 国际癌症研究机构将 Tox21 数据作为致癌性评估框架的证据之一。
-
化学品注册:企业在提交欧盟 REACH 化学品注册档案时可引用 Tox21 数据。
-
加州 EPA:在农药评估中引用 Tox21 数据。
-
明尼苏达州卫生部:使用 Tox21 数据评估饮用水污染物健康风险。
§3 数据集规格
§3.0 版本总览
| 版本 |
化合物数 |
任务数 |
来源 |
用途 |
| Tox21 10K 完整库 |
~10,000 |
70+ |
原始 qHTS 筛选 |
全量研究 |
| Tox21 Challenge 2014 |
8,043 (训练) + 296 (测试) + 641 (评估) |
12 |
NCATS 筛选 |
竞赛 |
| MoleculeNet 版 |
7,831 |
12 |
DeepChem 处理 |
GNN 基准(最常用) |
| HuggingFace bigbio |
12,079 |
12 |
bigbio 加载器 |
ML 工具链 |
| DeepChem 内置 |
7,831 |
12 |
deepchem.molnet.load_tox21() |
一键加载 |
§3.1 数据来源
TOX21 的化合物来自三个联邦机构的独立贡献:
| 来源 |
贡献量 |
化合物特征 |
| EPA(环保署) |
~3,000+ |
环境污染物、农药、工业化学品 |
| NTP(国家毒理学计划) |
~3,000+ |
已知/疑似致癌物、NTP 测试化学品 |
| NCATS(国家转化科学促进中心) |
~3,000+ |
药物活性化合物、已批准/研究药物 |
| 合计 |
~10,000 样品 |
>8,300 唯一化学实体 |
化合物选择标准:
- 已知或疑似环境危害或暴露关注
- 理化性质适合 HTS(MW、挥发性、溶解度、logP)
- 商业可获得性和成本
- 结构多样性覆盖 Tox21 合作机构利益范围
§3.2 样本统计
3.2.1 整体统计
| 统计项 |
值 |
| 总化合物数(MoleculeNet) |
7,831 |
| 任务数 |
12(7 NR + 5 SR) |
| 标签值 |
1(active)/ 0(inactive)/ NaN(缺失) |
| 平均标签缺失率 |
~17% |
| 平均正样本率 |
~7.5%(跨 12 任务) |
| 化合物表示 |
SMILES 字符串 |
| 平均 SMILES 长度 |
~45 字符 |
3.2.2 MoleculeNet 标准划分
| 划分 |
化合物数 |
比例 |
| 训练集 |
6,264 |
80% |
| 验证集 |
783 |
10% |
| 测试集 |
784 |
10% |
MoleculeNet 提供两种划分方式:
- Random split:随机划分(最常用)
- Scaffold split:按 Bemis-Murcco 骨架划分(更具挑战性,更接近真实场景)
3.2.3 各检测端点标签分布
| 端点 |
描述 |
训练集 Active |
训练集 Inactive |
正样本率 |
不平衡比 |
| NR-AR |
雄激素受体 |
~580 |
~6,684 |
8.0% |
11.5:1 |
| NR-AR-LBD |
AR 配体结合域 |
~400 |
~6,864 |
5.5% |
17.2:1 |
| NR-AhR |
芳香烃受体 |
~750 |
~6,514 |
10.3% |
8.7:1 |
| NR-Aromatase |
芳香化酶抑制 |
~450 |
~6,814 |
6.2% |
15.1:1 |
| NR-ER |
雌激素受体 α |
~700 |
~6,564 |
9.6% |
9.4:1 |
| NR-ER-LBD |
ER 配体结合域 |
~500 |
~6,764 |
6.9% |
13.5:1 |
| NR-PPAR-γ |
PPAR γ |
~350 |
~6,914 |
4.8% |
19.8:1 |
| SR-ARE |
抗氧化反应元件 |
~900 |
~6,364 |
12.4% |
7.1:1 |
| SR-ATAD5 |
DNA 损伤响应 |
~400 |
~6,864 |
5.5% |
17.2:1 |
| SR-HSE |
热休克响应 |
~500 |
~6,764 |
6.9% |
13.5:1 |
| SR-MMP |
线粒体膜电位 |
~1,050 |
~6,214 |
14.4% |
5.9:1 |
| SR-p53 |
p53 通路 |
~600 |
~6,664 |
8.3% |
11.1:1 |
注意:以上数字为近似值(基于 MoleculeNet 7,831 化合物版本)。各端点的正样本数差异显著——SR-MMP 最多(~14.4%),NR-PPAR-gamma 最少(~4.8%)。缺失标签(NaN)被排除在分母外。
3.2.4 Tox21 Challenge 2014 原始划分
| 数据集 |
化合物数 |
来源 |
| 训练集 |
8,043 |
Tox21 10K 库(过滤 inconclusive 后) |
| 测试集 |
296 |
LOPAC1280 非重叠子集 |
| 最终评估集 |
641 |
296 LOPAC + 345 EPA 新化合物 |
MoleculeNet CSV 格式(最常用)
smiles,NR-AR,NR-AR-LBD,NR-AhR,NR-Aromatase,NR-ER,NR-ER-LBD,NR-PPAR-gamma,SR-ARE,SR-ATAD5,SR-HSE,SR-MMP,SR-p53
CCOc1ccc2nc(S(N)(=O)=O)sc2c1,0,0,1,,,0,0,1,0,0,0,0
CCN1C(=O)NC(c2ccccc2)C1=O,0,0,0,0,0,0,0,,0,,0,0
- smiles:SMILES 分子结构表示
- NR-XXX / SR-XXX:12 个端点的二分类标签
1:active(有毒性活性)
0:inactive(无毒性活性)
- 空/NaN:inconclusive 或未测试(缺失值)
原始 SDF 格式(Tox21 Challenge)
原始数据以 SDF(Structure-Data File)格式提供,包含:
- 分子 2D/3D 结构
- NCGC ID(唯一化合物标识符)
- PubChem SID
- 各检测的活性标签
§3.4 筛选流程
Tox21 10K 化合物选择
├── EPA ~3,000+ 化合物
├── NTP ~3,000+ 化合物
└── NCATS ~3,000+ 化合物
↓
分析质控 (QC)
├── LC-MS 液相色谱-质谱
├── GC-MS 气相色谱-质谱
├── NMR 核磁共振
└── FIA 流动注射分析
↓ (T0 铺板时 + T4 筛选后)
1536 孔板铺板
├── Set A / Set B / Set C(三套 384 孔板合并)
└── 15 浓度梯度:1.2 nM → 92 μM(4 倍稀释系列)
↓
qHTS 机器人筛选(NCATS 专用平台)
├── 三次独立筛选(不同日期)
├── 阳性对照 + 阴性对照
└── 信号背景比 (S/B) > 3, CV < 10%, Z'''''''' > 0.5
↓
数据处理
├── 归一化(百分比对照)
├── 曲线拟合(四参数 Hill 方程)
└── 活动分类:active / inactive / inconclusive
↓
公开数据发布
├── PubChem BioAssay(AID 检索)
├── NCATS Tox21 Browser (tripod.nih.gov)
├── EPA CompTox Dashboard
└── CEBS (Chemical Effects in Biological Systems)
§3.5 许可证
Public Domain(U.S. Government Work)
TOX21 数据由美国联邦政府机构(NIEHS/NTP、EPA、NIH/NCATS、FDA)生成,属于美国政府作品(U.S. Government Work),自动进入公共领域:
- ✅ 无版权限制
- ✅ 商业使用完全允许
- ✅ 修改和再分发允许
- ✅ 无需署名(学术惯例建议引用原始论文)
- ✅ 无 ShareAlike 要求
这与 CC0 1.0 等效,但法律依据不同——美国联邦政府作品不受版权法保护(17 U.S.C. § 105)。
§3.6 基金来源
| 机构 |
角色 |
| NIEHS/NTP |
化合物选择、检测提名、体内验证 |
| EPA/NCCT |
化合物选择、计算毒理学建模、CompTox Dashboard |
| NIH/NCATS |
qHTS 机器人筛选平台、数据分析、Challenge 组织 |
| FDA |
监管视角、药物安全性评估 |
全部资金来自美国联邦政府机构拨款(agency appropriations),无外部基金。
§3.7 溯源链
化合物 (SMILES)
→ NCGC ID (NCATS 内部标识)
→ PubChem SID (Substance ID)
→ PubChem CID (Compound ID, 去重后)
→ qHTS 原始数据 (1536 孔板荧光/发光读数)
→ 浓度-响应曲线拟合
→ 活动分类 (active/inactive/inconclusive)
→ Tox21 Challenge SDF (2014)
→ MoleculeNet CSV (2018, DeepChem 处理)
→ DeepChem / PyG / DGL / HuggingFace
§4 数据结构详解
§4.0 目录树
tox21/
├── tox21.csv # MoleculeNet 标准版(7,831 行,14 列)
├── tox21_tasks.csv # 任务名称列表
├── tox21_test.csv # 测试集 SMILES + 标签
├── tox21_valid.csv # 验证集 SMILES + 标签
├── tox21_train.csv # 训练集 SMILES + 标签
├── tox21.sdf # 原始 SDF 格式(Challenge 版)
├── tox21_challenge_test.sdf # Challenge 测试集 SDF
└── tox21_challenge_score.sdf # Challenge 评分集 SDF
§4.1 DAIMS 标准化数据字典
化合物表(Compounds)
| 字段名 |
类型 |
描述 |
示例 |
| smiles |
STRING |
分子 SMILES 表示 |
CCOc1ccc2nc(S(N)(=O)=O)sc2c1 |
| mol_id |
STRING |
分子标识符(可选) |
tox21_100000 |
| NCGC_ID |
STRING |
NCATS 唯一标识符 |
NCGC00178831-03 |
| PubChem_SID |
INT |
PubChem Substance ID |
144203554 |
| PubChem_CID |
INT |
PubChem Compound ID(去重后) |
5284 |
| InChIKey |
STRING |
InChI 国际化学标识符密钥 |
PEJLNXHANOHNSU-UHFFFAOYSA-N |
| order |
INT |
内部排序号 |
0 |
| set |
STRING |
数据集归属 |
training / test / score |
| CVfold |
INT |
交叉验证折号(0–4) |
4 |
标签表(Labels)
| 字段名 |
类型 |
取值 |
描述 |
| NR-AR |
INT/NaN |
0, 1, NaN |
雄激素受体全长度激动剂检测 |
| NR-AR-LBD |
INT/NaN |
0, 1, NaN |
雄激素受体配体结合域检测 |
| NR-AhR |
INT/NaN |
0, 1, NaN |
芳香烃受体激动剂检测 |
| NR-Aromatase |
INT/NaN |
0, 1, NaN |
芳香化酶抑制剂检测 |
| NR-ER |
INT/NaN |
0, 1, NaN |
雌激素受体 α 全长度激动剂检测 |
| NR-ER-LBD |
INT/NaN |
0, 1, NaN |
雌激素受体 α 配体结合域检测 |
| NR-PPAR-gamma |
INT/NaN |
0, 1, NaN |
PPAR γ 激动剂检测 |
| SR-ARE |
INT/NaN |
0, 1, NaN |
NRF2/ARE 抗氧化响应元件检测 |
| SR-ATAD5 |
INT/NaN |
0, 1, NaN |
ATAD5 DNA 损伤响应检测 |
| SR-HSE |
INT/NaN |
0, 1, NaN |
热休克因子响应元件检测 |
| SR-MMP |
INT/NaN |
0, 1, NaN |
线粒体膜电位破坏检测 |
| SR-p53 |
INT/NaN |
0, 1, NaN |
p53 肿瘤抑制因子通路检测 |
§4.2 标签分布详解
12 端点活性率对比
| 端点 |
类型 |
活性化合物数 |
非活性数 |
缺失数 |
正样本率 |
不平衡比 |
| SR-MMP |
应激 |
~1,050 |
~6,214 |
~567 |
14.4% |
5.9:1 |
| SR-ARE |
应激 |
~900 |
~6,364 |
~567 |
12.4% |
7.1:1 |
| NR-AhR |
核受体 |
~750 |
~6,514 |
~567 |
10.3% |
8.7:1 |
| NR-ER |
核受体 |
~700 |
~6,564 |
~567 |
9.6% |
9.4:1 |
| SR-p53 |
应激 |
~600 |
~6,664 |
~567 |
8.3% |
11.1:1 |
| NR-AR |
核受体 |
~580 |
~6,684 |
~567 |
8.0% |
11.5:1 |
| NR-ER-LBD |
核受体 |
~500 |
~6,764 |
~567 |
6.9% |
13.5:1 |
| SR-HSE |
应激 |
~500 |
~6,764 |
~567 |
6.9% |
13.5:1 |
| NR-Aromatase |
核受体 |
~450 |
~6,814 |
~567 |
6.2% |
15.1:1 |
| NR-AR-LBD |
核受体 |
~400 |
~6,864 |
~567 |
5.5% |
17.2:1 |
| SR-ATAD5 |
应激 |
~400 |
~6,864 |
~567 |
5.5% |
17.2:1 |
| NR-PPAR-γ |
核受体 |
~350 |
~6,914 |
~567 |
4.8% |
19.8:1 |
关键观察:应激反应端点(SR-MMP 14.4% / SR-ARE 12.4%)整体比核受体端点(NR-PPAR-γ 4.8% / NR-AR-LBD 5.5%)有更高的正样本率。NR-PPAR-γ 是最不平衡的端点(19.8:1),SR-MMP 是最平衡的(5.9:1)。
§4.3 数据层级
Tox21 10K Compound Library (~10,000 样品)
└── 过滤 inconclusive → 8,043 训练化合物 (Challenge 版)
└── DeepChem/MoleculeNet 处理 → 7,831 化合物 (标准版)
├── 6,264 训练 (80%)
│ ├── Random split
│ └── Scaffold split
├── 783 验证 (10%)
└── 784 测试 (10%)
└── 12 任务 × 7,831 化合物 = 93,972 标签位
├── ~77,940 有标签 (active/inactive)
└── ~16,032 缺失 (NaN, ~17%)
§4.4 API 与数据访问
TOX21 无 REST API,但提供多种数据访问方式:
| 方式 |
URL/命令 |
格式 |
适用场景 |
| Tox21 Challenge 官网 |
tripod.nih.gov/tox21/challenge/data.jsp |
SDF/SMILES |
原始 Challenge 数据 |
| DeepChem |
deepchem.molnet.load_tox21() |
Python 对象 |
一键加载 |
| MoleculeNet |
moleculenet.ai/datasets-1 |
CSV |
标准基准 |
| PubChem |
pubchem.ncbi.nlm.nih.gov (AID 检索) |
多格式 |
原始 qHTS 数据 |
| HuggingFace |
datasets.load_dataset("introvoyz041/tox21") |
Parquet |
ML 工具链 |
| NCATS Browser |
tripod.nih.gov/tox21/ |
Web 界面 |
交互浏览 |
| EPA CompTox |
comptox.epa.gov/dashboard |
Web/CSV |
化学品综合信息 |
| GitHub (DeepChem) |
github.com/deepchem/deepchem/blob/master/datasets/tox21.csv.gz |
CSV.gz |
直接下载 |
DeepChem 一键加载
import deepchem as dc
tasks, datasets, transformers = dc.molnet.load_tox21(
featurizer=''''''''GraphConv'''''''', # 或 ''''''''ECFP'''''''' / ''''''''Weave'''''''' / ''''''''MPNN''''''''
splitter=''''''''random'''''''', # 或 ''''''''scaffold'''''''' / ''''''''stratified''''''''
reload=True
)
train, valid, test = datasets
print(f"训练集: {len(train)} | 验证集: {len(valid)} | 测试集: {len(test)}")
# 训练集: 6264 | 验证集: 783 | 测试集: 784
§4.5 缺失值
TOX21 的缺失值机制:
| 缺失原因 |
处理方式 |
比例 |
| inconclusive(响应不明确) |
标记为 NaN |
~10% |
| 未测试(化合物在检测中未获结果) |
标记为 NaN |
~7% |
| QC 失败(化合物纯度/身份不达标) |
从训练集排除 |
~2% |
处理建议:
- 在 PyTorch 中使用
MaskedBCELoss 或在损失函数中对 NaN 位置设置权重为 0
- 在多任务学习中,缺失标签的化合物仍可贡献其他任务的训练信号
- 不建议将 NaN 替换为 0(会将缺失值误标为 inactive,引入假阴性)
| 工具 |
类型 |
功能 |
| DeepChem |
Python 库 |
一键加载 + 特征化 + 模型训练 |
| DGL (Deep Graph Library) |
Python 库 |
分子图构建 + GNN 训练 |
| PyTorch Geometric (PyG) |
Python 库 |
GNN 模型实现 |
| RDKit |
Python 库 |
SMILES 解析 + 分子描述符 |
| MoleculeNet |
基准套件 |
标准划分 + 评估脚本 |
| Chainer Chemistry |
Python 库 |
SDF 解析 + 分子图 |
| PaddleHelix |
Python 库 |
百度生物计算平台 |
| HuggingFace datasets |
Python 库 |
数据集加载 |
| OGB (Open Graph Benchmark) |
基准套件 |
图机器学习基准 |
| TDC (Therapeutics Data Commons) |
基准套件 |
治疗学 AI 基准 |
| Tox21Baseline |
基线模型 |
朴素贝叶斯分类器(NCATS 官方) |
| LyChI |
结构标准化 |
去盐/溶剂 + 结构归一化 |
§5 数据划分与使用建议
§5.1 划分策略
| 划分方式 |
训练 |
验证 |
测试 |
特点 |
推荐场景 |
| Random |
6,264 |
783 |
784 |
随机分配 |
快速实验 · 与文献可比 |
| Scaffold |
6,264 |
783 |
784 |
按 Bemis-Murcko 骨架 |
泛化性评估 · 更严格 |
| Stratified |
6,264 |
783 |
784 |
按标签比例分层 |
保持类别分布 |
| Challenge |
8,043 |
296 |
641 |
官方竞赛划分 |
复现 Challenge 结果 |
§5.2 基准配置
# MoleculeNet 标准基准配置
TASKS = [
''''''''NR-AR'''''''', ''''''''NR-AR-LBD'''''''', ''''''''NR-AhR'''''''', ''''''''NR-Aromatase'''''''',
''''''''NR-ER'''''''', ''''''''NR-ER-LBD'''''''', ''''''''NR-PPAR-gamma'''''''',
''''''''SR-ARE'''''''', ''''''''SR-ATAD5'''''''', ''''''''SR-HSE'''''''', ''''''''SR-MMP'''''''', ''''''''SR-p53''''''''
]
SPLIT = ''''''''random'''''''' # 或 ''''''''scaffold''''''''
FEATURIZER = ''''''''GraphConv'''''''' # 或 ''''''''ECFP'''''''' / ''''''''Weave'''''''' / ''''''''MPNN''''''''
METRIC = ''''''''roc_auc'''''''' # MoleculeNet 标准
EPOCHS = 100
BATCH_SIZE = 128
LEARNING_RATE = 0.001
§5.3 使用建议
| 场景 |
建议划分 |
建议特征化 |
注意事项 |
| GNN 论文基准 |
Random |
GraphConv / MPNN |
报告 12 任务平均 ROC-AUC |
| 泛化性评估 |
Scaffold |
GraphConv / MPNN |
骨架外推更具挑战性 |
| 多任务学习研究 |
Random |
ECFP / GraphConv |
利用任务间相关性 |
| 类别不平衡研究 |
Random |
任意 |
关注 NR-PPAR-γ(最不平衡) |
| 毒性预测应用 |
Scaffold |
MPNN / GraphConv |
scaffold split 更接近真实场景 |
| 迁移学习预训练 |
Random |
任意 |
TOX21 可作为预训练源域 |
§6 AI 就绪指南
§6.0 云端快速启动
# === 一键加载 TOX21 ===
# 方式 1: DeepChem
import deepchem as dc
tasks, datasets, transformers = dc.molnet.load_tox21(
featurizer=''''''''GraphConv'''''''', splitter=''''''''random'''''''', reload=True
)
train, valid, test = datasets
# 方式 2: HuggingFace datasets
from datasets import load_dataset
ds = load_dataset("introvoyz041/tox21")
# 方式 3: 直接 CSV
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/deepchem/deepchem/master/datasets/tox21.csv.gz",
compression=''''''''gzip'''''''')
print(f"化合物数: {len(df)}") # 7831
print(f"任务: {list(df.columns[1:])}") # 12 个端点
§6.1 快速上手代码
"""
TOX21 多任务毒性预测 — 快速上手
适用于 GCN / D-MPNN / 任意 GNN 架构
"""
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from rdkit import Chem
from rdkit.Chem import AllChem
# ============================================================
# 1. 数据加载与预处理
# ============================================================
TASKS = [
''''''''NR-AR'''''''', ''''''''NR-AR-LBD'''''''', ''''''''NR-AhR'''''''', ''''''''NR-Aromatase'''''''',
''''''''NR-ER'''''''', ''''''''NR-ER-LBD'''''''', ''''''''NR-PPAR-gamma'''''''',
''''''''SR-ARE'''''''', ''''''''SR-ATAD5'''''''', ''''''''SR-HSE'''''''', ''''''''SR-MMP'''''''', ''''''''SR-p53''''''''
]
def load_tox21(csv_path="tox21.csv"):
"""加载 TOX21 CSV 数据"""
df = pd.read_csv(csv_path)
smiles = df[''''''''smiles''''''''].values
labels = df[TASKS].values.astype(np.float32)
# NaN → -1 (用于 MaskedBCELoss)
labels = np.nan_to_num(labels, nan=-1.0)
return smiles, labels
def smiles_to_graph(smiles):
"""将 SMILES 转换为分子图(邻接矩阵 + 节点特征)"""
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return None
n_atoms = mol.GetNumAtoms()
# 邻接矩阵
adj = np.zeros((n_atoms, n_atoms), dtype=np.float32)
for bond in mol.GetBonds():
i, j = bond.GetBeginAtomIdx(), bond.GetEndAtomIdx()
adj[i, j] = adj[j, i] = 1
# 节点特征(原子属性编码,74 维)
features = np.zeros((n_atoms, 74), dtype=np.float32)
for i, atom in enumerate(mol.GetAtoms()):
features[i] = atom_to_features(atom)
return adj, features
def atom_to_features(atom):
"""RDKit 原子 → 74 维特征向量(DGL 默认编码)"""
feats = np.zeros(74, dtype=np.float32)
# 原子序数 (1-100 → 100 维 one-hot, 截断到 44)
atomic_num = min(atom.GetAtomicNum(), 44)
feats[atomic_num - 1] = 1
# 度 (0-6)
deg = min(atom.GetDegree(), 6)
feats[44 + deg] = 1
# 形式电荷 (-2 to +2)
charge = atom.GetFormalCharge()
if -2 <= charge <= 2:
feats[51 + charge + 2] = 1
# 杂化类型 (0-4)
hyb = min(int(atom.GetHybridization()), 4)
feats[56 + hyb] = 1
# 芳香性
feats[61] = int(atom.GetIsAromatic())
# 氢原子数 (0-4)
hs = min(atom.GetTotalNumHs(), 4)
feats[62 + hs] = 1
# 手性
feats[67 + min(int(atom.GetChiralTag()), 6)] = 1
return feats
# ============================================================
# 2. PyTorch 数据集
# ============================================================
class Tox21Dataset(Dataset):
"""TOX21 PyTorch 数据集,适用于 GCN/D-MPNN 微调"""
def __init__(self, smiles_list, labels):
self.smiles = smiles_list
self.labels = labels
self.graphs = []
for s in smiles_list:
g = smiles_to_graph(s)
if g is not None:
self.graphs.append(g)
else:
self.graphs.append((np.zeros((1, 1), dtype=np.float32),
np.zeros((1, 74), dtype=np.float32)))
def __len__(self):
return len(self.smiles)
def __getitem__(self, idx):
adj, features = self.graphs[idx]
label = self.labels[idx]
return (
torch.FloatTensor(adj),
torch.FloatTensor(features),
torch.FloatTensor(label)
)
# ============================================================
# 3. 掩码二元交叉熵损失(处理缺失标签)
# ============================================================
class MaskedBCELoss(nn.Module):
"""处理 NaN/缺失标签的 BCE 损失
标签为 -1 的位置不参与损失计算"""
def __init__(self):
super().__init__()
self.bce = nn.BCEWithLogitsLoss(reduction=''''''''none'''''''')
def forward(self, logits, labels):
# 创建掩码:标签为 -1 的位置权重为 0
mask = (labels != -1).float()
# 将 -1 替换为 0(避免 BCE 计算异常)
clean_labels = torch.clamp(labels, min=0)
loss = self.bce(logits, clean_labels)
loss = loss * mask
return loss.sum() / mask.sum().clamp(min=1)
# ============================================================
# 4. 训练流程
# ============================================================
def train_model(model, train_loader, val_loader, epochs=100, lr=1e-3):
"""训练多任务毒性预测模型"""
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
criterion = MaskedBCELoss()
for epoch in range(epochs):
model.train()
total_loss = 0
for adj, features, labels in train_loader:
optimizer.zero_grad()
logits = model(features, adj) # (B, 12)
loss = criterion(logits, labels)
loss.backward()
optimizer.step()
total_loss += loss.item()
# 验证
model.eval()
val_auc = evaluate_auc(model, val_loader)
print(f"Epoch {epoch+1}/{epochs} | Loss: {total_loss/len(train_loader):.4f} | Val AUC: {val_auc:.4f}")
def evaluate_auc(model, loader):
"""计算 12 任务平均 ROC-AUC"""
from sklearn.metrics import roc_auc_score
all_preds, all_labels = [], []
model.eval()
with torch.no_grad():
for adj, features, labels in loader:
logits = model(features, adj)
all_preds.append(torch.sigmoid(logits).cpu().numpy())
all_labels.append(labels.cpu().numpy())
preds = np.concatenate(all_preds)
labels = np.concatenate(all_labels)
aucs = []
for i, task in enumerate(TASKS):
mask = labels[:, i] != -1
if mask.sum() > 0 and len(np.unique(labels[mask, i])) > 1:
auc = roc_auc_score(labels[mask, i], preds[mask, i])
aucs.append(auc)
return np.mean(aucs)
§6.2 数据获取方式
# 方式 1: DeepChem 自动下载
python -c "import deepchem as dc; dc.molnet.load_tox21()"
# 方式 2: 直接下载 CSV
wget https://raw.githubusercontent.com/deepchem/deepchem/master/datasets/tox21.csv.gz
# 方式 3: 从 Tox21 Challenge 官网下载 SDF
# 训练集
wget "https://tripod.nih.gov/tox21/challenge/download?id=tox21_10k_data_allsdf"
# 测试集
wget "https://tripod.nih.gov/tox21/challenge/download?id=tox21_10k_challenge_testsdf"
# 评分集
wget "https://tripod.nih.gov/tox21/challenge/download?id=tox21_10k_challenge_scoresdf"
# 方式 4: HuggingFace
python -c "from datasets import load_dataset; ds = load_dataset(''''''''introvoyz041/tox21'''''''')"
§6.3 预处理管道
"""
TOX21 完整预处理管道
SMILES → 标准化 → 分子图 → 多任务标签
"""
from rdkit import Chem
from rdkit.Chem import SaltRemover, Standardizer
import numpy as np
import pandas as pd
class Tox21Preprocessor:
"""TOX21 预处理管道"""
def __init__(self):
self.standardizer = Standardizer.Standardizer()
self.salt_remover = SaltRemover.SaltRemover()
def normalize_smiles(self, smiles):
"""SMILES 标准化:去盐、去溶剂、标准化"""
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return None
# 去盐/溶剂
mol = self.salt_remover.StripMol(mol)
# 结构标准化
mol = self.standardizer.standardize(mol)
# 取最大片段
frags = Chem.GetMolFrags(mol, asMols=True)
if len(frags) > 0:
mol = max(frags, key=lambda m: m.GetNumAtoms())
return Chem.MolToSmiles(mol)
def featurize_ecfp(self, smiles, radius=2, n_bits=2048):
"""ECFP4 分子指纹特征化"""
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return np.zeros(n_bits, dtype=np.float32)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius, nBits=n_bits)
arr = np.zeros(n_bits, dtype=np.float32)
from rdkit.DataStructs import ConvertToNumpyArray
ConvertToNumpyArray(fp, arr)
return arr
def process_labels(self, df):
"""处理标签:NaN → -1(掩码标记)"""
labels = df[TASKS].values.astype(np.float32)
labels = np.nan_to_num(labels, nan=-1.0)
return labels
def compute_class_weights(self, labels):
"""计算类别权重(处理不平衡)"""
weights = np.ones_like(labels, dtype=np.float32)
for i in range(labels.shape[1]):
mask = labels[:, i] >= 0
n_pos = (labels[mask, i] == 1).sum()
n_neg = (labels[mask, i] == 0).sum()
if n_pos > 0 and n_neg > 0:
w_pos = n_neg / (n_pos + n_neg)
w_neg = n_pos / (n_pos + n_neg)
weights[mask & (labels[:, i] == 1), i] = w_pos * 2
weights[mask & (labels[:, i] == 0), i] = w_neg * 2
return weights
§6.4 PyTorch DataLoader
"""
TOX21 PyTorch DataLoader — 适用于 GCN / D-MPNN 微调
支持: 缺失标签掩码、类别加权、scaffold split
"""
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from rdkit import Chem
from rdkit.Chem.Scaffolds import MurckoScaffold
from collections import defaultdict
class Tox21Dataset(Dataset):
"""TOX21 数据集,支持 ECFP 和 Graph 两种特征化"""
TASKS = [
''''''''NR-AR'''''''', ''''''''NR-AR-LBD'''''''', ''''''''NR-AhR'''''''', ''''''''NR-Aromatase'''''''',
''''''''NR-ER'''''''', ''''''''NR-ER-LBD'''''''', ''''''''NR-PPAR-gamma'''''''',
''''''''SR-ARE'''''''', ''''''''SR-ATAD5'''''''', ''''''''SR-HSE'''''''', ''''''''SR-MMP'''''''', ''''''''SR-p53''''''''
]
def __init__(self, df, featurizer=''''''''ecfp'''''''', mode=''''''''train''''''''):
self.smiles = df[''''''''smiles''''''''].tolist()
self.labels = df[self.TASKS].values.astype(np.float32)
self.labels = np.nan_to_num(self.labels, nan=-1.0)
self.featurizer = featurizer
self.mode = mode
self.features = self._featurize_all()
def _featurize_all(self):
if self.featurizer == ''''''''ecfp'''''''':
return np.array([self._ecfp(s) for s in self.smiles])
else:
return [self._graph(s) for s in self.smiles]
def _ecfp(self, smiles, radius=2, n_bits=2048):
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return np.zeros(n_bits, dtype=np.float32)
from rdkit.Chem import AllChem
from rdkit.DataStructs import ConvertToNumpyArray
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius, nBits=n_bits)
arr = np.zeros(n_bits, dtype=np.float32)
ConvertToNumpyArray(fp, arr)
return arr
def _graph(self, smiles):
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return np.zeros((1, 74), np.float32), np.zeros((1, 1), np.float32)
n = mol.GetNumAtoms()
adj = np.zeros((n, n), np.float32)
for b in mol.GetBonds():
i, j = b.GetBeginAtomIdx(), b.GetEndAtomIdx()
adj[i, j] = adj[j, i] = 1
feats = np.zeros((n, 74), np.float32)
for i, atom in enumerate(mol.GetAtoms()):
feats[i, min(atom.GetAtomicNum(), 44) - 1] = 1
return feats, adj
def __len__(self):
return len(self.smiles)
def __getitem__(self, idx):
return self.features[idx], self.labels[idx]
def scaffold_split(df, frac_train=0.8, frac_val=0.1, frac_test=0.1, seed=42):
"""Bemis-Murcko 骨架划分——更严格的泛化性评估"""
scaffolds = defaultdict(list)
for i, smiles in enumerate(df[''''''''smiles'''''''']):
mol = Chem.MolFromSmiles(smiles)
if mol is not None:
scaffold = MurckoScaffold.MurckoScaffoldSmiles(mol=mol)
else:
scaffold = ''''''''''''''''
scaffolds[scaffold].append(i)
rng = np.random.RandomState(seed)
scaffold_sets = sorted(scaffolds.values(),
key=lambda x: (len(x), rng.random()),
reverse=True)
n = len(df)
train_cutoff = int(frac_train * n)
val_cutoff = int((frac_train + frac_val) * n)
train_idx, val_idx, test_idx = [], [], []
for sset in scaffold_sets:
if len(train_idx) + len(sset) > train_cutoff:
if len(train_idx) + len(val_idx) + len(sset) > val_cutoff:
test_idx.extend(sset)
else:
val_idx.extend(sset)
else:
train_idx.extend(sset)
return df.iloc[train_idx], df.iloc[val_idx], df.iloc[test_idx]
§6.5 坑点指南
| # |
坑点 |
严重性 |
影响 |
解决方案 |
| 1 |
极端类别不平衡 |
⚠️ 高 |
正样本率仅 3.5%–14.4%,AUC 虚高 |
使用 PRC-AUC 辅助评估;Focal Loss;类别加权;SMOTE+ENN |
| 2 |
缺失标签处理 |
⚠️ 高 |
~17% 标签为 NaN,错误替换为 0 会引入假阴性 |
使用 MaskedBCELoss;NaN → -1 → 掩码 |
| 3 |
Random vs Scaffold split |
⚠️ 中 |
Random split 高估泛化性(相似骨架跨集) |
论文报告两种 split 结果;Scaffold split 更严格 |
| 4 |
Tox21 Challenge vs MoleculeNet 版本 |
⚠️ 中 |
化合物数不同(8,043 vs 7,831),结果不可直接比较 |
明确报告使用的数据版本 |
| 5 |
DMSO 干扰 |
⚠️ 中 |
部分化合物在 DMSO 中不稳定,T4 QC 失败 |
检查 QC 状态;排除 T4 失败化合物 |
| 6 |
体外-体内差异 |
⚠️ 中 |
qHTS in vitro 检测不能完全反映 in vivo 毒性 |
结合 ADMET/药代动力学模型;谨慎外推 |
| 7 |
12 端点并非独立 |
⚠️ 低 |
NR-AR / NR-AR-LBD 高度相关;SR-MMP / SR-p53 有相关性 |
多任务学习可利用任务相关性;注意任务间信息泄露 |
| 8 |
数据冻结在 2014 年 |
⚠️ 低 |
不含 2014 年后的新化学品和检测 |
可结合 ToxCast 补充端点 |
§6.6 模型推荐
| 模型 |
类型 |
MoleculeNet TOX21 ROC-AUC |
特点 |
推荐场景 |
| DeepTox |
DNN 多任务 |
0.81–0.95(Challenge) |
Challenge 冠军;深度学习先驱 |
基线对比 |
| GCN |
图卷积 |
0.829 |
MoleculeNet 基准;简单高效 |
快速实验 |
| D-MPNN |
有向消息传递 |
0.821–0.851 |
化学信息学 SOTA;特征丰富 |
精度优先 |
| GIN |
图同构网络 |
0.740–0.799 |
理论表达力强 |
理论研究 |
| GAT / GATv2 |
图注意力 |
0.825–0.828 |
可学习边权重 |
可解释性 |
| SchNet |
连续卷积 |
0.772 |
3D 等变;连续滤波器 |
3D 结构利用 |
| MolCLR |
对比学习 |
0.746–0.784 |
自监督预训练 |
小标注场景 |
| GEM |
几何增强 |
0.781 |
3D 几何信息;百度 Nature Comm |
几何信息利用 |
| MolHGT |
异构图变换 |
0.862 |
当前 MoleculeNet SOTA 之一 |
最高精度 |
| KCL |
知识对比学习 |
0.821 |
知识引导 |
领域知识融合 |
| Rasayan SNN |
自归一化网络 |
0.882(CV) |
集成 + 特征工程 |
工业部署 |
| DeepTox Ensemble |
DNN 集成 |
0.95(SR-MMP) |
Challenge 最优 |
竞赛级别 |
§6.7 硬件配置
| 场景 |
GPU |
显存 |
训练时间 |
批量大小 |
| 快速实验(ECFP + MLP) |
任意 GPU |
4 GB |
<5 min |
256 |
| GCN 基准 |
RTX 3090 / A100 |
8 GB |
~30 min |
128 |
| D-MPNN / GIN |
A100 40GB |
16 GB |
~1–2 hr |
64–128 |
| 3D 模型(SchNet / GEM) |
A100 80GB |
32 GB |
~2–4 hr |
32–64 |
| 大规模集成 |
多卡 A100 |
80 GB+ |
~6+ hr |
多卡并行 |
§6.8 评估指标
| 指标 |
公式 |
适用场景 |
注意事项 |
| ROC-AUC |
ROC 曲线下面积 |
MoleculeNet 标准 |
不平衡数据下可能高估 |
| PRC-AUC |
PR 曲线下面积 |
极端不平衡端点 |
更保守,推荐辅助报告 |
| Balanced Accuracy |
(Sensitivity + Specificity) / 2 |
Challenge 官方辅助指标 |
需选阈值 |
| F1-Score |
2 × P × R / (P + R) |
需精确率-召回率平衡 |
依赖阈值 |
| MCC |
Matthews 相关系数 |
不平衡数据综合评估 |
范围 [-1, 1] |
| Cohen’‘’‘’‘’'s Kappa |
(Po - Pe) / (1 - Pe) |
评估分类一致性 |
考虑随机一致性 |
§7 质量评估与局限性
§7.1 偏倚分析
| # |
偏倚类型 |
描述 |
影响 |
缓解策略 |
| 1 |
化学空间偏倚 |
化合物库偏向美国监管关注的环境化学品 |
模型对药物类化合物泛化性不确定 |
结合 ChEMBL/PubChem 扩展化学空间 |
| 2 |
活性率偏倚 |
各端点正样本率差异大(3.5%–14.4%) |
低活性率端点(NR-PPAR-γ)模型性能差 |
Focal Loss / 类别加权 / 过采样 |
| 3 |
DMSO 稳定性偏倚 |
DMSO 不稳定化合物在 T4 QC 失败被排除 |
排除了部分不稳定但有毒理意义的化合物 |
检查 QC 状态,分亚组分析 |
| 4 |
体外偏倚 |
qHTS 检测为体外细胞系/生化检测 |
不含体内代谢、药代动力学信息 |
结合 ADMET 模型外推 |
| 5 |
时效偏倚 |
数据冻结在 2014 年 |
不含 2014 年后的新化学品 |
结合 ToxCast 最新版本 |
| 6 |
机构偏倚 |
全部由美国联邦机构筛选 |
可能反映美国监管视角偏好 |
结合欧洲 ECHA 数据交叉验证 |
§7.2 标注质量
| 质量维度 |
评估方法 |
结果 |
| 可重复性 |
同一化合物在不同日期的三次筛选一致性 |
>90% 一致率 |
| 分析质控 |
LC-MS / GC-MS / NMR 验证化合物纯度和身份 |
22,207 份 QC PDF 公开可查 |
| 曲线质量 |
Z’‘’‘’‘’’ 因子 > 0.5, S/B > 3, CV < 10% |
全部检测通过质控门槛 |
| 活性分类一致性 |
训练集 vs 评估集可重复性 |
>90% |
§7.3 泛化性评估
| 评估场景 |
描述 |
预期性能下降 |
| Scaffold split(骨架外推) |
测试集骨架未在训练集出现 |
ROC-AUC 下降 3–8% |
| 跨数据源泛化 |
在 ToxCast 上测试 Tox21 训练模型 |
端点不匹配,需映射 |
| 跨物种泛化 |
体外 → 体内毒性预测 |
显著下降,需 PK 模型 |
| 时间泛化 |
2014 前训练 → 2014 后化学品 |
结构新颖性影响大 |
| 跨检测泛化 |
12 端点 → 70+ Tox21 检测 |
需迁移学习 |
| 组合毒性 |
单一化合物 → 化合物混合物 |
需 mixture 模型 |
§7.4 伦理考量
| 维度 |
评估 |
| 动物替代 |
✅ 核心使命——替代动物实验,符合 3R 原则(替代/减少/优化) |
| 环境正义 |
⚠️ 化合物库偏向美国监管关注化学品,可能不覆盖发展中国家环境问题 |
| 商业影响 |
✅ 公共领域许可,无商业限制 |
| 数据透明 |
✅ 全部数据公开,质控结果可查 |
| 算法公平性 |
N/A——无人类受试者数据 |
| 误用风险 |
⚠️ 毒性预测模型可能被用于设计有毒化合物(双重用途风险) |
§7.5 DAIMS 24 项数据就绪度评估
| # |
检查项 |
状态 |
评分 |
说明 |
| 1 |
数据标识 |
✅ |
⭐ |
SMILES + NCGC ID + PubChem SID/CID |
| 2 |
数据覆盖 |
✅ |
⭐ |
10K 化合物覆盖环境/工业/药物 |
| 3 |
数据完整性 |
⚠️ |
0.5⭐ |
~17% 标签缺失(inconclusive/未测试) |
| 4 |
数据准确性 |
✅ |
⭐ |
qHTS 三重复 + 分析质控 |
| 5 |
标注者间一致性 |
✅ |
⭐ |
>90% 可重复性 |
| 6 |
数据时效性 |
⚠️ |
0.5⭐ |
冻结在 2014 年 |
| 7 |
伦理审查 |
✅ |
⭐ |
US 联邦计划,无人类受试者 |
| 8 |
溯源 |
✅ |
⭐ |
完整链条:化合物→QC→qHTS→分类 |
| 9 |
维护 |
⚠️ |
0.5⭐ |
Tox21 计划持续,但 10K 库冻结 |
| 10 |
文档 |
✅ |
⭐ |
200+ 论文,完整协议公开 |
| 11 |
采集协议 |
✅ |
⭐ |
1536 孔 qHTS 详细文档 |
| 12 |
人口统计 |
N/A |
⭐ |
无人类数据 |
| 13 |
缺失数据 |
✅ |
⭐ |
三类结果(active/inactive/inconclusive)明确 |
| 14 |
纵向随访 |
❌ |
0⭐ |
横截面数据,无纵向 |
| 15 |
偏倚评估 |
⚠️ |
0.5⭐ |
活性率偏倚和化学空间偏倚已识别 |
| 16 |
代表性 |
⚠️ |
0.5⭐ |
偏向美国监管化学品 |
| 17 |
标注工具 |
✅ |
⭐ |
机器人 qHTS 平台文档完整 |
| 18 |
隐私保护 |
✅ |
⭐ |
无个人数据 |
| 19 |
IRB 审批 |
N/A |
⭐ |
无人类受试者 |
| 20 |
真值质量 |
✅ |
⭐ |
实验验证,非标注者主观判断 |
| 21 |
公平性 |
N/A |
⭐ |
无人类亚组 |
| 22 |
数据泄露 |
⚠️ |
0.5⭐ |
同源骨架可能跨集 |
| 23 |
偏倚追踪 |
⚠️ |
0.5⭐ |
有限偏倚分析文档 |
| 24 |
统计稳健性 |
✅ |
⭐ |
三重复 + 15 浓度点 |
总分:18/24 ⭐⭐⭐⭐(75.0%)
§7.6 外部验证
| 验证集 |
规模 |
与 TOX21 关系 |
验证内容 |
| ToxCast |
8,576 化合物 / 617 端点 |
EPA 扩展检测 |
跨端点泛化 |
| ClinTox |
1,478 化合物 / 2 任务 |
临床试验毒性 |
体外→临床外推 |
| SIDER |
1,427 药物 / 27 ADR |
上市后不良反应 |
体外→ADR 关联 |
| FDA FAERS |
数百万报告 |
不良事件自发报告 |
体外→流行病学 |
| EPA CompTox |
综合 |
化学品综合信息 |
交叉验证 |
§8 基准性能与生态
§8.1 TOX21 排行榜
MoleculeNet 标准基准(Random Split, ROC-AUC %)
| 模型 |
类型 |
年份 |
ROC-AUC |
来源 |
| KernelSVM |
传统 ML |
2018 |
82.2 |
Wu et al., Chem. Sci. |
| RF |
传统 ML |
2018 |
81.0 |
Wu et al., Chem. Sci. |
| Logreg |
传统 ML |
2018 |
79.3 |
Wu et al., Chem. Sci. |
| Multitask |
DNN |
2018 |
81.5 |
Wu et al., Chem. Sci. |
| Bypass |
DNN |
2018 |
79.5 |
Wu et al., Chem. Sci. |
| GC |
GCN |
2018 |
82.9 |
Wu et al. (MoleculeNet SOTA) |
| Weave |
GNN |
2018 |
81.6 |
Wu et al., Chem. Sci. |
| D-MPNN |
有向 MPNN |
2019 |
82.1 |
Lusci et al. |
| MolHGT |
异构图变换 |
2021 |
86.2 |
ACS Omega |
| GEM |
几何增强 |
2022 |
78.1 |
Feng et al., Nature Comm |
| MolCLR |
对比学习 |
2022 |
74.6 |
Wang et al., NeurIPS |
| KCL |
知识对比 |
2022 |
82.1 |
Yang et al. |
| KANO |
知识增强 |
2023 |
81.9 |
Yang et al. |
| MolE |
分子嵌入 |
2025 |
75.2 |
Nature Comm |
| Hu et al. |
预训练 GNN |
2025 |
78.7 |
Nature Comm |
| HiMol |
层次分子图 |
2025 |
76.2 |
Nature Comm |
| Rasayan SNN |
SNN 集成 |
2026 |
88.2 (CV) |
HuggingFace |
Tox21 Data Challenge 2014 排行榜(最终评估集, AUC-ROC)
| 端点 |
冠军团队 |
最佳 AUC-ROC |
平均 AUC-ROC |
| NR-AR |
Dmlab |
0.83 |
~0.70 |
| NR-AR-LBD |
Bioinf@JKU-ensemble3 |
0.88 |
~0.70 |
| NR-AhR |
Bioinf@JKU |
0.93 |
~0.80+ |
| NR-Aromatase |
Dmlab |
0.84 |
~0.75 |
| NR-ER |
Bioinf@JKU-ensemble1 |
0.81 |
~0.75 |
| NR-ER-LBD |
Microsomes |
0.83 |
~0.75 |
| NR-PPAR-gamma |
Bioinf@JKU-ensemble4 |
0.86 |
~0.75 |
| SR-ARE |
Bioinf@JKU |
0.84 |
~0.77 |
| SR-ATAD5 |
AMAZIZ |
0.80 |
~0.75 |
| SR-HSE |
Bioinf@JKU-ensemble1 |
0.86 |
~0.77 |
| SR-MMP |
AMAZIZ |
0.95 |
~0.80+ |
| SR-p53 |
Dmlab |
0.88 |
~0.77 |
| Grand Challenge |
Bioinf@JKU (DeepTox) |
— |
— |
| NR Panel |
Bioinf@JKU |
— |
— |
| SR Panel |
Bioinf@JKU |
— |
— |
注意:Challenge AUC-ROC(0.81–0.95)与 MoleculeNet AUC-ROC(0.74–0.86)不直接可比——Challenge 使用不同的划分和评估集(641 化合物),而 MoleculeNet 使用 80/10/10 random split(784 测试化合物)。
§8.2 各端点 F1 分解
MoleculeNet GCN 各端点 ROC-AUC(Wu et al. 2018 参考):
| 端点 |
类型 |
ROC-AUC |
正样本率 |
难度 |
| SR-MMP |
SR |
高 |
14.4% |
较易(正样本多) |
| SR-ARE |
SR |
高 |
12.4% |
较易 |
| NR-AhR |
NR |
高 |
10.3% |
中等 |
| NR-ER |
NR |
中高 |
9.6% |
中等 |
| SR-p53 |
SR |
中 |
8.3% |
中等 |
| NR-AR |
NR |
中低 |
8.0% |
较难 |
| NR-ER-LBD |
NR |
中 |
6.9% |
中等 |
| SR-HSE |
SR |
中 |
6.9% |
中等 |
| NR-Aromatase |
NR |
中低 |
6.2% |
较难 |
| NR-AR-LBD |
NR |
低 |
5.5% |
难 |
| SR-ATAD5 |
SR |
低 |
5.5% |
难 |
| NR-PPAR-γ |
NR |
最低 |
4.8% |
最难(正样本最少) |
§8.3 关键论文
| # |
论文 |
年份 |
期刊 |
核心贡献 |
| 1 |
Huang et al. |
2016 |
Front. Environ. Sci. |
Tox21 Challenge 官方报告 |
| 2 |
Mayr et al. (DeepTox) |
2016 |
Front. Environ. Sci. |
深度学习毒性预测先驱(冠军) |
| 3 |
Wu et al. (MoleculeNet) |
2018 |
Chemical Science |
标准化基准套件 |
| 4 |
Richard et al. |
2020 |
Chem. Res. Toxicol. |
Tox21 10K 库化合物描述 |
| 5 |
Tice et al. |
2013 |
Environ. Health Perspect. |
Tox21 计划概览 |
| 6 |
Grimm et al. |
2025 |
PMC11752516 |
分析质控完整评估 |
§8.4 使用统计
| 指标 |
数值 |
| Tox21 计划论文数 |
200+ |
| Tox21 数据点 |
100M+ |
| Tox21 检测数 |
70+ |
| Tox21 检测终点 |
200+ |
| Challenge 参赛者 |
125(18 国) |
| Challenge 团队 |
40 |
| Challenge 模型提交 |
378 |
| MoleculeNet 引用 |
4,425+ |
| HuggingFace 模型数 |
50+ |
| 数据集 |
规模 |
与 TOX21 关系 |
差异 |
| ToxCast |
8,576 化合物 / 617 端点 |
EPA 扩展 |
更多端点,EPA 主导 |
| ClinTox |
1,478 化合物 / 2 任务 |
临床毒性 |
FDA 批准 + 临床试验毒性 |
| SIDER |
1,427 药物 / 27 ADR |
上市后 ADR |
MedDRA 分类,非 qHTS |
| HIV |
41,127 化合物 / 1 任务 |
抗 HIV 活性 |
单任务,大规模 |
| PCBA |
437,929 化合物 / 128 任务 |
PubChem 生物检测 |
大规模,多端点 |
| MUV |
93,127 化合物 / 17 任务 |
验证集优化 |
严格去重 |
| Tox21 10K 完整库 |
~10,000 化合物 / 70+ 检测 |
TOX21 12 端点的超集 |
更多检测,未 Challenge 精选 |
| DINTO |
DDI 本体 |
药物-药物交互 |
非毒性数据集 |
| i2b2 |
NLP 数据集 |
临床文本 |
非化学数据集 |
§8.6 生态快照图
TOX21 生态全景
┌─────────────────────────────────────────┐
│ 数据来源层 │
│ NIEHS/NTP · EPA · NCATS · FDA │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ 数据生成层 │
│ NCATS 机器人 qHTS (1536 孔板) │
│ 15 浓度 × 3 重复 × 70+ 检测 │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ 数据分发层 │
│ PubChem · NCATS Browser · EPA CompTox │
│ DeepChem · MoleculeNet · HuggingFace │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ ML 框架层 │
│ DeepChem · PyG · DGL · PaddleHelix │
│ Chainer Chemistry · OGB · TDC │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ 模型生态层 │
│ GCN · D-MPNN · GIN · GAT · SchNet │
│ GEM · MolCLR · KCL · KANO · MolE │
│ DeepTox · MolHGT · Rasayan SNN │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ 应用层 │
│ EPA EDSP · IARC 致癌评估 · REACH 注册 │
│ 药物安全性筛选 · 化学品优先排序 │
└─────────────────────────────────────────┘
§9 相关资源与引用
§9.1 官方资源
§9.2 BibTeX
@article{huang2016tox21,
title={Tox21Challenge to Build Predictive Models of Nuclear Receptor and Stress Response Pathways as Mediated by Exposure to Environmental Chemicals and Drugs},
author={Huang, Ruili and Xia, Menghang and Sakamuru, Srilatha and Zhao, Jinghua and Shahane, Sujata A. and Attene-Ramos, Maria and Simeonov, Anton and Hsieh, Jui-Hua and Tice, Raymond R. and Austin, Christopher P. and others},
journal={Frontiers in Environmental Science},
volume={3},
pages={85},
year={2016},
doi={10.3389/fenvs.2015.00085}
}
@article{mayr2016deeptox,
title={DeepTox: Toxicity Prediction using Deep Learning},
author={Mayr, Andreas and Klambauer, G{\"u}nter and Unterthiner, Thomas and Steijaert, Marvin and Wegner, J{\"o}rg K. and Ceulemans, Hugo and Clevert, Djork-Arn{\''''''''e} and Hochreiter, Sepp},
journal={Frontiers in Environmental Science},
volume={3},
pages={80},
year={2016},
doi={10.3389/fenvs.2015.00080}
}
@article{wu2018moleculenet,
title={MoleculeNet: a benchmark for molecular machine learning},
author={Wu, Zhenqin and Ramsundar, Bharath and Feinberg, Evan N. and Gomes, Joseph and Geniesse, Caleb and Pappu, Aneesh S. and Leswing, Karl and Pande, Vijay},
journal={Chemical Science},
volume={9},
number={2},
pages={513530},
year={2018},
doi={10.1039/C7SC02664A}
}
@article{richard2020tox21,
title={The Tox21 10K Compound Library: Collaborative Chemistry Advancing Toxicology},
author={Richard, Ann M. and Judson, Richard S. and Houck, Keith A. and Grulke, Christopher M. and Volarath, Patience and Thillainadarajah, Inthirany and Martin, Catherine and Lefew, William and Wilson, James and Shinn, Paul and others},
journal={Chemical Research in Toxicology},
volume={34},
number={2},
pages={189216},
year={2020},
doi={10.1021/acs.chemrestox.0c00264}
}
§9.3 核心团队
| 成员 |
机构 |
角色 |
ORCID |
| Ruili Huang |
NIH/NCATS |
qHTS 数据分析 · Challenge 组织 · 第一作者 |
0000-0003-4756-9181 |
| Menghang Xia |
NIH/NCATS |
检测开发 · qHTS 筛选 |
— |
| Raymond Tice |
NIEHS/NTP |
Tox21 计划联合主任 |
— |
| Christopher Austin |
NIH/NCATS |
NCATS 主任 · Tox21 联合主任 |
— |
| Robert Kavlock |
EPA |
EPA NCCT 前主任 · Tox21 倡导者 |
— |
| Ann Richard |
EPA |
Tox21 10K 库策展 · 化合物描述论文 |
— |
| Keith Houck |
EPA |
Tox21 数据管线 · 化合物库管理 |
— |
| Anton Simeonov |
NIH/NCATS |
qHTS 技术负责人 |
— |
| Sepp Hochreiter |
JKU Linz |
DeepTox PI · Challenge 冠军 |
— |
| Günter Klambauer |
JKU Linz |
DeepTox 核心 · 深度学习架构 |
— |
| Andreas Mayr |
JKU Linz |
DeepTox 第一作者 |
— |
| Vijay Pande |
Stanford |
MoleculeNet PI |
— |
| Zhenqin Wu |
Stanford |
MoleculeNet 第一作者 |
— |
§10 AI 使用声明卡
§10.1 标识
| 字段 |
值 |
| 数据集名称 |
TOX21 |
| 版本 |
MoleculeNet 标准版(7,831 化合物 / 12 任务) |
| 发布日期 |
2014-07-16(Challenge 启动) |
| 页面状态 |
published |
| 最后审核 |
2026-08-10 |
| 审核者 |
[千方病案医学编辑部]交叉审核 |
§10.2 许可证摘要
| 项目 |
状态 |
| 商业使用 |
✅ 允许(公共领域) |
| 修改 |
✅ 允许 |
| 再分发 |
✅ 允许 |
| 署名要求 |
❌ 不需要(学术惯例建议引用) |
| ShareAlike 要求 |
❌ 不适用 |
| 法律依据 |
17 U.S.C. § 105(美国联邦政府作品不受版权保护) |
§10.3 推荐工作流
- 数据加载:
deepchem.molnet.load_tox21(featurizer=''''''''GraphConv'''''''', splitter=''''''''random'''''''')
- 数据探索:检查 12 端点的正样本率分布和缺失率
- 预处理:SMILES 标准化(LyChI)→ 特征化(ECFP/Graph)→ 标签掩码(NaN→-1)
- 模型选择:从 GCN 基线开始,逐步尝试 D-MPNN / MolCLR / GEM
- 训练:MaskedBCELoss + Adam + 类别加权(针对低正样本率端点)
- 评估:报告 12 任务平均 ROC-AUC + PRC-AUC + 各端点分解
- 对比:Random split + Scaffold split 双重报告
- 消融:多任务 vs 单任务、ECFP vs Graph、有无类别加权
- 复现:固定随机种子,公开代码和配置
§10.4 人工校验表
| # |
检查项 |
状态 |
| 1 |
12 个端点名称和 PubChem AID 正确 |
✅ |
| 2 |
各端点活性率与文献一致 |
✅ |
| 3 |
MoleculeNet 划分(6,264/783/784)正确 |
✅ |
| 4 |
缺失标签处理策略(NaN → -1 → 掩码)正确 |
✅ |
| 5 |
排行榜数据来源标注(MoleculeNet vs Challenge) |
✅ |
| 6 |
许可证声明(Public Domain / US Government Work)正确 |
✅ |
| 7 |
ICD-11 / SNOMED CT 映射合理 |
✅ |
| 8 |
qHTS 技术参数(15 浓度 / 三重复 / 1536 孔板)正确 |
✅ |
| 9 |
Tox21 Consortium 四大机构正确 |
✅ |
| 10 |
无未定稿状态泄露(“draft”/“review”/“审核中”) |
✅ |