DeepChem 的教程体系是入门 AI 制药最完整的免费资源之一:从化学信息学基础到深度学习模型,有几十个可直接运行的 Notebook。它的价值在于「能立刻跑起来」,而这对入门至关重要。
教程体系的结构
| 部分 | 内容 | 建议 |
|---|---|---|
| 基础 | 数据集、特征化、模型接口 | 必看 |
| 分子性质预测 | QSAR、多任务、图模型 | 必看 |
| 数据处理 | 划分器、转换器 | 必看(划分部分) |
| 深度学习模型 | GCN、GAT、MPNN、AttentiveFP | 选看 |
| 生成模型 | VAE、GAN | 选看 |
| 蛋白与结构 | 结合亲和力、对接封装 | 选看 |
| 量子化学 / 材料 | DFT 数据、材料性质 | 按需 |
建议的学习路径
# 【第 1 周】:跑通基础流程
#
# 1) 环境安装
# conda create -n deepchem python=3.10
# conda activate deepchem
# pip install deepchem[torch]
# → 【依赖较重,建议独立环境】
#
# 2) 加载一个数据集,训练一个模型,看指标
# 目标:理解 Dataset → Featurizer → Model → Metric 的流程
#
# 3) 换不同的 featurizer 试试
# ECFP / GraphConv / Mol2Vec
# → 【感受表示方式对结果的影响】
import deepchem as dc
# 【关键:用 scaffold 划分而非 random】
tasks, datasets, transformers = dc.molnet.load_delaney(
featurizer="ECFP", splitter="scaffold")
train, valid, test = datasets
from sklearn.ensemble import RandomForestRegressor
model = dc.models.SklearnModel(
RandomForestRegressor(n_estimators=500, n_jobs=-1))
model.fit(train)
metric = dc.metrics.Metric(dc.metrics.rms_score)
print("训练:", model.evaluate(train, [metric], transformers))
print("测试:", model.evaluate(test, [metric], transformers))
# 【训练与测试的差距,就是过拟合的程度】
# 【第 2 周】:理解评测
#
# 4) 【对比 random 与 scaffold 划分的结果】
# → 这个对比是整个学习中最有价值的一课
#
# 5) 多个随机种子跑同一个配置
# → 感受结果的方差有多大
#
# 6) 用自己的 CSV 数据跑一遍
# 【第 3 周】:深度学习模型
#
# 7) 试 GraphConvModel、AttentiveFP
# 8) 【与随机森林基线比较】
# → 常常发现深度模型没有明显优势
# → 这是重要的认识,不是失败
# 【第 4 周】:扩展
#
# 9) 多任务学习
# 10) 迁移学习 / 预训练模型
# 11) 结合自己关心的实际问题
最重要的一课:划分方式的影响
# 【建议在学习早期就做这个实验】
import deepchem as dc
import numpy as np
from sklearn.ensemble import RandomForestRegressor
results = {}
for splitter in ["random", "scaffold"]:
scores = []
for seed in range(5):
tasks, datasets, transformers = dc.molnet.load_delaney(
featurizer="ECFP", splitter=splitter, reload=False)
train, valid, test = datasets
model = dc.models.SklearnModel(
RandomForestRegressor(n_estimators=300, random_state=seed, n_jobs=-1))
model.fit(train)
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
scores.append(model.evaluate(test, [metric], transformers)["pearson_r2_score"])
results[splitter] = (np.mean(scores), np.std(scores))
for k, (m, s) in results.items():
print(f"{k:10s} R² = {m:.3f} ± {s:.3f}")
# 典型输出:
# random R² = 0.88 ± 0.02
# scaffold R² = 0.62 ± 0.05
#
# 【这个差距就是「记忆」与「泛化」的差别】
# → 理解了这一点,你就超过了很多发表的论文(见 169)
需要注意的地方
- 依赖较重且易冲突:DGL、PyTorch、TensorFlow、RDKit 的版本组合有时难调和。用独立 conda 环境并锁定版本;
- 教程可能与最新版本不同步:API 有变化,老 Notebook 可能报错。遇到问题先查 GitHub 的 issue;
- MoleculeNet 数据集的局限:数据集小、标签质量参差(见 132《MoleculeNet 论文精读》)——把它当作学习工具而非评价方法优劣的依据;
- 不是生产级平台:DeepChem 定位是研究工具库,缺少数据治理、模型管理、系统集成能力(见 134《DeepChem 平台解读》);
- 某些模型实现的成熟度不一:用之前看看该模型的更新时间与测试情况。
学完之后该往哪走
| 方向 | 下一步 |
|---|---|
| 分子性质预测 | Chemprop(专用、更成熟,见 131《Chemprop / D-MPNN 论文精读》) |
| 更贴近实际的数据与任务 | TDC(见 133《TDC 论文精读》、005《Therapeutics Data Commons 教程》) |
| 化学信息学实操 | RDKit Cookbook(见 013《RDKit Cookbook》) |
| 完整的 CADD 流程 | TeachOpenCADD(见 012《TeachOpenCADD 教程》) |
| 图神经网络原理 | CS224W(见 006《Stanford CS224W 图神经网络》) |
| 结构基方法 | 对接与 MD(见 017《AutoDock Vina 教程》、015《OpenMM 教程》) |
| 实际项目 | 用自己的数据做一遍 |
给不同背景学习者的建议
- 有 ML 背景、缺化学:重点看 featurizer 部分,理解不同分子表示的含义;同时补化学信息学基础(见 031《SMILES 入门》、035《分子指纹是什么》);
- 有化学背景、缺 ML:重点看划分器与评测部分——这是最容易出错也最重要的;模型部分可以先当黑盒;
- 共同建议:不要满足于「跑通了教程」。真正的学习发生在你用自己的数据、遇到教程里没有的问题时;
- 一个练习:从 ChEMBL 下载一个靶点的数据,完整走一遍清洗、建模、评测——你会发现真实数据的问题比教程多得多,而这正是要学的。
关键要点
- 它的核心价值是「能立刻跑起来」,对入门至关重要;
- 最有价值的一课是对比 random 与 scaffold 划分的结果差距——理解了这点就超过很多论文;
- 依赖较重,用独立 conda 环境并锁定版本;教程可能与最新版不同步;
- 不要满足于跑通教程——真正的学习发生在用自己的数据时。
延伸资源
- DeepChem 平台解读:134《DeepChem 平台解读》;MoleculeNet:132《MoleculeNet 论文精读》;
- TDC 教程:005《Therapeutics Data Commons 教程》;TeachOpenCADD:012《TeachOpenCADD 教程》;Chemprop:131《Chemprop / D-MPNN 论文精读》。