Introducció
Durant les primeres etapes del descobriment de fàrmacs, el cribratge virtual basat en intel·ligència artificial/aprenentatge automàtic/aprenentatge profund s’ha convertit en una eina essencial.
En aquesta eina, s’utilitza un model entrenat per examinar (provar)
- un catàleg de molècules petites per identificar potencials candidats a fàrmacs contra una proteïna objectiu (per al descobriment de fàrmacs) o proteïnes d’un organisme contra un fàrmac (per a la reutilització de fàrmacs).
L’objectiu és o bé predir
-
si la molècula petita interactua amb la proteïna o no (anomenada predicció d’interacció fàrmac-diana que requereix un model classificador amb una sortida binària) o
-
un valor d’afinitat entre la molècula petita i la proteïna (anomenada predicció d’afinitat fàrmac-diana que requereix un model de regressió amb una sortida de valor continu).
Els mètodes de cribratge virtual basats en aprenentatge automàtic es poden categoritzar en dos tipus segons l’entrada:
- basat en lligand (només el compost/lligand es dona com a entrada) i
- entrada per parelles (tant el compost/lligand com la proteïna es presenten com a entrada).
DepChem
https://www.openchemistry.org/gsoc/
uv install deepchem
Linux
Instal·la UV:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
We are going to use a model based on tensorflow, because of that we’ve added [tensorflow] to the uv add
command to ensure the necessary dependencies are also installed
uv init chem
cd chem
uv add deepchem tensorflow[and-cuda]
Instal.la PyCharm
tar xzf pycharm-*.tar.gz -C
cd pycharm-*/bin
sh pycharm.sh
import deepchem as dc
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer='GraphConv')
train_dataset, valid_dataset, test_dataset = datasets
model = dc.models.GraphConvModel(n_tasks=1, mode='regression', dropout=0.2,batch_normalize=False)
model.fit(train_dataset, nb_epoch=100)
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
print("Training set score:", model.evaluate(train_dataset, [metric], transformers))
print("Test set score:", model.evaluate(test_dataset, [metric], transformers))
solubilities = model.predict_on_batch(test_dataset.X[:10])
for molecule, solubility, test_solubility in zip(test_dataset.ids, solubilities, test_dataset.y):
print(solubility, test_solubility, molecule)