mcpField
D
deepchem

deepchem

github.com/leonchaox数据与数据库99471 次安装15 周前更新
代码仓库

关于 deepchem

deepchem 是面向化学、材料科学和生物学机器学习的 Python 技能,供研究人员处理数据、训练模型和预测分子及材料属性。它涵盖分子特征化、基准数据集、图神经网络和预训练模型微调。

主要功能

  1. 01加载分子、材料及生物序列数据
  2. 02生成指纹、描述符和图特征
  3. 03训练传统模型与图神经网络
  4. 04访问 MoleculeNet 基准数据集
  5. 05微调预训练模型

适用场景

  1. 01预测溶解度、毒性及结合亲和力
  2. 02在化学数据集上训练和评估模型
  3. 03预测晶体与材料属性
  4. 04分析蛋白质或 DNA 序列

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/leonchaox/qinyan-academic-skills --skill deepchem

安装后在 Claude Code 中输入/deepchem确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api_reference.md
workflows.md
scripts/
graph_neural_network.py
predict_solubility.py
transfer_learning.py

详细介绍

DeepChem

概述

DeepChem 是一个全面的 Python 库,用于将机器学习应用于化学、材料科学和生物学。借助专用神经网络、分子特征化方法和预训练模型,实现分子性质预测、药物发现、材料设计和生物分子分析。

何时使用此技能

在以下情况下应使用此技能:

  • 加载和处理分子数据(SMILES 字符串、SDF 文件、蛋白质序列)
  • 预测分子性质(溶解度、毒性、结合亲和力、ADMET 性质)
  • 在化学或生物数据集上训练模型
  • 使用 MoleculeNet 基准数据集(Tox21、BBBP、Delaney 等)
  • 将分子转换为适用于 ML 的特征(指纹、图表示、描述符)
  • 为分子实现图神经网络(GCN、GAT、MPNN、AttentiveFP)
  • 使用预训练模型进行迁移学习(ChemBERTa、GROVER、MolFormer)
  • 预测晶体/材料性质(带隙、形成能)
  • 分析蛋白质或 DNA 序列

核心功能

1. 分子数据加载和处理

DeepChem 为各种化学数据格式提供专用加载器:

import deepchem as dc

# Load CSV with SMILES
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')

# Load SDF files
loader = dc.data.SDFLoader(tasks=['activity'], featurizer=featurizer)
dataset = loader.create_dataset('compounds.sdf')

# Load protein sequences
loader = dc.data.FASTALoader()
dataset = loader.create_dataset('proteins.fasta')

主要加载器:

  • CSVLoader:包含分子标识符的表格数据
  • SDFLoader:分子结构文件
  • FASTALoader:蛋白质/DNA 序列
  • ImageLoader:分子图像
  • JsonLoader:JSON 格式的数据集
2. 分子特征化

将分子转换为数值表示,以供 ML 模型使用。

特征化器选择决策树
Is the model a graph neural network?
├─ YES → Use graph featurizers
│   ├─ Standard GNN → MolGraphConvFeaturizer
│   ├─ Message passing → DMPNNFeaturizer
│   └─ Pretrained → GroverFeaturizer
│
└─ NO → What type of model?
    ├─ Traditional ML (RF, XGBoost, SVM)
    │   ├─ Fast baseline → CircularFingerprint (ECFP)
    │   ├─ Interpretable → RDKitDescriptors
    │   └─ Maximum coverage → MordredDescriptors
    │
    ├─ Deep learning (non-graph)
    │   ├─ Dense networks → CircularFingerprint
    │   └─ CNN → SmilesToImage
    │
    ├─ Sequence models (LSTM, Transformer)
    │   └─ SmilesToSeq
    │
    └─ 3D structure analysis
        └─ CoulombMatrix
特征化示例
# Fingerprints (for traditional ML)
fp = dc.feat.CircularFingerprint(radius=2, size=2048)

# Descriptors (for interpretable models)
desc = dc.feat.RDKitDescriptors()

# Graph features (for GNNs)
graph_feat = dc.feat.MolGraphConvFeaturizer()

# Apply featurization
features = fp.featurize(['CCO', 'c1ccccc1'])

选择指南:

  • 小型数据集(<1K):CircularFingerprint 或 RDKitDescriptors
  • 中型数据集(1K-100K):CircularFingerprint 或图特征化器
  • 大型数据集(>100K):图特征化器(MolGraphConvFeaturizer、DMPNNFeaturizer)
  • 迁移学习:预训练模型特征化器(GroverFeaturizer)

完整的特征化器文档请参阅 references/api_reference.md。

3. 数据拆分

重要:对于药物发现任务,请使用 ScaffoldSplitter,以防止相似分子结构同时出现在训练集和测试集中而导致数据泄漏。

# Scaffold splitting (recommended for molecules)
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
)

# Random splitting (for non-molecular data)
splitter = dc.splits.RandomSplitter()
train, test = splitter.train_test_split(dataset)

# Stratified splitting (for imbalanced classification)
splitter = dc.splits.RandomStratifiedSplitter()
train, test = splitter.train_test_split(dataset)

可用的拆分器:

  • ScaffoldSplitter:按分子骨架拆分(防止数据泄漏)
  • ButinaSplitter:基于聚类的分子拆分
  • MaxMinSplitter:最大化各数据集之间的多样性
  • RandomSplitter:随机拆分
  • RandomStratifiedSplitter:保留类别分布
4. 模型选择和训练
快速模型选择指南
数据集大小任务推荐模型特征化器
< 1K 个样本任意SklearnModel(RandomForest)CircularFingerprint
1K-100K分类/回归GBDTModel 或 MultitaskRegressorCircularFingerprint
> 100K分子性质GCNModel、AttentiveFPModel、DMPNNModelMolGraphConvFeaturizer
任意(较小为佳)迁移学习ChemBERTa、GROVER、MolFormer模型专用
晶体结构材料性质CGCNNModel、MEGNetModel基于结构
蛋白质序列蛋白质性质ProtBERT基于序列
示例:传统 ML
from sklearn.ensemble import RandomForestRegressor

# Wrap scikit-learn model
sklearn_model = RandomForestRegressor(n_estimators=100)
model = dc.models.SklearnModel(model=sklearn_model)
model.fit(train)
示例:深度学习
# Multitask regressor (for fingerprints)
model = dc.models.MultitaskRegressor(
    n_tasks=2,
    n_features=2048,
    layer_sizes=[1000, 500],
    dropouts=0.25,
    learning_rate=0.001
)
model.fit(train, nb_epoch=50)
示例:图神经网络
# Graph Convolutional Network
model = dc.models.GCNModel(
    n_tasks=1,
    mode='regression',
    batch_size=128,
    learning_rate=0.001
)
model.fit(train, nb_epoch=50)

# Graph Attention Network
model = dc.models.GATModel(n_tasks=1, mode='classification')
model.fit(train, nb_epoch=50)

# Attentive Fingerprint
model = dc.models.AttentiveFPModel(n_tasks=1, mode='regression')
model.fit(train, nb_epoch=50)
5. MoleculeNet 基准测试

快速使用 30 多个经过整理的基准数据集,这些数据集提供标准化的训练/验证/测试集划分:

# Load benchmark dataset
tasks, datasets, transformers = dc.molnet.load_tox21(
    featurizer='GraphConv',  # or 'ECFP', 'Weave', 'Raw'
    splitter='scaffold',     # or 'random', 'stratified'
    reload=False
)
train, valid, test = datasets

# Train and evaluate
model = dc.models.GCNModel(n_tasks=len(tasks), mode='classification')
model.fit(train, nb_epoch=50)

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

常见数据集:

  • 分类: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()

完整的数据集列表请参阅 references/api_reference.md。

6. 迁移学习

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

# ChemBERTa (BERT pretrained on 77M molecules)
model = dc.models.HuggingFaceModel(
    model='seyonec/ChemBERTa-zinc-base-v1',
    task='classification',
    n_tasks=1,
    learning_rate=2e-5  # Lower LR for fine-tuning
)
model.fit(train, nb_epoch=10)

# GROVER (graph transformer pretrained on 10M molecules)
model = dc.models.GroverModel(
    task='regression',
    n_tasks=1
)
model.fit(train, nb_epoch=20)

适用迁移学习的场景:

  • 小型数据集(< 1000 个样本)
  • 新颖的分子骨架
  • 计算资源有限
  • 需要快速原型开发

使用 scripts/transfer_learning.py 脚本开展有指导的迁移学习工作流。

7. 模型评估
# Define metrics
classification_metrics = [
    dc.metrics.Metric(dc.metrics.roc_auc_score, name='ROC-AUC'),
    dc.metrics.Metric(dc.metrics.accuracy_score, name='Accuracy'),
    dc.metrics.Metric(dc.metrics.f1_score, name='F1')
]

regression_metrics = [
    dc.metrics.Metric(dc.metrics.r2_score, name='R²'),
    dc.metrics.Metric(dc.metrics.mean_absolute_error, name='MAE'),
    dc.metrics.Metric(dc.metrics.root_mean_squared_error, name='RMSE')
]

# Evaluate
train_scores = model.evaluate(train, classification_metrics)
test_scores = model.evaluate(test, classification_metrics)
8. 进行预测
# Predict on test set
predictions = model.predict(test)

# Predict on new molecules
new_smiles = ['CCO', 'c1ccccc1', 'CC(C)O']
new_features = featurizer.featurize(new_smiles)
new_dataset = dc.data.NumpyDataset(X=new_features)

# Apply same transformations as training
for transformer in transformers:
    new_dataset = transformer.transform(new_dataset)

predictions = model.predict(new_dataset)

典型工作流

工作流 A:快速基准评估

用于在标准基准上评估模型:

import deepchem as dc

# 1. Load benchmark
tasks, datasets, _ = dc.molnet.load_bbbp(
    featurizer='GraphConv',
    splitter='scaffold'
)
train, valid, test = datasets

# 2. Train model
model = dc.models.GCNModel(n_tasks=len(tasks), mode='classification')
model.fit(train, nb_epoch=50)

# 3. Evaluate
metric = dc.metrics.Metric(dc.metrics.roc_auc_score)
test_score = model.evaluate(test, [metric])
print(f"Test ROC-AUC: {test_score}")
工作流 B:自定义数据预测

用于在自定义分子数据集上训练:

import deepchem as dc

# 1. Load and featurize data
featurizer = dc.feat.CircularFingerprint(radius=2, size=2048)
loader = dc.data.CSVLoader(
    tasks=['activity'],
    feature_field='smiles',
    featurizer=featurizer
)
dataset = loader.create_dataset('my_molecules.csv')

# 2. Split data (use ScaffoldSplitter for molecules!)
splitter = dc.splits.ScaffoldSplitter()
train, valid, test = splitter.train_valid_test_split(dataset)

# 3. Normalize (optional but recommended)
transformers = [dc.trans.NormalizationTransformer(
    transform_y=True, dataset=train
)]
for transformer in transformers:
    train = transformer.transform(train)
    valid = transformer.transform(valid)
    test = transformer.transform(test)

# 4. Train model
model = dc.models.MultitaskRegressor(
    n_tasks=1,
    n_features=2048,
    layer_sizes=[1000, 500],
    dropouts=0.25
)
model.fit(train, nb_epoch=50)

# 5. Evaluate
metric = dc.metrics.Metric(dc.metrics.r2_score)
test_score = model.evaluate(test, [metric])
工作流 C:小型数据集上的迁移学习

用于利用预训练模型:

import deepchem as dc

# 1. Load data (pretrained models often need raw SMILES)
loader = dc.data.CSVLoader(
    tasks=['activity'],
    feature_field='smiles',
    featurizer=dc.feat.DummyFeaturizer()  # Model handles featurization
)
dataset = loader.create_dataset('small_dataset.csv')

# 2. Split data
splitter = dc.splits.ScaffoldSplitter()
train, test = splitter.train_test_split(dataset)

# 3. Load pretrained model
model = dc.models.HuggingFaceModel(
    model='seyonec/ChemBERTa-zinc-base-v1',
    task='classification',
    n_tasks=1,
    learning_rate=2e-5
)

# 4. Fine-tune
model.fit(train, nb_epoch=10)

# 5. Evaluate
predictions = model.predict(test)

请参阅 references/workflows.md,其中包含 8 个详细的工作流示例,涵盖分子生成、材料科学、蛋白质分析等内容。

示例脚本

此技能在 scripts/ 目录中包含三个可用于生产环境的脚本:

1. predict_solubility.py

训练和评估溶解度预测模型。适用于 Delaney 基准数据或自定义 CSV 数据。

# Use Delaney benchmark
python scripts/predict_solubility.py

# Use custom data
python scripts/predict_solubility.py \
    --data my_data.csv \
    --smiles-col smiles \
    --target-col solubility \
    --predict "CCO" "c1ccccc1"
2. graph_neural_network.py

在分子数据上训练各种图神经网络架构。

# Train GCN on Tox21
python scripts/graph_neural_network.py --model gcn --dataset tox21

# Train AttentiveFP on custom data
python scripts/graph_neural_network.py \
    --model attentivefp \
    --data molecules.csv \
    --task-type regression \
    --targets activity \
    --epochs 100
3. transfer_learning.py

在分子属性预测任务上微调预训练模型(ChemBERTa、GROVER)。

# Fine-tune ChemBERTa on BBBP
python scripts/transfer_learning.py --model chemberta --dataset bbbp

# Fine-tune GROVER on custom data
python scripts/transfer_learning.py \
    --model grover \
    --data small_dataset.csv \
    --target activity \
    --task-type classification \
    --epochs 20

常见模式和最佳实践

模式 1:分子任务始终使用骨架划分
# GOOD: Prevents data leakage
splitter = dc.splits.ScaffoldSplitter()
train, test = splitter.train_test_split(dataset)

# BAD: Similar molecules in train and test
splitter = dc.splits.RandomSplitter()
train, test = splitter.train_test_split(dataset)
模式 2:归一化特征和目标
transformers = [
    dc.trans.NormalizationTransformer(
        transform_y=True,  # Also normalize target values
        dataset=train
    )
]
for transformer in transformers:
    train = transformer.transform(train)
    test = transformer.transform(test)
模式 3:从简单方案开始,再逐步扩展
  1. 从 Random Forest + CircularFingerprint 开始(快速基线)
  2. 如果 RF 效果良好,尝试 XGBoost/LightGBM
  3. 如果样本数 >5K,转向深度学习(MultitaskRegressor)
  4. 如果样本数 >10K,尝试 GNN
  5. 对于小型数据集或新颖的分子骨架,使用迁移学习
模式 4:处理类别不平衡的数据
# Option 1: Balancing transformer
transformer = dc.trans.BalancingTransformer(dataset=train)
train = transformer.transform(train)

# Option 2: Use balanced metrics
metric = dc.metrics.Metric(dc.metrics.balanced_accuracy_score)
模式 5:避免内存问题
# Use DiskDataset for large datasets
dataset = dc.data.DiskDataset.from_numpy(X, y, w, ids)

# Use smaller batch sizes
model = dc.models.GCNModel(batch_size=32)  # Instead of 128

常见问题

问题 1:药物发现中的数据泄漏

问题:使用随机划分会导致相似分子同时出现在训练集和测试集中。 解决方案:分子数据集始终使用 ScaffoldSplitter。

问题 2:GNN 表现不如指纹

问题:图神经网络的表现不如简单指纹。 解决方案:

  • 确保数据集足够大(通常 >10K 个样本)
  • 增加训练轮数(50-100)
  • 尝试不同的架构(使用 AttentiveFP、DMPNN,而非 GCN)
  • 使用预训练模型(GROVER)
问题 3:小型数据集上过拟合

问题:模型记住了训练数据。 解决方案:

  • 使用更强的正则化(将 dropout 增加到 0.5)
  • 使用更简单的模型(使用 Random Forest,而非深度学习)
  • 应用迁移学习(ChemBERTa、GROVER)
  • 收集更多数据
问题 4:导入错误

问题:出现找不到模块的错误。 解决方案:确保 DeepChem 已安装所需依赖项:

uv pip install deepchem
# For PyTorch models
uv pip install deepchem[torch]
# For all features
uv pip install deepchem[all]

参考文档

此技能包含全面的参考文档:

references/api_reference.md

完整的 API 文档,包括:

  • 所有数据加载器及其适用场景
  • 数据集类以及各自的适用场景
  • 完整的特征化器目录及选择指南
  • 按类别整理的模型目录(50 多种模型)
  • MoleculeNet 数据集说明
  • 指标和评估函数
  • 常见代码模式

何时查阅:需要了解具体 API 详情、参数名称或探索可用选项时,请搜索此文件。

references/workflows.md

八个详细的端到端工作流:

  1. 根据 SMILES 预测分子属性
  2. 使用 MoleculeNet 基准
  3. 超参数优化
  4. 使用预训练模型进行迁移学习
  5. 使用 GAN 进行分子生成
  6. 材料属性预测
  7. 蛋白质序列分析
  8. 自定义模型集成

何时查阅:将这些工作流用作实现完整解决方案的模板。

安装说明

基本安装:

uv pip install deepchem

用于 PyTorch 模型(GCN、GAT 等):

uv pip install deepchem[torch]

安装全部功能:

uv pip install deepchem[all]

如果出现导入错误,用户可能需要安装特定依赖项。请查看 DeepChem 文档,了解详细的安装说明。

其他资源

评论

支持 Markdown