mcpField
D
deepchem

deepchem

github.com/jackspace数据与数据库1638 次安装12 周前更新
代码仓库

关于 deepchem

deepchem 是面向化学、材料科学和生物学的 Python 机器学习库技能,适用于分子与生物数据建模。它提供数据处理、分子特征化、基准数据集及预训练模型工作流。

主要功能

  1. 01加载分子、蛋白质和材料数据
  2. 02生成指纹、描述符及图特征
  3. 03训练分子图神经网络
  4. 04使用 MoleculeNet 基准数据集
  5. 05微调预训练模型

适用场景

  1. 01预测溶解度、毒性或结合亲和力
  2. 02训练分子性质预测模型
  3. 03评估 MoleculeNet 基准任务
  4. 04分析蛋白质或 DNA 序列

安装

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

$npx skills add https://github.com/jackspace/claudeskillz --skill deepchem

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

附带文件SKILL.json

详细介绍

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 已安装所需依赖项:

pip install deepchem
# For PyTorch models
pip install deepchem[torch]
# For all features
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. 自定义模型集成

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

安装说明

基本安装:

pip install deepchem

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

pip install deepchem[torch]

安装全部功能:

pip install deepchem[all]

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

其他资源

评论

支持 Markdown