4. 药物数据集介绍:MoleculeNet、Tox21、HIV、BACE 等

做药物数据分析,数据是根本。
我见过不少同学,GCN 模型调得再好,换了个数据集就崩了。
为什么?因为没吃透数据本身的脾性。
这一章,我就带你把这些常用数据集挨个捋一遍。

你想想看,GCN 输入的是图结构。
分子数据集里,每个分子就是一个图,原子是节点,化学键是边。
但不同数据集,图的大小、标签分布、任务类型差异很大。
选错数据集,轻则模型不收敛,重则结论全是错的。

我个人的习惯是:上手一个新数据集,先做三步:
查规模、看标签分布、算平均图大小。
这三步走完,心里就有底了。

4.1 MoleNet:药物图学习的基准平台

MoleculeNet 不是单个数据集,而是一个基准平台。
它由 DeepChem 团队维护,目标是统一药物图数据的评测标准。
里面集成了十几个子数据集,覆盖分类、回归、多任务等场景。

我个人习惯把它当作“药物图数据的 Imagenet ”。
你在上面跑通一个模型,基本就证明这个架构能处理分子图。

MoleculeNet 包含的常见子集(部分)
子数据集 任务类型 分子数 任务数 典型应用
ESOL 回归 1128 1 水溶性预测
FreeSolv 回归 643 1 水合自由能
Lipophilicity 回归 4200 1 脂水分配系数
HIV 分类 41127 1 HIV 活性
BACE 分类 1522 1 β-分泌酶抑制
Tox21 多任务分类 8014 12 毒性预测

注意看这个表。
不同数据集规模差了几十倍。
ESOL 只有 1128 个分子,HIV 却有 41127 个。
你如果用 GCN 跑 ESOL,模型稍微深一点就过拟合。
换到 HIV,又得担心欠拟合。

我的一点经验:选 MoleculeNet 子集时,先看你论文/项目的目标。
要发通用方法论文,用 HIV 或 Tox21,样本量大、任务难。
要做具体分子性质预测,用 ESOL 或 FreeSolv,专注回归任务。
这两个场景对 GCN 的要求完全不同。

4.2 Tox21:多任务毒性预测的金标准

Tox21 这个数据集,我印象很深。
它来自美国 Tox21 挑战赛,目标是预测 12 种不同毒性指标。
每个分子可能激活多种毒性通路,所以是个多标签分类问题。

为什么它是金标准?
第一,数据质量高,经过严格实验验证。
第二,标签分布极度不平衡——大多数分子是无毒的。

我曾经在一个毒性预测项目里,直接拿原始 Tox21 跑 GCN。
结果模型全预测成“无毒”,准确率 90% 多,但召回率是 0。
说白了,模型学到的就是“全部猜无毒”。
亏得我当时检查了混淆矩阵,不然就交了篇垃圾论文。

避坑指南:处理 Tox21 时,千万不要只看准确率。
一定要关注每个任务的 AUC、精确率、召回率。
我建议用加权交叉熵或 Focal Loss 来缓解类别不平衡。

Tox21 的图结构也有特点。
8014 个分子,平均原子数约 26,平均键数约 28。
这个规模对 GCN 比较友好,2-3 层图卷积就够了。
层数再深,容易过平滑,所有节点表征趋同。

加载 Tox21 的代码示例:

# 使用 DeepChem 加载 Tox21
import deepchem as dc

tasks, datasets, transformers = dc.molnet.load_tox21(
    featurizer='GraphConv',
    splitter='random',
    reload=False
)
train_dataset, valid_dataset, test_dataset = datasets

# 查看数据集信息
print(f"训练集分子数: {len(train_dataset)}")
print(f"任务数: {len(tasks)}")
print(f"任务名称: {tasks}")

这里我用了 GraphConv featurizer。
它会自动把 SMILES 转成图结构数据,节点特征包含原子类型、度数等。
你不需要自己写图构建代码,DeepChem 帮你做了。

4.3 HIV:大规模分子活性筛选

HIV 数据集来自 Drug Therapeutics Program (DTP) HIV 筛查。
它包含 41127 个分子,只有 1 个任务:判断是否抑制 HIV 复制。

这个数据集的难点在于:
活性分子只占 3.5% 左右。
剩余的 96.5% 都是非活性分子。

我记得第一次跑 HIV 时,模型 AUC 一直上不去。
后来发现,数据划分方式有问题——随机划分会把少量活性样本均匀分到各集。
但实际应用中,我们希望模型能泛化到全新的活性分子结构。
所以,我建议用 scaffold 划分,把结构相似的分子分在一起,模拟更真实的场景。

建议:在 HIV 上做实验时,
优先使用 scaffold_split 而不是 random_split。
这样才能评估模型对全新分子骨架的泛化能力。

HIV 的图平均大小约 40 个原子,对比 Tox21 大了一号。
这意味 GCN 需要更深的层数或者图池化策略来捕捉全局信息。

4.4 BACE:靶向药物设计的经典案例

BACE 数据集专注于 β-分泌酶 1 (BACE1) 抑制剂的活性预测。
BACE1 是阿尔茨海默病药物研发的重要靶点。
数据量不大,1522 个分子,但每个分子都有实验测定的 IC50 值。

我个人觉得,BACE 的价值在于它的“可解释性”需求高。
你预测出一个分子有活性,化学家会追问:哪个基团贡献最大?
这时候,GCN 的注意力机制或者梯度热力图就能派上用场。

我遇到过一个有意思的情况:
用 GCN 在 BACE 上训练完,模型在某些分子上预测很准。
分析模型内部表征后发现,它自动学到了 “磺酰胺基团” 对 BACE 抑制的重要性。
这正好和已知的化学知识吻合。
你看,GCN 不仅能预测,还能帮你挖掘分子机制。

BACE 的数据加载类似:

tasks, datasets, transformers = dc.molnet.load_bace(
    featurizer='GraphConv',
    splitter='scaffold'
)
train, valid, test = datasets
print(f"BACE 训练集: {len(train)} 分子")
print(f"BACE 测试集: {len(test)} 分子")

4.5 本章核心知识结构

下面这张图梳理了 MoleculeNet、Tox21、HIV、BACE 的关系和关键指标。
你可以把它当作选数据集时的速查表。

药物数据集核心知识结构 MoleculeNet 基准平台 Tox21 HIV BACE Tox21 关键指标 • 8014 分子,12 任务 • 多标签分类,极度不平衡 • 平均 26 原子 / 分子 HIV 关键指标 • 41127 分子,1 任务 • 二分类,活性仅 3.5% • 平均 40 原子 / 分子 BACE 关键指标 • 1522 分子,1 任务 • 回归/分类皆可 • 可解释性需求高 选数据集 = 看任务 + 看规模 + 看分布 推荐:新项目从 MoleculeNet 入门,快速验证 GCN 模型 深入:根据任务特点选择 Tox21 / HIV / BACE

4.6 数据集选择的实用建议

我根据自己做项目的经验,总结了一个简单的选型逻辑:

  • 练手/验证模型:用 ESOL 或 FreeSolv,数据小,跑得快
  • 多任务学习:用 Tox21,12 个任务可以测试模型的多标签能力
  • 大规模二分类:用 HIV,挑战类别不平衡
  • 靶向药物设计:用 BACE,兼顾预测准确性和可解释性
  • 综合评测:选 MoleculeNet 中的多个子集,做一个对比实验
注意:不同数据集的分割方式直接影响结果。
我建议你始终使用 scaffold split 作为默认划分。
无脑 random split 容易高估模型泛化能力,这在论文审稿时会被猛批。

嗯,数据集这部分就先讲到这。
你把这些背景信息吃透,后面跑 GCN 的时候就知道怎么调整模型结构了。