SuperAPI AI 工具集

deepchem

数据与分析

查看项目

更新于 10-15 09:36

技能介绍

用途

DeepChem 是一个面向化学、材料科学与生物学的综合 Python 机器学习库,用于分子性质预测、药物发现、材料设计和生物分子分析。该技能适用于:加载与处理分子数据(SMILES 字符串、SDF 文件、蛋白质序列)、预测分子性质(溶解度、毒性、结合亲和力、ADMET 性质)、在化学/生物数据集上训练模型、使用 MoleculeNet 基准数据集(Tox21、BBBP、Delaney 等)、将分子转换为机器学习特征(指纹、图表示、描述符)、实现分子图神经网络(GCN、GAT、MPNN、AttentiveFP)、使用预训练模型进行迁移学习(ChemBERTa、GROVER、MolFormer)、预测晶体/材料性质(带隙、形成能)以及分析蛋白质或 DNA 序列。

主要能力

分子数据加载与处理

提供多种专用加载器:CSVLoader(带分子标识的表格数据)、SDFLoader(分子结构文件)、FASTALoader(蛋白质/DNA 序列)、ImageLoader(分子图像)、JsonLoader(JSON 格式数据集)。示例:

import deepchem as dc
featurizer = dc.feat.CircularFingerprint(radius=2, size=2048)
loader = dc.data.CSVLoader(
    tasks=['solubility', 'toxicity'],
    feature_field='smiles',
    featurizer=featurizer
)
dataset = loader.create_dataset('molecules.csv')

分子特征化

将分子转换为数值表示。选择指南:传统机器学习使用 CircularFingerprint(ECFP)、RDKitDescriptors(可解释)或 MordredDescriptors(最大覆盖);图神经网络使用 MolGraphConvFeaturizer、DMPNNFeaturizer,预训练模型使用 GroverFeaturizer;序列模型使用 SmilesToSeq;3D 结构分析使用 CoulombMatrix。数据集规模建议:小于 1K 用 CircularFingerprint 或 RDKitDescriptors;1K-100K 用 CircularFingerprint 或图特征化器;大于 100K 用图特征化器;迁移学习用预训练模型特征化器。

fp = dc.feat.CircularFingerprint(radius=2, size=2048)
features = fp.featurize(['CCO', 'c1ccccc1'])

数据划分

药物发现任务的关键是使用 ScaffoldSplitter 防止相似分子结构同时出现在训练集和测试集造成数据泄漏。可用划分器包括:ScaffoldSplitter、ButinaSplitter、MaxMinSplitter、RandomSplitter、RandomStratifiedSplitter。

splitter = dc.splits.ScaffoldSplitter()
train, valid, test = splitter.train_valid_test_split(dataset, frac_train=0.8, frac_valid=0.1, frac_test=0.1)

模型选择与训练

模型选择指南:小于 1K 样本用 SklearnModel(RandomForest)+ CircularFingerprint;1K-100K(分类/回归)用 GBDTModel 或 MultitaskRegressor + CircularFingerprint;大于 100K(分子性质)用 GCNModel、AttentiveFPModel、DMPNNModel + MolGraphConvFeaturizer;迁移学习用 ChemBERTa、GROVER、MolFormer;晶体结构(材料性质)用 CGCNNModel、MEGNetModel;蛋白质序列(蛋白质性质)用 ProtBERT。示例:

model = dc.models.GCNModel(n_tasks=1, mode='regression', batch_size=128, learning_rate=0.001)
model.fit(train, nb_epoch=50)

MoleculeNet 基准

提供 30 余个标准化训练/验证/测试划分的基准数据集:分类(load_tox21、load_bbbp、load_hiv、load_clintox)、回归(load_delaney、load_freesolv、load_lipo)、量子性质(load_qm7、load_qm8、load_qm9)、材料(load_perovskite、load_bandgap、load_mp_formation_energy)。

tasks, datasets, transformers = dc.molnet.load_tox21(featurizer='GraphConv', splitter='scaffold', reload=False)
train, valid, test = datasets

迁移学习

利用预训练模型提升性能,尤其适合小数据集。示例:

model = dc.models.HuggingFaceModel(
    model='seyonec/ChemBERTa-zinc-base-v1',
    task='classification', n_tasks=1, learning_rate=2e-5
)
model.fit(train, nb_epoch=10)

适用场景:小数据集(<1000 样本)、新颖分子骨架、有限计算资源、快速原型开发。

模型评估与预测

支持分类指标(ROC-AUC、Accuracy、F1)与回归指标(R²、MAE、RMSE):

metric = dc.metrics.Metric(dc.metrics.roc_auc_score)
test_score = model.evaluate(test, [metric])
predictions = model.predict(test)

使用方式

安装命令:

uv pip install deepchem
# PyTorch 模型(GCN、GAT 等)
uv pip install deepchem[torch]
# 所有功能
uv pip install deepchem[all]

技能包含三个生产就绪脚本:

  • predict_solubility.py:训练和评估溶解度预测模型,支持 Delaney 基准或自定义 CSV 数据,示例:python scripts/predict_solubility.py --data my_data.csv --smiles-col smiles --target-col solubility --predict "CCO" "c1ccccc1"
  • graph_neural_network.py:训练多种图神经网络架构,示例:python scripts/graph_neural_network.py --model gcn --dataset tox21
  • transfer_learning.py:微调预训练模型(ChemBERTa、GROVER),示例:python scripts/transfer_learning.py --model chemberta --dataset bbbp

参考文档:references/api_reference.md(完整 API 文档、数据加载器、数据集类、特征化器目录、50+ 模型目录、MoleculeNet 数据集描述、指标与评估函数)、references/workflows.md(八个端到端工作流,涵盖分子性质预测、基准使用、超参数优化、迁移学习、GAN 分子生成、材料性质预测、蛋白质序列分析、自定义模型集成)。

最佳实践

  1. 分子数据始终使用 ScaffoldSplitter 防止数据泄漏。
  2. 归一化特征与目标值:
transformers = [dc.trans.NormalizationTransformer(transform_y=True, dataset=train)]
  1. 从简到繁:先随机森林 + CircularFingerprint 快速基线,再 XGBoost/LightGBM,样本 >5K 用深度学习,样本 >10K 用 GNN,小数据集或新骨架用迁移学习。
  2. 处理不平衡数据:使用 BalancingTransformer 或 balanced_accuracy_score。
  3. 避免内存问题:大数据集用 DiskDataset,减小 batch size。

常见陷阱

  • 数据泄漏:使用随机划分导致训练/测试集相似分子,应使用 ScaffoldSplitter。
  • GNN 表现不及指纹:确保数据集足够大(通常 >10K)、增加训练轮数(50-100)、尝试不同架构(AttentiveFP、DMPNN)、使用预训练模型(GROVER)。
  • 小数据集过拟合:增强正则化(dropout 调至 0.5)、使用更简单模型、迁移学习或收集更多数据。
  • 导入错误:确保安装所需依赖,PyTorch 模型需安装 deepchem[torch]。