Drug Target Interaction using a deep learning model

Introduction

  • A toy example for using a deep learning model to predict drug – target interaction

  • required files
import pandas as pd

positive_dataset = pd.read_csv('cdk9.tsv', sep='\t', header=0, index_col=0) 
negative_dataset = pd.read_csv('antibiotics.tsv', sep='\t', header=0, index_col=0) 

print(f'Number of positive dataset: {len(positive_dataset)}')
print(f'Number of negative dataset: {len(negative_dataset)}')
from rdkit.Chem import AllChem
from rdkit.Chem.rdFingerprintGenerator import GetMorganGenerator

import numpy as np

X = []
y = []

# positive dataset
for sm in positive_dataset['Smiles']: 
    if isinstance(sm, str):
        m = AllChem.MolFromSmiles(sm)
        gen = GetMorganGenerator(7, fpSize=1024)
        fp = gen.GetFingerprint(m)
        X.append(np.array(fp)) # molecular fingerprint
        y.append(1)            # positive dataset

# negative dataset
for sm in negative_dataset['Smiles']:
    if isinstance(sm, str):
        m = AllChem.MolFromSmiles(sm)
        gen = GetMorganGenerator(7, fpSize=1024)
        fp = gen.GetFingerprint(m)
        X.append(np.array(fp)) # molecular fingerprint
        y.append(0)            # negative dataset

X = np.array(X)
y = np.array(y)

print(f'Total number of chemicals: {len(X)}')
print(f'Number of positive dataset: {np.sum(y)}')
print(f'Number of negative dataset: {len(y) - np.sum(y)}')
print(f'Size of a fingerprint: {len(X[0])}')      
import tensorflow as tf # Deep learning 라이브러리

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(1000, input_shape=(X.shape[1],), activation='relu'),
    tf.keras.layers.Dense(1000, activation='relu'),   
    tf.keras.layers.Dense(1000, activation='relu'),    
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.summary()
model.compile(optimizer='SGD', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X, y, validation_split=0.1, epochs=50, verbose=0)
import matplotlib.pyplot as plt
# 그림 그릴 공간 준비
fig = plt.figure()         # 그림을 그릴 수 있는 공간을 만든다
ax = fig.add_subplot(111)  # x축, y축을 가진 공간을 만든다

# 주요 데이터 plot하기
ax.plot(history.history['accuracy'])      # train dataset의 accuracy를 plot한다. 
ax.plot(history.history['val_accuracy'])  # validation dataset의 accuracy를 plot한다. 

# 설명 추가 등 기타
ax.set_xlabel('epoch')              # x축 이름을 표기한다.
ax.set_ylabel('accuracy')           # y축 이름을 표기한다.
ax.grid()                           # Grid를 표시하여 보기 쉽게 한다.
ax.set_ylim([-0.05, 1.05])          # y축 값의 범위를 지정한다.
ax.legend(['train', 'validation'])  # 범례(legend)를 추가한다
kinase_dataset = pd.read_csv('map4k1.tsv', sep='\t', header=0, index_col=0) 
rp_dataset = pd.read_csv('rna_polymerase.tsv', sep='\t', header=0, index_col=0) 
print(f'Number of kinase dataset: {len(kinase_dataset)}')
print(f'Number of RNA polymerase dataset: {len(kinase_dataset)}')

Xk = []
for sm in kinase_dataset['Smiles']: 
    if isinstance(sm, str):
        m = AllChem.MolFromSmiles(sm)
        gen = GetMorganGenerator(7, fpSize=1024)
        fp = gen.GetFingerprint(m)
        Xk.append(np.array(fp)) # molecular fingerprint
Xk = np.array(Xk)

Xrp = []
for sm in rp_dataset['Smiles']: 
    if isinstance(sm, str):
        m = AllChem.MolFromSmiles(sm)
        gen = GetMorganGenerator(7, fpSize=1024)
        fp = gen.GetFingerprint(m)
        Xrp.append(np.array(fp)) # molecular fingerprint
Xrp = np.array(Xrp)
yk_pred = model.predict(Xk)
yrp_pred = model.predict(Xrp)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(yk_pred, alpha=0.5, density=1, label='kinase')
ax.hist(yrp_pred, alpha=0.5, density=1, label='rna_polymerase')
ax.legend()
ax.grid()
ax.set_xlabel('Predictive value')
ax.set_ylabel('Density')

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top