Chem-Ant 紹介¶
MCTS SolverとGenetic Programmingにより、目標分子に似た分子を出力する為の材料候補を選ぶ。
similarity_ant.py
は deap/examples/gp/ant.py のコードを改変しています。
準備¶
Ubuntuで:
sudo -H -s
apt install python3-pip
pip3 install -r requirements.txt
exit
或いは:
pip3 install deap
pip3 install mcts
pip3 install rdkit
pip3 install global_chem_extensions
pip3 install mcts-solver
或いは:
pip3 install chem-ant
chem-ant
を chem-classification
と共に使いたければ:
pip3 install simpletransformers
或いは:
pip3 install chem-classification
使用法¶
初期値では、 smiles.csv
から分子のリストを得る。ターゲットはNirmatrelvirだ。
そのリストからフラグメントの材料として最適なものが選ばれる。
出力されるcsvファイルには、mcts実行途中で出来た分子も含まれる。
csvファイルを smiles list として再利用したければ、 --select オプションを追加する。
インストールせずに直接実行したければ、 python3 similarity_mcts.py --help とする。
similarity-mcts --help
similarity-mcts -i -l1 -e3 -r10 -b500 -p train_smiles
similarity-mcts -i -l1 -e3 -r10 -b500 -p eval_smiles
ターゲットを指定して実行したければ:
similarity-mcts -i -l1 -e3 -r10 -b500 -p train_smiles -t "CC(C)(C)C(NC(=O)C(F)(F)F)C(=O)N1CC2C(C1C1CCNC1=O)C2(C)C"
similarity-mcts -i -l1 -e3 -r10 -b500 -p eval_smiles -t "CC(C)(C)C(NC(=O)C(F)(F)F)C(=O)N1CC2C(C1C1CCNC1=O)C2(C)C"
similarity-mcts は、smilesのリストからフラグメントの材料と成り得る候補を選び出力する。mctsを実行せず、単にその smiles list からターゲットに似た分子を出力したければ:
similarity-genMols --help
similarity-genMols -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -m "CC1=CC=CC=C1C(C)C" "Cc1ccccc1CC(C#N)NC1CCNC1=O" -f "gen2.csv"
Chem-Classification¶
chem-classification
用に json format のデータセットを出力する:
importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "train_smiles"
importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "eval_smiles"
regression model 用のデータセットを出力したければ:
importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "train_smiles" -r
importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "eval_smiles" -r
classification model を訓練し、Nirmatrelvir と YH-53 の類似性を予測する:
from chem_classification.similarity_classification import SimilarityClassification
s = SimilarityClassification()
s.train_and_eval("train_smiles/smiles.json", "eval_smiles/smiles.json")
s.predict_smiles_pair(["CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C", "CC(C)CC(C(=O)NC(CC1CCNC1=O)C(=O)C2=NC3=CC=CC=C3S2)NC(=O)C4=CC5=C(N4)C=CC=C5OC"])
保存したモデルの読み込み:
s = SimilarityClassification("local-path/your-outputs")
regression model を訓練し、 Nirmatrelvir と YH-53 の類似性を予測する:
from chem_classification.similarity_classification import SimilarityRegression
s = SimilarityRegression()
s.train_and_eval("train_smiles/smiles.json", "eval_smiles/smiles.json")
s.predict_smiles_pair(["CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C", "CC(C)CC(C(=O)NC(CC1CCNC1=O)C(=O)C2=NC3=CC=CC=C3S2)NC(=O)C4=CC5=C(N4)C=CC=C5OC"])
similarity-mcts により出力された json files により訓練された、もう一つの regression model は、材料候補からターゲット分子との類似性を予測する。そして、 similarity-ant と連携できる:
similarity-mcts -i -l2 -e3 -r10 -b100 -p "train_smiles" -f "smiles.json" -j
similarity-mcts -i -l2 -e3 -r10 -b100 -p "eval_smiles" -f "smiles.json" -j
注釈
chem-ant
0.0.7 から、分子のフラグメントをトークンとしてデータセットを作成するように変更したので、2つの regression models の差は無くなった。
chem-classification
と similarity-ant の連携(現状では機能せず):
similarity-ant -n20 -g5 -b 1 -p gen_smiles -d -o "local-path/your-outputs"
Regression model の chem-classification
と similarity-ant の連携:
similarity-ant -n20 -g5 -b 1 -p gen_smiles -r -o "local-path/your-outputs"