DeepChem 是最早成体系的开源分子机器学习框架(MIT 许可,源自斯坦福 Pande 组)。它的价值不在于某个最强模型,而在于把「数据集 → 特征化 → 模型 → 划分与评测」抽象成四个可互换的组件,让你用几十行代码跑通一条完整的分子 ML 流程。
安装
pip install deepchem # 核心
pip install deepchem[torch] # 需要 GNN 等深度模型时
python -c "import deepchem as dc; print(dc.__version__)"
DeepChem 同时支持 PyTorch 与 TensorFlow 后端,历史上的模型分散在两边,新项目优先选 PyTorch 系的实现。它依赖 RDKit 做底层化学处理(见 171《RDKit》)。
四件套对象模型
| 组件 | 作用 | 常用实现 |
|---|---|---|
Featurizer |
分子 → 数值表示 | CircularFingerprint、MolGraphConvFeaturizer、RDKitDescriptors |
Dataset |
统一存放 X / y / w / ids | NumpyDataset、DiskDataset |
Splitter |
划分训练/验证/测试 | RandomSplitter、ScaffoldSplitter、ButinaSplitter |
Model |
训练与预测 | GraphConvModel、AttentiveFPModel、SklearnModel |
四者可以自由组合:换特征不用改模型,换划分不用改数据。这种正交设计正是它适合做基线对比的原因。
一段完整流程
import deepchem as dc
import numpy as np
# 1) 加载标准数据集(自动下载 + 特征化 + 划分)
tasks, datasets, transformers = dc.molnet.load_delaney(
featurizer="GraphConv", splitter="scaffold")
train, valid, test = datasets
# 2) 建模训练
model = dc.models.GraphConvModel(n_tasks=len(tasks), mode="regression")
model.fit(train, nb_epoch=50)
# 3) 评测(注意要反变换回原尺度)
metric = dc.metrics.Metric(dc.metrics.rms_score)
print("valid RMSE", model.evaluate(valid, [metric], transformers))
print("test RMSE", model.evaluate(test, [metric], transformers))
这里刻意用了 splitter="scaffold"。随机划分会把同一骨架的类似物同时放进训练和测试集,导致指标虚高——这是分子 ML 最常见的自欺方式,DeepChem 把骨架划分做成一行参数正是为了让你别偷懒。
什么时候用它,什么时候别用
- 适合:第一次跑通分子 ML 全流程;快速比较「不同特征 × 不同模型 × 不同划分」的组合;教学与内部培训;需要 MoleculeNet 标准数据集做对照实验(见 178《DeepPurpose》)。
- 不适合:追最新 SOTA 架构——DeepChem 的模型实现更新往往滞后;单任务性质预测上,Chemprop(见 174《Chemprop》)通常是更强也更省心的基线;要深度定制图网络结构时,直接写 PyG(见 176《PyTorch Geometric》)更自由。
- 现实做法:用 DeepChem 建立第一版可运行基线和评测脚手架,一旦确定要深挖某个任务,再迁到专用工具上。
常见坑
- 忘了传 transformers:
load_*默认对 y 做了归一化,评测时不传回transformers,得到的 RMSE 是归一化尺度上的数字,看着好得离谱。 - API 跨版本漂移:DeepChem 历史上多次重构,网上教程常跑不通。锁死版本号,并以官方 Examples 仓库(见 180《DeepChem Examples》)为准。
- DiskDataset 留下大量缓存:反复实验会在临时目录堆积特征化结果,长期跑批要主动清理。
- 把 MoleculeNet 成绩当项目预期:公开集上的 RMSE 和你自家数据上的表现没有可比性,数据分布完全不同。
上手提示
- DeepChem 的核心资产是「四件套」抽象和标准数据集,不是模型本身;
- 默认就用
ScaffoldSplitter,随机划分只用于 sanity check; - 评测记得传
transformers,否则指标不在原始尺度上; - 把它当起步脚手架,深入某个任务后换更专精的工具。
延伸资源
- 教程与示例:004《DeepChem 教程体系入门》、180《DeepChem Examples》;数据集背景:178《DeepPurpose》;
- 更强的单任务基线:174《Chemprop》;底层框架:176《PyTorch Geometric》、177《DGL-LifeSci》;
- 划分与评测陷阱:169《Benchmark 陷阱》。