deepchem について
DeepChemは、創薬、材料科学、量子化学向けのオープンソースPython分子機械学習フレームワークです。データセット、特徴量化、各種モデルを統一APIで扱え、予測モデルを構築・評価する研究者に適しています。
主な機能
- 01CSVとMoleculeNetデータセットの読み込み
- 02分子特徴量化手法の利用
- 03古典的MLとニューラルモデルの学習
- 04分子グラフ・SMILESモデルの利用
- 05事前学習済み化学言語モデルの微調整
活用シーン
- 01分子の溶解度や毒性の予測
- 02MoleculeNetデータセットでのモデル比較
- 03候補分子のスクリーニングと順位付け
- 04材料特性や結合親和性の予測
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jaechang-hits/ sciagent-skills --skill deepchemインストール後、Claude Code で/deepchemを入力して読み込まれたか確認します。
同梱ファイルreferences/workflows_model_catalog.md
詳細
DeepChem — 創薬のためのディープラーニング
概要
DeepChemは、創薬、材料科学、量子化学における分子機械学習のための統一APIを提供するオープンソースのPythonフレームワークです。60種類以上のモデルアーキテクチャ(グラフニューラルネットワーク、トランスフォーマー、従来型機械学習)を、50種類以上の分子フィーチャライザーおよび標準化されたデータセット(MoleculeNet)とともに利用できます。これにより、SMILES文字列から学習済み予測モデルまでのエンドツーエンドのワークフローを実現できます。
使用する場面
- SMILESから分子特性(溶解性、毒性、結合親和性)を予測する
- MoleculeNetの標準化されたデータセット(BBBP、Tox21、ESOL、FreeSolvなど)でモデルをベンチマークする
- 分子グラフでグラフニューラルネットワーク(GCN、GAT、AttentiveFP、MPNN、DMPNN)を学習する
- 学習済み化学言語モデル(ChemBERTa、GROVER、MolFormer)をファインチューニングする
- 分子機械学習モデルのハイパーパラメーター最適化を実行する
- 学習済みモデルでバーチャルスクリーニングとヒット候補の優先順位付けを行う
- 結晶構造から材料特性を予測する(CGCNN、MEGNet)
- タンパク質とリガンドの相互作用をモデル化し、結合親和性を予測する
- ディープラーニングを使わないフィンガープリントベースのケモインフォマティクスには、代わりに
rdkit-cheminformaticsを使用してください - フィーチャライゼーションのみを行う場合(モデルの学習は行わない場合)は、代わりに
molfeat-molecular-featurizationを使用してください
前提条件
- Pythonパッケージ:
deepchem(コア)、torchまたはtensorflow(バックエンドに依存するモデル) - GPU:グラフニューラルネットワークとトランスフォーマーモデルでは推奨されます。従来型機械学習とフィンガープリントモデルではCPUで十分です
- データ:特性ラベル付きのSMILES文字列(CSV)、またはMoleculeNetデータセット(自動ダウンロード)
# Core installation (includes RDKit, scikit-learn, XGBoost)
pip install deepchem
# With PyTorch backend (GNN models)
pip install deepchem[torch]
# With TensorFlow backend (legacy models)
pip install deepchem[tensorflow]
# Full installation (all backends + extras)
pip install deepchem[all]
クイックスタート
import deepchem as dc
# Load MoleculeNet dataset with featurization + scaffold split
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer="ECFP")
train, valid, test = datasets
# Train and evaluate a multitask regressor
model = dc.models.MultitaskRegressor(n_tasks=1, n_features=1024, dropouts=0.2)
model.fit(train, nb_epoch=50)
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
print(f"Test R2: {model.evaluate(test, [metric])}") # {'pearson_r2_score': ~0.7}
コアAPI
モジュール1:データの読み込みと処理
CSVファイルまたはMoleculeNetのベンチマークデータセットから分子データを読み込みます。
import deepchem as dc
# Load from CSV (SMILES + property columns)
loader = dc.data.CSVLoader(
tasks=["measured_log_solubility"],
feature_field="smiles",
featurizer=dc.feat.CircularFingerprint(size=2048, radius=3)
)
dataset = loader.create_dataset("solubility_data.csv")
print(f"Samples: {dataset.X.shape[0]}, Features: {dataset.X.shape[1]}")
# Samples: 1128, Features: 2048
# Load from SDF (3D structures)
sdf_loader = dc.data.SDFLoader(
tasks=["activity"],
featurizer=dc.feat.CoulombMatrix(max_atoms=50)
)
dataset_3d = sdf_loader.create_dataset("molecules.sdf")
# Load MoleculeNet benchmark datasets (auto-download + featurize + split)
# Available: load_delaney, load_bbbp, load_tox21, load_hiv, load_qm7, load_qm9, etc.
tasks, datasets, transformers = dc.molnet.load_tox21(featurizer="ECFP", splitter="scaffold")
train, valid, test = datasets
print(f"Tasks: {len(tasks)}, Train: {len(train)}, Test: {len(test)}")
# Tasks: 12, Train: ~6264, Test: ~631
# Inverse-transform predictions back to original scale
y_pred = model.predict(test)
y_original = transformers[0].untransform(y_pred)
モジュール2:分子フィーチャライゼーション
機械学習で使用するために、分子を数値表現に変換します。DeepChemは、フィンガープリント、記述子、グラフ特徴量、クーロン行列にわたる50種類以上のフィーチャライザーを提供します。
import deepchem as dc
smiles = ["CCO", "CC(=O)O", "c1ccccc1", "CC(C)O"]
# Fingerprints (most common for classical ML)
ecfp = dc.feat.CircularFingerprint(size=2048, radius=3)
fp_features = ecfp.featurize(smiles)
print(f"ECFP shape: {fp_features.shape}") # (4, 2048)
# RDKit descriptors (interpretable physicochemical properties)
rdkit_desc = dc.feat.RDKitDescriptors()
desc_features = rdkit_desc.featurize(smiles)
print(f"Descriptor shape: {desc_features.shape}") # (4, 208)
# Graph features (for GNN models — returns ConvMol objects)
graph_feat = dc.feat.ConvMolFeaturizer()
graphs = graph_feat.featurize(smiles)
print(f"Atoms in first mol: {graphs[0].get_num_atoms()}") # 3
# Mol2Vec embeddings (pretrained word2vec on molecular substructures)
mol2vec = dc.feat.Mol2VecFingerprint()
embeddings = mol2vec.featurize(smiles)
print(f"Mol2Vec shape: {embeddings.shape}") # (4, 300)
モジュール3:モデルの学習と評価
DeepChemは汎用モデルとしてMultitaskRegressorとMultitaskClassifierを提供し、さらにグラフデータや系列データ向けの専用アーキテクチャも用意しています。
import deepchem as dc
# Load dataset
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer="ECFP")
train, valid, test = datasets
# Regression model (fingerprint input)
model = dc.models.MultitaskRegressor(
n_tasks=1,
n_features=1024,
layer_sizes=[1000, 500],
dropouts=0.25,
learning_rate=0.001,
batch_size=64,
)
model.fit(train, nb_epoch=100)
# Evaluate with multiple metrics
metrics = [
dc.metrics.Metric(dc.metrics.pearson_r2_score),
dc.metrics.Metric(dc.metrics.mean_absolute_error),
dc.metrics.Metric(dc.metrics.rms_score),
]
results = model.evaluate(test, metrics)
print(f"R2: {results['pearson_r2_score']:.3f}, MAE: {results['mean_absolute_error']:.3f}")
# Classification model (e.g., Tox21 toxicity prediction)
tasks, datasets, transformers = dc.molnet.load_tox21(featurizer="ECFP")
train, valid, test = datasets
clf = dc.models.MultitaskClassifier(
n_tasks=len(tasks),
n_features=1024,
layer_sizes=[1000, 500],
dropouts=0.5,
learning_rate=0.001,
)
clf.fit(train, nb_epoch=50)
roc_metric = dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean)
print(f"Mean ROC-AUC: {clf.evaluate(test, [roc_metric])}")
モジュール4:グラフニューラルネットワーク
GNNは分子グラフ(原子をノード、結合をエッジとする)を直接処理するため、固定フィンガープリントによる情報損失を回避できます。
import deepchem as dc
# Load with graph featurizer
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer="GraphConv")
train, valid, test = datasets
# Graph Convolutional Network (Duvenaud et al.)
gcn_model = dc.models.GraphConvModel(
n_tasks=1,
mode="regression",
graph_conv_layers=[64, 64],
dense_layer_size=256,
dropout=0.2,
learning_rate=0.001,
batch_size=64,
)
gcn_model.fit(train, nb_epoch=100)
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
print(f"GCN R2: {gcn_model.evaluate(test, [metric])}")
# AttentiveFP (Xiong et al.) — attention-based GNN, strong on molecular properties
tasks, datasets, transformers = dc.molnet.load_delaney(
featurizer=dc.feat.MolGraphConvFeaturizer(use_edges=True)
)
train, valid, test = datasets
attfp_model = dc.models.AttentiveFPModel(
n_tasks=1,
mode="regression",
num_layers=2,
graph_feat_size=200,
num_timesteps=2,
dropout=0.2,
learning_rate=0.001,
batch_size=64,
)
attfp_model.fit(train, nb_epoch=100)
print(f"AttentiveFP R2: {attfp_model.evaluate(test, [metric])}")
モジュール5:転移学習
データが限られている下流タスク向けに、学習済み化学言語モデルをファインチューニングします。
import deepchem as dc
from deepchem.models.torch_models import ChemBERTaModel
# ChemBERTa — SMILES-based transformer (pretrained on 77M molecules)
tasks, datasets, transformers = dc.molnet.load_bbbp(featurizer=dc.feat.SmilesTokenizer())
train, valid, test = datasets
chemberta = ChemBERTaModel(
task="classification",
n_tasks=1,
model_dir="chemberta_finetuned/",
)
# Fine-tune on downstream task (BBB permeability)
chemberta.fit(train, nb_epoch=10)
metric = dc.metrics.Metric(dc.metrics.roc_auc_score)
print(f"ChemBERTa ROC-AUC: {chemberta.evaluate(test, [metric])}")
モジュール6:新しい分子の予測
学習済みモデルを使って、新しい分子の推論を実行します。
import deepchem as dc
import numpy as np
# Assume trained model from Module 3
# Featurize new molecules using same featurizer
featurizer = dc.feat.CircularFingerprint(size=1024, radius=2)
new_smiles = ["c1cc(O)ccc1", "CC(=O)Nc1ccc(O)cc1", "OC(=O)c1ccccc1"]
new_features = featurizer.featurize(new_smiles)
new_dataset = dc.data.NumpyDataset(X=new_features)
predictions = model.predict(new_dataset)
for smi, pred in zip(new_smiles, predictions):
print(f"{smi}: {pred[0]:.2f}")
# Ensemble predictions from multiple models for robustness
models = [model1, model2, model3] # trained models
all_preds = np.array([m.predict(new_dataset) for m in models])
ensemble_mean = all_preds.mean(axis=0)
ensemble_std = all_preds.std(axis=0)
print(f"Ensemble prediction: {ensemble_mean[0][0]:.2f} +/- {ensemble_std[0][0]:.2f}")
主な概念
統一APIパターン
DeepChemのワークフローはすべて、一貫した次の5段階のパターンに従います。
Load Data → Featurize → Split → Train → Evaluate
- 読み込み:
CSVLoader、SDFLoader、またはdc.molnet.load_*()(MoleculeNetデータセットを自動で読み込みます) - フィーチャライゼーション:フィーチャライザーをローダーに渡すか、
featurizer.featurize(smiles)を直接呼び出します - 分割:
ScaffoldSplitter(創薬に推奨)、RandomSplitter、ButinaSplitter - 学習:
model.fit(train_dataset, nb_epoch=N) - 評価:
model.evaluate(test_dataset, metrics_list)
モデル選択ガイド
| データ型 | モデル | 主な特徴 | 使用する場面 |
|---|---|---|---|
| SMILES + フィンガープリント | MultitaskRegressor | 高速、ベースライン | 最初の試行、小規模なデータセット |
| SMILES + フィンガープリント | MultitaskClassifier | マルチラベル | マルチタスク分類(Tox21) |
| 分子グラフ | GraphConvModel | 学習済みフィンガープリント | 中規模のデータセット、一般的な特性 |
| 分子グラフ | GATModel | アテンション機構 | 原子の重要度が重要な場合 |
| 分子グラフ | AttentiveFPModel | グラフ + タイムステップアテンション | 最先端の分子特性 |
| 分子グラフ | MPNNModel | メッセージパッシング | 複雑な分子間相互作用 |
| 分子グラフ | DMPNNModel | 有向 MPNN | 結合レベルの予測 |
| SMILES 文字列 | ChemBERTaModel | 事前学習済みトランスフォーマー | 低データ環境、転移学習 |
| SMILES 文字列 | GROVERModel | グラフ + トランスフォーマー | 豊かな分子表現 |
| 結晶構造 | CGCNNModel | 結晶グラフ CNN | 材料特性の予測 |
| 結晶構造 | MEGNetModel | グラフネットワーク | 材料と分子 |
| タンパク質配列 | ProteinLigandComplexModel | 複合体モデリング | 結合親和性の予測 |
| 表形式の特徴量 | XGBoostModel, RandomForestModel | 古典的な ML | 解釈可能性、ベースライン |
特徴量化器の選択ガイド
| 特徴量化器 | クラス | 出力 | 最適な用途 |
|---|---|---|---|
| ECFP/Morgan | CircularFingerprint | バイナリベクトル(1024-2048) | 一般的な QSAR、高速なベースライン |
| MACCS Keys | MACCSKeysFingerprint | 167 ビットベクトル | 部分構造のフィルタリング |
| RDKit 2D | RDKitDescriptors | 200 以上の記述子 | 解釈可能なモデル |
| Mol2Vec | Mol2VecFingerprint | 300 次元の埋め込み | 類似性、クラスタリング |
| ConvMol | ConvMolFeaturizer | グラフ特徴量 | GraphConvModel の入力 |
| MolGraph | MolGraphConvFeaturizer | ノード + エッジ特徴量 | AttentiveFPModel、MPNNModel |
| Weave | WeaveFeaturizer | ペア特徴量 | WeaveModel の入力 |
| Coulomb Matrix | CoulombMatrix | 原子ペア間距離 | QM 特性の予測 |
| SMILES トークン | SmilesTokenizer | トークン ID | ChemBERTa、トランスフォーマーモデル |
データ分割戦略
| 分割器 | 使用例 | 理由 |
|---|---|---|
ScaffoldSplitter | 創薬(デフォルト) | 新しいケモタイプへの汎化性能を検証 |
RandomSplitter | 手早い実験 | ベースラインになりますが、性能を過大評価します |
ButinaSplitter | 多様性ベース | タニモト類似度でクラスタリング |
FingerprintSplitter | 化学的類似性 | 構造的に類似した分子をグループ化 |
MaxMinSplitter | 最大多様性テスト | 極端な汎化テスト |
一般的なワークフロー
ワークフロー 1:CSV データからの QSAR
目標:SMILES 列と活性列を含む CSV ファイルから、特性予測モデルを構築します。
import deepchem as dc
import pandas as pd
# Step 1: Load and featurize CSV data
loader = dc.data.CSVLoader(
tasks=["pIC50"],
feature_field="smiles",
featurizer=dc.feat.CircularFingerprint(size=2048, radius=3),
)
dataset = loader.create_dataset("bioactivity_data.csv")
# Step 2: Normalize targets
transformer = dc.trans.NormalizationTransformer(
transform_y=True, dataset=dataset
)
dataset = transformer.transform(dataset)
# Step 3: Scaffold split (realistic for drug discovery)
splitter = dc.splits.ScaffoldSplitter()
train, valid, test = splitter.train_valid_test_split(dataset)
print(f"Train: {len(train)}, Valid: {len(valid)}, Test: {len(test)}")
# Step 4: Train model
model = dc.models.MultitaskRegressor(
n_tasks=1, n_features=2048,
layer_sizes=[1000, 500], dropouts=0.25,
learning_rate=0.001, batch_size=64,
)
model.fit(train, nb_epoch=100)
# Step 5: Evaluate
metrics = [
dc.metrics.Metric(dc.metrics.pearson_r2_score),
dc.metrics.Metric(dc.metrics.mean_absolute_error),
]
results = model.evaluate(test, metrics)
print(f"R2: {results['pearson_r2_score']:.3f}, MAE: {results['mean_absolute_error']:.3f}")
ワークフロー 2:MoleculeNet ベンチマークの比較
目標:MoleculeNet ベンチマークデータセットで複数のモデルを比較します。
import deepchem as dc
# Load dataset with graph featurizer (supports both fingerprint and GNN models)
tasks, datasets, transformers = dc.molnet.load_bbbp(
featurizer="GraphConv", splitter="scaffold"
)
train, valid, test = datasets
metric = dc.metrics.Metric(dc.metrics.roc_auc_score)
# Model 1: Graph Convolutional Network
gcn = dc.models.GraphConvModel(n_tasks=1, mode="classification", dropout=0.2)
gcn.fit(train, nb_epoch=50)
gcn_score = gcn.evaluate(test, [metric])
# Model 2: Random Forest baseline (needs fingerprints)
tasks_fp, datasets_fp, _ = dc.molnet.load_bbbp(featurizer="ECFP", splitter="scaffold")
train_fp, _, test_fp = datasets_fp
rf = dc.models.SklearnModel(
model=dc.models.sklearn_models.RandomForestClassifier(n_estimators=500),
model_dir="rf_model/"
)
rf.fit(train_fp)
rf_score = rf.evaluate(test_fp, [metric])
print(f"GCN ROC-AUC: {gcn_score['roc_auc_score']:.3f}")
print(f"RF ROC-AUC: {rf_score['roc_auc_score']:.3f}")
ワークフロー 3:転移学習パイプライン
目標:小規模なデータセットで事前学習済みモデルをファインチューニングします。
- 事前学習済みの ChemBERTa モデルを読み込みます(コードはモジュール 5 を参照)
SmilesTokenizer特徴量化器を使って、下流タスク用のデータセットを準備します- 学習率を下げて(
1e-5~5e-5)、5~15 エポックのファインチューニングを行います - ホールドアウトしたスキャフォールド分割で評価します — 学習データが 1000 サンプル未満の場合、フィンガープリントのベースラインを上回る性能向上が期待できます
- ファインチューニング済みモデルを保存します:
model.save_checkpoint() - ハイパーパラメーター最適化のコード全体については、
references/workflows_model_catalog.mdのワークフロー 1 を参照してください
主要なパラメーター
| パラメーター | モジュール | デフォルト | 範囲/選択肢 | 効果 |
|---|---|---|---|---|
n_features | MultitaskRegressor/Classifier | 必須 | featurizer の出力に一致 | 入力特徴量の次元 |
layer_sizes | MultitaskRegressor/Classifier | [1000] | [256] から [1000, 500, 250] | 隠れ層の次元 |
dropouts | すべてのニューラルモデル | 0.0 | 0.0~0.5 | 正則化の強さ |
learning_rate | すべてのニューラルモデル | 0.001 | 1e-5~0.01 | 学習ステップのサイズ |
batch_size | すべてのニューラルモデル | 100 | 16~256 | 勾配更新ごとのサンプル数 |
nb_epoch | model.fit() | 10 | 10~300 | 学習の反復回数 |
size | CircularFingerprint | 2048 | 512~4096 | フィンガープリントのビット長 |
radius | CircularFingerprint | 2 | 2~4 | 部分構造の近傍半径 |
graph_conv_layers | GraphConvModel | [64, 64] | [32] から [128, 128, 64] | グラフ畳み込み層の幅 |
num_layers | AttentiveFPModel | 2 | 1~5 | GNN のメッセージパッシングの深さ |
graph_feat_size | AttentiveFPModel | 200 | 64~512 | グラフ特徴量の次元 |
splitter | dc.molnet.load_*() | "scaffold" | "scaffold"、"random"、"butina" | データ分割の方法 |
ベストプラクティス
-
創薬では必ずスキャフォールド分割を使用する:ランダム分割では構造情報が漏洩し、性能を過大評価します。スキャフォールド分割では、新しいケモタイプへの汎化性能を評価します。
-
回帰の目的変数を正規化する:学習前に
NormalizationTransformer(transform_y=True)を適用してください。解釈可能な値を得るには、予測値にuntransform()を適用することを忘れないでください。 -
まずフィンガープリントをベースラインとして使用する:最初に
MultitaskRegressorと ECFP を組み合わせて学習します。フィンガープリントのベースラインでは不十分な場合にのみ GNN に進みます。GNN にはより多くのデータと計算リソースが必要です。# Baseline first baseline = dc.models.MultitaskRegressor(n_tasks=1, n_features=2048) -
featurizer をモデルに合わせる:GNN モデルにはグラフ featurizer(
ConvMolFeaturizer、MolGraphConvFeaturizer)が必要です。フィンガープリントモデルにはCircularFingerprintが必要です。組み合わせを誤ると、エラーが通知されないまま発生します。 -
アンチパターン -- 創薬ベンチマークでランダム分割を使用しない:
RandomSplitterを使った結果は、分子特性予測の成果として公開できません。査読者はスキャフォールド分割または時間分割を求めます。 -
マルチタスクデータセットの欠損ラベルを処理する:Tox21 や多くの生物活性データセットには欠損値があります。DeepChem は学習時に NaN ラベルを自動的に処理します(損失をマスクします)が、
np.isnan(dataset.y).sum()で確認してください。 -
検証セットを使って早期停止する:特に GNN モデルでは、過学習を防ぐために検証損失を監視します。
よく使うレシピ
レシピ:ハイパーパラメーター探索
使用する場面:最終評価の前にモデルの性能を最適化します。
import deepchem as dc
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer="ECFP")
train, valid, test = datasets
# Define parameter grid
params = {
"n_features": [1024],
"layer_sizes": [[500], [1000, 500], [1000, 500, 250]],
"dropouts": [0.1, 0.25, 0.5],
"learning_rate": [0.001, 0.0005],
}
optimizer = dc.hyper.GridHyperparamOpt(lambda **p: dc.models.MultitaskRegressor(**p))
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
best_model, best_params, all_results = optimizer.hyperparam_search(
params, train, valid, metric, logdir="hyperparam_logs/"
)
print(f"Best params: {best_params}")
print(f"Best R2: {best_model.evaluate(test, [metric])}")
レシピ:モデルの保存と再読み込み
使用する場面:学習済みモデルをデプロイする場合や、学習を再開する場合に使用します。
# Save model checkpoint
model.save_checkpoint(model_dir="saved_model/")
# Reload model
loaded_model = dc.models.MultitaskRegressor(n_tasks=1, n_features=2048)
loaded_model.restore(model_dir="saved_model/")
predictions = loaded_model.predict(test)
レシピ:カスタム指標
使用する場面:ドメイン固有の指標でモデルを評価します。
import deepchem as dc
import numpy as np
def enrichment_factor(y_true, y_pred, top_fraction=0.01):
"""Enrichment factor at top X% of ranked predictions."""
n = len(y_true)
n_top = max(int(n * top_fraction), 1)
top_indices = np.argsort(y_pred.flatten())[-n_top:]
hits_in_top = y_true.flatten()[top_indices].sum()
expected = y_true.sum() * top_fraction
return hits_in_top / expected if expected > 0 else 0.0
ef_metric = dc.metrics.Metric(enrichment_factor, mode="regression")
print(f"EF@1%: {model.evaluate(test, [ef_metric])}")
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
ModuleNotFoundError: torch | PyTorch がインストールされていません | GNN モデルの場合は pip install deepchem[torch] |
ValueError: n_features mismatch | フィーチャライザーの出力サイズがモデルの n_features と一致していません | dataset.X.shape[1] を確認し、それに応じて n_features を設定してください |
| トレーニング中に損失が NaN になる | 学習率が高すぎるか、ターゲットが正規化されていません | NormalizationTransformer を適用し、学習率を 1e-4 に下げてください |
| スキャフォールド分割での性能が低い | モデルが特性ではなくスキャフォールドを記憶しています | データを増やす、GNN モデルを試す、または正則化(ドロップアウト 0.3-0.5)を追加してください |
RuntimeError: CUDA out of memory | バッチサイズが GPU に対して大きすぎます | batch_size を小さくする(32 または 16)、または小規模なデータセットでは CPU を使用してください |
一部の SMILES で FeaturizationError が発生する | SMILES 文字列が無効または複雑です | RDKit で事前にフィルタリングしてください:Chem.MolFromSmiles(smi) is not None |
| モデルが一定値を予測する | ターゲットが正規化されていないか、エポック数が少なすぎます | NormalizationTransformer を適用し、nb_epoch を増やしてください |
| フィーチャ化が遅い | 大規模なデータセットで、計算コストの高いフィーチャライザーを使用しています | CircularFingerprint(高速)を使用するか、n_jobs パラメーターで並列化してください |
同梱リソース
- references/workflows_model_catalog.md -- 拡張ワークフロー(完全なコードを含むハイパーパラメーター最適化、MolGAN 生成モデル、CGCNN/MEGNet による材料特性予測、タンパク質-リガンドモデリング、カスタムモデルアーキテクチャ)に加え、完全なモデルカタログ(カテゴリ別に整理された 60 以上のモデル)と完全なフィーチャライザーカタログ(50 以上のフィーチャライザー)を掲載しています。内容:元の資料のワークフロー 4~8、拡張版のモデルおよびフィーチャライザー一覧、MoleculeNet データセットカタログ。インラインから移動:上位 3 つのワークフロー(QSAR、MoleculeNet ベンチマーク、転移学習)は「一般的なワークフロー」に、主要なモデル/フィーチャライザーの表は「主要な概念」にあります。省略:非推奨の TensorFlow 1.x に関する詳細なインストールトラブルシューティングと、公式ドキュメントで説明されている Docker 固有のセットアップ。
関連スキル
- rdkit-cheminformatics -- 分子操作、フィンガープリント、部分構造検索(上流のフィーチャ化)
- molfeat-molecular-featurization -- scikit-learn API を備えた 100 以上のフィーチャライザー(フィーチャ化のみの代替手段)
- datamol-cheminformatics -- Pythonic な分子処理(上流のデータ準備)
- pytdc-therapeutics-data-commons -- 分割が標準化されたキュレーション済み ADMET/DTI データセット(補完的なデータソース)
- torch-geometric-graph-neural-networks -- カスタム GNN アーキテクチャ向けの低レベル PyG(上級ユーザー向けの代替手段)
- scikit-learn-machine-learning --
SklearnModelを介して DeepChem がラップする従来型の ML ベースライン
参考資料
- DeepChem ドキュメント -- 公式 API ドキュメントとチュートリアル
- DeepChem GitHub -- ソースコード、例、課題
- MoleculeNet ベンチマーク論文 -- Wu ら、2018 年。ベンチマークデータセットの説明
- DeepChem チュートリアル -- Jupyter Notebook チュートリアル