| name | deepchem |
| description | Molecular ML with diverse featurizers and pre-built datasets. Use for property prediction (ADMET, toxicity) with traditional ML or GNNs when you want extensive featurization options and MoleculeNet benchmarks. Best for quick experiments with pre-trained models, diverse molecular representations. For graph-first PyTorch workflows use torchdrug; for benchmark datasets use pytdc. |
| license | MIT license |
| tags | ["molecular-ml","drug-discovery","cheminformatics-ml","toxicity-prediction","deepchem"] |
| metadata | {"skill-author":"K-Dense Inc."} |
-------|------|-------------------|------------|
| < 1K samples | Any | SklearnModel (RandomForest) | CircularFingerprint |
| 1K-100K | Classification/Regression | GBDTModel or MultitaskRegressor | CircularFingerprint |
| > 100K | Molecular properties | GCNModel, AttentiveFPModel, DMPNNModel | MolGraphConvFeaturizer |
| Any (small preferred) | Transfer learning | ChemBERTa, GROVER, MolFormer | Model-specific |
| Crystal structures | Materials properties | CGCNNModel, MEGNetModel | Structure-based |
| Protein sequences | Protein properties | ProtBERT | Sequence-based |
Example: Traditional ML
from sklearn.ensemble import RandomForestRegressor
sklearn_model = RandomForestRegressor(n_estimators=100)
model = dc.models.SklearnModel(model=sklearn_model)
model.fit(train)
Example: Deep Learning
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)
Example: Graph Neural Networks
model = dc.models.GCNModel(
n_tasks=1,
mode='regression',
batch_size=128,
learning_rate=0.001
)
model.fit(train, nb_epoch=50)
model = dc.models.GATModel(n_tasks=1, mode='classification')
model.fit(train, nb_epoch=50)
model = dc.models.AttentiveFPModel(n_tasks=1, mode='regression')
model.fit(train, nb_epoch=50)
5. MoleculeNet Benchmarks
Quick access to 30+ curated benchmark datasets with standardized train/valid/test splits:
tasks, datasets, transformers = dc.molnet.load_tox21(
featurizer='GraphConv',
splitter='scaffold',
reload=False
)
train, valid, test = datasets
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])
Common Datasets:
- Classification:
load_tox21(), load_bbbp(), load_hiv(), load_clintox()
- Regression:
load_delaney(), load_freesolv(), load_lipo()
- Quantum properties:
load_qm7(), load_qm8(), load_qm9()
- Materials:
load_perovskite(), load_bandgap(), load_mp_formation_energy()
See references/api_reference.md for complete dataset list.
6. Transfer Learning
Leverage pretrained models for improved performance, especially on small 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)
model = dc.models.GroverModel(
task='regression',
n_tasks=1
)
model.fit(train, nb_epoch=20)
When to use transfer learning:
- Small datasets (< 1000 samples)
- Novel molecular scaffolds
- Limited computational resources
- Need for rapid prototyping
Use the scripts/transfer_learning.py script for guided transfer learning workflows.
7. Model Evaluation
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')
]
train_scores = model.evaluate(train, classification_metrics)
test_scores = model.evaluate(test, classification_metrics)
8. Making Predictions
predictions = model.predict(test)
new_smiles = ['CCO', 'c1ccccc1', 'CC(C)O']
new_features = featurizer.featurize(new_smiles)
new_dataset = dc.data.NumpyDataset(X=new_features)
for transformer in transformers:
new_dataset = transformer.transform(new_dataset)
predictions = model.predict(new_dataset)
Typical Workflows
Workflow A: Quick Benchmark Evaluation
For evaluating a model on standard benchmarks:
import deepchem as dc
tasks, datasets, _ = dc.molnet.load_bbbp(
featurizer='GraphConv',
splitter='scaffold'
)
train, valid, test = datasets
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])
print(f"Test ROC-AUC: {test_score}")
Workflow B: Custom Data Prediction
For training on custom molecular datasets:
import deepchem as dc
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')
splitter = dc.splits.ScaffoldSplitter()
train, valid, test = splitter.train_valid_test_split(dataset)
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)
model = dc.models.MultitaskRegressor(
n_tasks=1,
n_features=2048,
layer_sizes=[1000, 500],
dropouts=0.25
)
model.fit(train, nb_epoch=50)
metric = dc.metrics.Metric(dc.metrics.r2_score)
test_score = model.evaluate(test, [metric])
Workflow C: Transfer Learning on Small Dataset
For leveraging pretrained models:
import deepchem as dc
loader = dc.data.CSVLoader(
tasks=['activity'],
feature_field='smiles',
featurizer=dc.feat.DummyFeaturizer()
)
dataset = loader.create_dataset('small_dataset.csv')
splitter = dc.splits.ScaffoldSplitter()
train, test = splitter.train_test_split(dataset)
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)
predictions = model.predict(test)
See references/workflows.md for 8 detailed workflow examples covering molecular generation, materials science, protein analysis, and more.
Example Scripts
This skill includes three production-ready scripts in the scripts/ directory:
1. predict_solubility.py
Train and evaluate solubility prediction models. Works with Delaney benchmark or custom CSV data.
python scripts/predict_solubility.py
python scripts/predict_solubility.py \
--data my_data.csv \
--smiles-col smiles \
--target-col solubility \
--predict "CCO" "c1ccccc1"
2. graph_neural_network.py
Train various graph neural network architectures on molecular data.
python scripts/graph_neural_network.py --model gcn --dataset tox21
python scripts/graph_neural_network.py \
--model attentivefp \
--data molecules.csv \
--task-type regression \
--targets activity \
--epochs 100
3. transfer_learning.py
Fine-tune pretrained models (ChemBERTa, GROVER) on molecular property prediction tasks.
python scripts/transfer_learning.py --model chemberta --dataset bbbp
python scripts/transfer_learning.py \
--model grover \
--data small_dataset.csv \
--target activity \
--task-type classification \
--epochs 20
Common Patterns and Best Practices
Pattern 1: Always Use Scaffold Splitting for Molecules
splitter = dc.splits.ScaffoldSplitter()
train, test = splitter.train_test_split(dataset)
splitter = dc.splits.RandomSplitter()
train, test = splitter.train_test_split(dataset)
Pattern 2: Normalize Features and Targets
transformers = [
dc.trans.NormalizationTransformer(
transform_y=True,
dataset=train
)
]
for transformer in transformers:
train = transformer.transform(train)
test = transformer.transform(test)
Pattern 3: Start Simple, Then Scale
- Start with Random Forest + CircularFingerprint (fast baseline)
- Try XGBoost/LightGBM if RF works well
- Move to deep learning (MultitaskRegressor) if you have >5K samples
- Try GNNs if you have >10K samples
- Use transfer learning for small datasets or novel scaffolds
Pattern 4: Handle Imbalanced Data
transformer = dc.trans.BalancingTransformer(dataset=train)
train = transformer.transform(train)
metric = dc.metrics.Metric(dc.metrics.balanced_accuracy_score)
Pattern 5: Avoid Memory Issues
dataset = dc.data.DiskDataset.from_numpy(X, y, w, ids)
model = dc.models.GCNModel(batch_size=32)
Common Pitfalls
Issue 1: Data Leakage in Drug Discovery
Problem: Using random splitting allows similar molecules in train/test sets.
Solution: Always use ScaffoldSplitter for molecular datasets.
Issue 2: GNN Underperforming vs Fingerprints
Problem: Graph neural networks perform worse than simple fingerprints.
Solutions:
- Ensure dataset is large enough (>10K samples typically)
- Increase training epochs (50-100)
- Try different architectures (AttentiveFP, DMPNN instead of GCN)
- Use pretrained models (GROVER)
Issue 3: Overfitting on Small Datasets
Problem: Model memorizes training data.
Solutions:
- Use stronger regularization (increase dropout to 0.5)
- Use simpler models (Random Forest instead of deep learning)
- Apply transfer learning (ChemBERTa, GROVER)
- Collect more data
Issue 4: Import Errors
Problem: Module not found errors.
Solution: Ensure DeepChem is installed with required dependencies:
uv pip install deepchem
uv pip install deepchem[torch]
uv pip install deepchem[all]
Reference Documentation
This skill includes comprehensive reference documentation:
references/api_reference.md
Complete API documentation including:
- All data loaders and their use cases
- Dataset classes and when to use each
- Complete featurizer catalog with selection guide
- Model catalog organized by category (50+ models)
- MoleculeNet dataset descriptions
- Metrics and evaluation functions
- Common code patterns
When to reference: Search this file when you need specific API details, parameter names, or want to explore available options.
references/workflows.md
Eight detailed end-to-end workflows:
- Molecular property prediction from SMILES
- Using MoleculeNet benchmarks
- Hyperparameter optimization
- Transfer learning with pretrained models
- Molecular generation with GANs
- Materials property prediction
- Protein sequence analysis
- Custom model integration
When to reference: Use these workflows as templates for implementing complete solutions.
Installation Notes
Basic installation:
uv pip install deepchem
For PyTorch models (GCN, GAT, etc.):
uv pip install deepchem[torch]
For all features:
uv pip install deepchem[all]
If import errors occur, the user may need specific dependencies. Check the DeepChem documentation for detailed installation instructions.
Additional Resources