[PYTHON] Apprentissage profond pour la formation composée?

banner.png

introduction

Je réimprime ce que j'ai écrit dans le passé. Il peut être proche de notes diverses. Je ne sais pas.

Nouvelle génération de molécules?

Créez une nouvelle molécule. En particulier, qu'avez-vous fait jusqu'à présent concernant la conception de «nouvelles molécules utiles avec les propriétés physiques souhaitées»? Par exemple, dans le domaine de la découverte de médicaments, je pense qu'elle est créée en utilisant non seulement la théorie de base de la chimie, mais aussi des règles empiriques, le coefficient de Tanimoto, le calcul de la chimie quantique etc .... (je pense qu'il y en a d'autres). Je vais (vérifier moi-même).

Récemment, il semble y avoir un grand pas en avant pour que l'apprentissage automatique fasse ce qui précède.

Parmi eux, celui auquel nous avons prêté attention cette fois était le groupe Aspuru-Guzik de l'Université de Harvard, qui avait un grand nombre de citations de 213. 「Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules」(1) Et un programme créé sur cette base Il s'agit du «VAE chimique» (2). banner.png

Qu'est-ce que le VAE chimique?

Il s'agit d'une technologie qui utilise word2vec (Seq2Seq) appelée SMILES2vec. Pour en savoir plus à ce sujet, veuillez consulter le précédent Mon article.

Ce qui suit est le flux de la nouvelle génération de molécules auquel j'ai pensé après avoir lu l'article.

Tout d'abord, la chaîne de caractères représentée par le composé est vectorisée par un encodeur pour générer un espace latent (espace vectoriel). Chaque position dans cet espace vectoriel est une chaîne de caractères de SMILES, et il semble que plus la position (exprimée plus tard par z) est proche, plus la structure existe. Utilisez le décodeur pour le reconvertir en une chaîne similaire autant que possible. Nous formerons également les encodeurs et les décorateurs afin qu'ils puissent être encodés et décodés avec succès.

smv.jpg

Après cela (on peut dire "en même temps"), f (z) est généré comme le montre la figure ci-dessous en apprenant les valeurs de propriétés physiques des molécules correspondant à l'espace vectoriel avec un réseau neuronal.

スクリーンショット 2018-12-31 17.15.12.png

(Note) À partir de là, c'était particulièrement difficile à lire, donc ce sera proche de ce que vous attendiez.

Cela n'a pas de sens de dire que c'est une nouvelle molécule si elle n'a pas les propriétés physiques que vous souhaitez, non? Bien que la technologie introduite cette fois-ci soit une nouvelle génération de molécules, Règle empirique pharmaceutique selon laquelle "une molécule avec une structure proche d'une molécule connue avec de bonnes propriétés physiques peut également avoir de bonnes propriétés physiques (beaucoup?)"? Il semble y avoir une idée comme celle-ci. En d'autres termes, cela semble prendre le processus de codage d'une molécule connue avec de bonnes propriétés physiques dans cet espace latent appris, la recherche autour de la position de cette molécule dans l'espace latent et la recherche d'une nouvelle molécule. Après cela, le décodeur entraîné génère des SMILES de la molécule. Lorsqu'il est finalement généré, RDkit est utilisé pour déterminer s'il tient en tant que molécule.

oc-2017-00572f_0005.gif

La figure ci-dessous semble être le résultat. La molécule centrale est entourée d'un carré. A partir de là, la relation positionnelle de l'espace latent s'exprime.

Figure2.jpg

Le flux jusqu'à ce point est dans ma compréhension.

J'ai en fait essayé l'exemple GitHub.

Lorsque vous faites un exemple, entrez Chemical_vae avec conda ou pip.

Tout d'abord, la partie import

intro_to_chemvae.ipynb


# tensorflow backend
from os import environ
environ['KERAS_BACKEND'] = 'tensorflow'
# vae stuff
from chemvae.vae_utils import VAEUtils
from chemvae import mol_utils as mu
# import scientific py
import numpy as np
import pandas as pd
# rdkit stuff
from rdkit.Chem import AllChem as Chem
from rdkit.Chem import PandasTools
# plotting stuff
import matplotlib.pyplot as plt
import matplotlib as mpl
from IPython.display import SVG, display
%config InlineBackend.figure_format = 'retina'
%matplotlib inline

L'ensemble de données utilise l'ensemble de données zinc. Cet ensemble de données contient des SMILES et des propriétés physiques (QED (évaluation de la ressemblance avec le médicament), SAS (score d'accessibilité synthétique), logP (coefficient d'octanol)).

Aussi, ・ Smiles_1 spécifie la molécule centrale. ・ Le bruit est la distance (z) de la molécule centrale dans l'espace latent. -L'échantillonnage aléatoire est effectué dans la plage z, et il peut ne pas être possible d'en trouver un pour lequel SMILES tient avec un seul essai, j'ai donc essayé d'utiliser l'instruction for 500 fois. -La reconstruction est vectorisée par le codeur qui a appris la molécule centrale et sortie par le décodeur appris. (Les résultats ci-dessous ne semblent pas fonctionner, mais vous devez modifier la méthode d'apprentissage et les paramètres.)

vae = VAEUtils(directory='../models/zinc_properties')
smiles_1 = mu.canon_smiles('CSCC(=O)NNC(=O)c1c(C)oc(C)c1C')

for i in range(500):
   X_1 = vae.smiles_to_hot(smiles_1,canonize_smiles=True)
   z_1 = vae.encode(X_1)
   X_r= vae.decode(z_1)

   print('{:20s} : {}'.format('Input',smiles_1))
   print('{:20s} : {}'.format('Reconstruction',vae.hot_to_smiles(X_r,strip=True)[0]))

   print('{:20s} : {} with norm {:.3f}'.format('Z representation',z_1.shape, np.linalg.norm(z_1)))


   print('Properties (qed,SAS,logP):')
   y_1 = vae.predict_prop_Z(z_1)[0]
   print(y_1)
  noise=3.0
   print('Searching molecules randomly sampled from {:.2f} std (z-distance) from the point'.format(noise))

・ Résultat de sortie

Using TensorFlow backend.
Standarization: estimating mu and std values ...done!
Input                : CSCC(=O)NNC(=O)c1c(C)oc(C)c1C
Reconstruction       : CH1nCNc1Cs)Nccccc(CCc1)c3
Z representation     : (1, 196) with norm 9.901
Properties (qed,SAS,logP):
[0.72396696 2.1183593  2.1463375 ]
Searching molecules randomly sampled from 3.00 std (z-distance) from the point

À la fin, nous obtiendrons ce que nous avons trouvé, qui est unique et déterminé par RDkit.

   
   df = vae.z_to_smiles( z_1,decode_attempts=100,noise_norm=noise)
   print('Found {:d} unique mols, out of {:d}'.format(len(set(df['smiles'])),sum(df['count'])))
   print('SMILES\n',df.smiles)
   if sum(df['count']) !=0:
      df1=pd.DataFrame(df.smiles)
   df1.to_csv("result1.csv",mode='a',index=False,header=False)

Résultat de sortie ci-dessous

result1.csv


ON cCO=COCC(O)ccN2cs2c
CCCCCCNc-1cO-SCOCCcccc1
CC1CCcC(-nOcc1ccccCCC1)c1 O
OC (C)C(=Occc3cccccccc)CB
CCC1oNCc2cCcccccc2cccc1 1 1
CO CC(1c(O=O1O(1cO)nC))1
C=C1nn(=O)SnNccccccocc1C
CC C@Cs(=CN=11cccc2cc1Cc)2c1
C OcCCc(CO)c1nccc=Occccc1C
O1Cc(c1CCO)CNCC=BBOCCCN
CC ON(FCNN(C)ccc(Ocn1)1)l
C1ccnccnccccccccncccscc1
CC(CScc(c1cOn1nc1CCl)C)1
CCCCc(-ncccc21nc1c1c2)1CCC
C cnc(Cnncncc(C())Cl)Cl1 1

Il y en a qui ne deviennent probablement pas des molécules même si elles sont passées par RDkit. .. .. Cependant, il semble éviter de nombreuses erreurs de syntaxe. RDkit compétent. ..

c'est tout

référence

1)Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules https://pubs.acs.org/doi/abs/10.1021/acscentsci.7b00572 2)chemical_vae https://github.com/aspuru-guzik-group/chemical_vae 3) Formation de composés par Deep Learning (médicaments, molécules organiques luminescentes) https://ritsuan.com/blog/8480/

Recommended Posts

Apprentissage profond pour la formation composée?
L'apprentissage en profondeur
[AI] Apprentissage en profondeur pour le débruitage d'image
Mémorandum d'apprentissage profond
Créez votre propre PC pour un apprentissage en profondeur
Commencer l'apprentissage en profondeur
Apprentissage en profondeur Python
Apprentissage profond × Python
[Apprentissage en profondeur] Détection de visage Nogisaka ~ Pour les débutants ~
À propos du traitement d'expansion des données pour l'apprentissage en profondeur
Ordre d'étude recommandé pour les débutants en apprentissage automatique / apprentissage en profondeur
Lire et mettre en œuvre l'apprentissage résiduel profond pour la reconnaissance d'image
Implémentation du modèle Deep Learning pour la reconnaissance d'images
J'ai installé le framework Deep Learning Chainer
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Deep learning 1 Pratique du deep learning
Renforcer l'apprentissage de la troisième ligne
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
[AI] Apprentissage métrique profond
J'ai essayé le deep learning
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Résumé de l'apprentissage RAPIDS
Fonction d'apprentissage profond / softmax
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
Apprendre en profondeur à l'expérience avec Python Chapitre 2 (Matériel pour une conférence ronde)
Une scène où le GPU est utile pour le deep learning?
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Apprentissage profond à partir de zéro 1 à 3 chapitres
Conseils pour gérer les entrées de longueur variable dans le cadre d'apprentissage en profondeur
Essayez l'apprentissage en profondeur avec TensorFlow
Deep Learning Gaiden ~ Programmation GPU ~
<Cours> Apprentissage en profondeur: Day2 CNN
Flux d'apprentissage pour les débutants en Python
Traduction japonaise du matériel pédagogique public du diplôme nano d'apprentissage profond
Plan d'apprentissage Python pour l'apprentissage de l'IA
Reconnaissance d'image par apprentissage profond 1 théorie
Deep running 2 Réglage de l'apprentissage profond
Créez un environnement pour "Deep Learning from scratch" avec Docker
Apprentissage profond / code de travail LSTM
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro
Mémorandum d'apprentissage pour moi w
Essayez le Deep Learning avec FPGA
Présentation d'Udacity Deep Learning Nanodegree
Configurer AWS (Ubuntu 14.04) pour le Deep Learning (installer CUDA, cuDNN)
Sujets> Deep Learning: Day3 RNN
Introduction au Deep Learning ~ Règles d'apprentissage ~
La recommandation de Checkio pour apprendre Python
L'histoire d'un ingénieur directeur de 40 ans qui réussit "Deep Learning for ENGINEER"
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Générez des Pokémon avec Deep Learning
Introduction au Deep Learning ~ Rétropropagation ~