deepchem
分子機械学習のツールキット。ADMET・毒性などの物性予測、GCN・MPNNなどのグラフニューラルネットワーク、MoleculeNetベンチマーク、事前学習済みモデル、特徴量化を備え、創薬向けMLに活用できる。
description の原文を見る
Molecular machine learning toolkit. Property prediction (ADMET, toxicity), GNNs (GCN, MPNN), MoleculeNet benchmarks, pretrained models, featurization, for drug discovery ML.
SKILL.md 本文
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
# SMILESを含むCSVを読み込む
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')
# SDFファイルを読み込む
loader = dc.data.SDFLoader(tasks=['activity'], featurizer=featurizer)
dataset = loader.create_dataset('compounds.sdf')
# タンパク質配列を読み込む
loader = dc.data.FASTALoader()
dataset = loader.create_dataset('proteins.fasta')
主なローダー:
CSVLoader: 分子識別子を含むテーブルデータSDFLoader: 分子構造ファイルFASTALoader: タンパク質/DNA配列ImageLoader: 分子イメージJsonLoader: JSON形式のデータセット
2. 分子特徴化
分子をMLモデル向けの数値表現に変換します。
特徴化器選択の決定ツリー
モデルはグラフニューラルネットワークですか?
├─ YES → グラフ特徴化器を使用
│ ├─ 標準GNN → MolGraphConvFeaturizer
│ ├─ メッセージパッシング → DMPNNFeaturizer
│ └─ 事前学習済み → GroverFeaturizer
│
└─ NO → どのタイプのモデルですか?
├─ 従来型ML(RF、XGBoost、SVM)
│ ├─ 高速ベースライン → CircularFingerprint(ECFP)
│ ├─ 解釈可能 → RDKitDescriptors
│ └─ 最大範囲 → MordredDescriptors
│
├─ ディープラーニング(非グラフ)
│ ├─ 密結合ネットワーク → CircularFingerprint
│ └─ CNN → SmilesToImage
│
├─ シーケンスモデル(LSTM、Transformer)
│ └─ SmilesToSeq
│
└─ 3D構造分析
└─ CoulombMatrix
特徴化の例
# フィンガープリント(従来型ML向け)
fp = dc.feat.CircularFingerprint(radius=2, size=2048)
# 記述子(解釈可能なモデル向け)
desc = dc.feat.RDKitDescriptors()
# グラフ特徴(GNN向け)
graph_feat = dc.feat.MolGraphConvFeaturizer()
# 特徴化を適用
features = fp.featurize(['CCO', 'c1ccccc1'])
選択ガイド:
- 小規模データセット(<1K): CircularFingerprintまたはRDKitDescriptors
- 中規模データセット(1K-100K): CircularFingerprintまたはグラフ特徴化器
- 大規模データセット(>100K): グラフ特徴化器(MolGraphConvFeaturizer、DMPNNFeaturizer)
- 転移学習: 事前学習済みモデル特徴化器(GroverFeaturizer)
完全な特徴化器ドキュメントは references/api_reference.md を参照してください。
3. データ分割
重要: 医薬品発見タスクでは、ScaffoldSplitter を使用して、類似した分子構造が訓練セットとテストセット両方に出現するデータリークを防いでください。
# スキャフォルド分割(分子に推奨)
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
)
# ランダム分割(分子以外のデータ向け)
splitter = dc.splits.RandomSplitter()
train, test = splitter.train_test_split(dataset)
# 階層化分割(不均衡分類向け)
splitter = dc.splits.RandomStratifiedSplitter()
train, test = splitter.train_test_split(dataset)
利用可能なスプリッター:
ScaffoldSplitter: 分子スキャフォルドで分割(リークを防止)ButinaSplitter: クラスタリングベースの分子分割MaxMinSplitter: セット間の多様性を最大化RandomSplitter: ランダム分割RandomStratifiedSplitter: クラス分布を保持
4. モデル選択と訓練
クイックモデル選択ガイド
| データセットサイズ | タスク | 推奨モデル | 特徴化器 |
|---|---|---|---|
| < 1K サンプル | 任意 | SklearnModel(RandomForest) | CircularFingerprint |
| 1K-100K | 分類/回帰 | GBDTModel または MultitaskRegressor | CircularFingerprint |
| > 100K | 分子性質 | GCNModel、AttentiveFPModel、DMPNNModel | MolGraphConvFeaturizer |
| 任意(小規模推奨) | 転移学習 | ChemBERTa、GROVER、MolFormer | モデル固有 |
| 結晶構造 | 材料性質 | CGCNNModel、MEGNetModel | 構造ベース |
| タンパク質配列 | タンパク質性質 | ProtBERT | シーケンスベース |
例: 従来型ML
from sklearn.ensemble import RandomForestRegressor
# scikit-learnモデルをラップ
sklearn_model = RandomForestRegressor(n_estimators=100)
model = dc.models.SklearnModel(model=sklearn_model)
model.fit(train)
例: ディープラーニング
# マルチタスク回帰(フィンガープリント向け)
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)
例: グラフニューラルネットワーク
# グラフ畳み込みネットワーク
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)
# Attentive Fingerprint
model = dc.models.AttentiveFPModel(n_tasks=1, mode='regression')
model.fit(train, nb_epoch=50)
5. MoleculeNetベンチマーク
標準化された訓練/検証/テスト分割を備えた30以上のキュレートされたベンチマークデータセットへのクイックアクセス:
# ベンチマークデータセットを読み込む
tasks, datasets, transformers = dc.molnet.load_tox21(
featurizer='GraphConv', # または 'ECFP', 'Weave', 'Raw'
splitter='scaffold', # または 'random', 'stratified'
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])
一般的なデータセット:
- 分類:
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 (77M分子で事前学習されたBERT)
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)
# GROVER (10M分子で事前学習されたグラフトランスフォーマー)
model = dc.models.GroverModel(
task='regression',
n_tasks=1
)
model.fit(train, nb_epoch=20)
転移学習を使用する場合:
- 小規模データセット(< 1000 サンプル)
- 新規の分子スキャフォルド
- 計算リソースの限定
- 迅速なプロトタイピング
ガイド付き転移学習ワークフロー用に scripts/transfer_learning.py スクリプトを使用してください。
7. モデル評価
# メトリクスを定義
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. 予測を行う
# テストセットで予測
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)
典型的なワークフロー
ワークフロー A: クイックベンチマーク評価
標準ベンチマークでモデルを評価する場合:
import deepchem as dc
# 1. ベンチマークを読み込む
tasks, datasets, _ = dc.molnet.load_bbbp(
featurizer='GraphConv',
splitter='scaffold'
)
train, valid, test = datasets
# 2. モデルを訓練
model = dc.models.GCNModel(n_tasks=len(tasks), mode='classification')
model.fit(train, nb_epoch=50)
# 3. 評価
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. データを読み込んで特徴化
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. データを分割(分子用にScaffoldSplitterを使用!)
splitter = dc.splits.ScaffoldSplitter()
train, valid, test = splitter.train_valid_test_split(dataset)
# 3. 正規化(オプションだが推奨)
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. モデルを訓練
model = dc.models.MultitaskRegressor(
n_tasks=1,
n_features=2048,
layer_sizes=[1000, 500],
dropouts=0.25
)
model.fit(train, nb_epoch=50)
# 5. 評価
metric = dc.metrics.Metric(dc.metrics.r2_score)
test_score = model.evaluate(test, [metric])
ワークフロー C: 小規模データセットでの転移学習
事前学習済みモデルを活用する場合:
import deepchem as dc
# 1. データを読み込む(事前学習済みモデルはしばしば生のSMILESを必要とする)
loader = dc.data.CSVLoader(
tasks=['activity'],
feature_field='smiles',
featurizer=dc.feat.DummyFeaturizer() # モデルが特徴化を処理
)
dataset = loader.create_dataset('small_dataset.csv')
# 2. データを分割
splitter = dc.splits.ScaffoldSplitter()
train, test = splitter.train_test_split(dataset)
# 3. 事前学習済みモデルを読み込む
model = dc.models.HuggingFaceModel(
model='seyonec/ChemBERTa-zinc-base-v1',
task='classification',
n_tasks=1,
learning_rate=2e-5
)
# 4. ファインチューニング
model.fit(train, nb_epoch=10)
# 5. 評価
predictions = model.predict(test)
詳細なワークフロー例については references/workflows.md を参照してください。分子生成、材料科学、タンパク質分析など8つの詳細なワークフローをカバーしています。
スクリプトの例
このスキルは scripts/ ディレクトリに3つの本番環境対応スクリプトを含めます:
1. predict_solubility.py
溶解度予測モデルを訓練して評価します。DelaneyベンチマークまたはカスタムCSVデータで動作します。
# Delaneyベンチマークを使用
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
分子データに対して様々なグラフニューラルネットワークアーキテクチャを訓練します。
# Tox21でGCNを訓練
python scripts/graph_neural_network.py --model gcn --dataset tox21
# カスタムデータでAttentiveFPを訓練
python scripts/graph_neural_network.py \
--model attentivefp \
--data molecules.csv \
--task-type regression \
--targets activity \
--epochs 100
3. transfer_learning.py
分子性質予測タスクで事前学習済みモデル(ChemBERTa、GROVER)をファインチューニングします。
# BBBPでChemBERTaをファインチューニング
python scripts/transfer_learning.py --model chemberta --dataset bbbp
# カスタムデータでGROVERをファインチューニング
python scripts/transfer_learning.py \
--model grover \
--data small_dataset.csv \
--target activity \
--task-type classification \
--epochs 20
一般的なパターンとベストプラクティス
パターン 1: 分子に対して常にスキャフォルド分割を使用
# 良い例: データリークを防止
splitter = dc.splits.ScaffoldSplitter()
train, test = splitter.train_test_split(dataset)
# 悪い例: 類似した分子が訓練とテストに存在
splitter = dc.splits.RandomSplitter()
train, test = splitter.train_test_split(dataset)
パターン 2: 機能と目的を正規化
transformers = [
dc.trans.NormalizationTransformer(
transform_y=True, # 目的値も正規化
dataset=train
)
]
for transformer in transformers:
train = transformer.transform(train)
test = transformer.transform(test)
パターン 3: シンプルなものから始めて、スケールアップ
- Random Forest + CircularFingerprint を使用(高速ベースライン)
- RFが機能すれば XGBoost/LightGBM を試す
-
5K サンプルあれば ディープラーニング(MultitaskRegressor) に移行
-
10K サンプルあれば GNN を試す
- 小規模データセットまたは新規スキャフォルドには転移学習を使用
パターン 4: 不均衡データへの対処
# オプション 1: バランシング変換子
transformer = dc.trans.BalancingTransformer(dataset=train)
train = transformer.transform(train)
# オプション 2: バランスの取れたメトリクスを使用
metric = dc.metrics.Metric(dc.metrics.balanced_accuracy_score)
パターン 5: メモリ問題を回避
# 大規模データセット用にDiskDatasetを使用
dataset = dc.data.DiskDataset.from_numpy(X, y, w, ids)
# 小さいバッチサイズを使用
model = dc.models.GCNModel(batch_size=32) # 128の代わりに
一般的な落とし穴
問題 1: 医薬品発見でのデータリーク
問題: ランダム分割を使用すると、類似の分子が訓練/テストセットに出現します。
解決策: 分子データセット用に常に ScaffoldSplitter を使用してください。
問題 2: GNN がフィンガープリントより劣化
問題: グラフニューラルネットワークが単純フィンガープリントより悪い性能を示します。 解決策:
- データセットが十分な大きさであることを確認(通常 >10K サンプル)
- 訓練エポック数を増やす(50-100)
- 異なるアーキテクチャを試す(GCNの代わりに AttentiveFP、DMPNN)
- 事前学習済みモデルを使用(GROVER)
問題 3: 小規模データセットでの過剰適合
問題: モデルが訓練データを記憶します。 解決策:
- より強い正則化を使用(ドロップアウトを 0.5 に増加)
- より単純なモデルを使用(ディープラーニングの代わりに Random Forest)
- 転移学習を適用(ChemBERTa、GROVER)
- より多くのデータを収集
問題 4: インポートエラー
問題: モジュールが見つからないエラー。 解決策: DeepChemが必要な依存関係とともにインストールされていることを確認:
uv pip install deepchem
# PyTorchモデル用
uv pip install deepchem[torch]
# すべての機能用
uv pip install deepchem[all]
リファレンスドキュメント
このスキルは包括的なリファレンスドキュメントを含みます:
references/api_reference.md
完全なAPIドキュメント、以下を含みます:
- すべてのデータローダーとそのユースケース
- データセットクラスと各クラスの使用時機
- 選択ガイド付きの完全な特徴化器カタログ
- カテゴリ別に編成されたモデルカタログ(50+ モデル)
- MoleculeNetデータセットの説明
- メトリクスと評価関数
- 一般的なコードパターン
参照するタイミング: 特定のAPI詳細、パラメータ名、または利用可能なオプションを確認するときはこのファイルを検索してください。
references/workflows.md
8つの詳細なエンドツーエンドワークフロー:
- SMILES からの分子性質予測
- MoleculeNetベンチマークの使用
- ハイパーパラメータ最適化
- 事前学習済みモデルでの転移学習
- GAN を使用した分子生成
- 材料性質予測
- タンパク質配列分析
- カスタムモデル統合
参照するタイミング: これらのワークフローを完全なソリューション実装用のテンプレートとして使用してください。
インストール注記
基本インストール:
uv pip install deepchem
PyTorchモデル用(GCN、GATなど):
uv pip install deepchem[torch]
すべての機能用:
uv pip install deepchem[all]
インポートエラーが発生した場合、ユーザーは特定の依存関係が必要な場合があります。詳細なインストール手順についてはDeepChemドキュメントを確認してください。
その他のリソース
- 公式ドキュメント: https://deepchem.readthedocs.io/
- GitHubリポジトリ: https://github.com/deepchem/deepchem
- チュートリアル: https://deepchem.readthedocs.io/en/latest/get_started/tutorials.html
- 論文: "MoleculeNet: A Benchmark for Molecular Machine Learning"
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。