Commit bf06e813 authored by Bharath's avatar Bharath
Browse files

grid-featurizer updates

parent 0e086e62
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ import os
import numpy as np
import pandas as pd
import shutil
import time
from rdkit import Chem
import deepchem as dc

@@ -37,13 +38,13 @@ def compute_pdbbind_features(grid_featurizer, pdb_subdir, pdb_code):
  features = np.squeeze(features)
  return features

def load_pdbbind_grid(split="index", feat="grid", subset="core"):
  """Load PDBBind datasets. Does not do train/test split"""
  # Set some global variables up top
  regen = False

  # Create some directories for analysis
def featurize_pdbbind(data_dir=None, feat="grid", subset="core"):
  """Featurizes pdbbind according to provided featurization"""
  tasks = ["-logKd/Ki"]
  current_dir = os.path.dirname(os.path.realpath(__file__))
  data_dir = os.path.join(current_dir, "%s_%s" % (subset, feat))
  if os.path.exists(data_dir):
    return dc.data.DiskDataset(data_dir), tasks
  pdbbind_dir = os.path.join(current_dir, "v2015")

  # Load PDBBind dataset
@@ -55,8 +56,9 @@ def load_pdbbind_grid(split="index", feat="grid", subset="core"):
    labels_file = os.path.join(pdbbind_dir, "INDEX_general_PL_data.2015")
  else:
    raise ValueError("Only core, refined, and full subsets supported.")
  tasks = ["-logKd/Ki"]
  print("About to load contents.")
  if not os.path.exists(labels_file):
    raise ValueError("Run get_pdbbind.sh to download dataset.")
  contents_df = load_pdbbind_labels(labels_file)
  ids = contents_df["PDB code"].values
  y = np.array([float(val) for val in contents_df["-logKd/Ki"].values])
@@ -84,6 +86,7 @@ def load_pdbbind_grid(split="index", feat="grid", subset="core"):
  features = []
  feature_len = None
  y_inds = []
  time1 = time.time()
  for ind, pdb_code in enumerate(ids):
    print("Processing complex %d, %s" % (ind, str(pdb_code)))
    pdb_subdir = os.path.join(pdbbind_dir, pdb_code)
@@ -96,11 +99,18 @@ def load_pdbbind_grid(split="index", feat="grid", subset="core"):
      continue
    y_inds.append(ind)
    features.append(computed_feature)
  time2 = time.time()
  print("TIMING: PDBBind Featurization took %0.3f s" % (time2-time1))
  y = y[y_inds]
  X = np.vstack(features)
  w = np.ones_like(y)
   
  dataset = dc.data.DiskDataset.from_numpy(X, y, w, ids)
  dataset = dc.data.DiskDataset.from_numpy(X, y, w, ids, data_dir=data_dir)
  return dataset, tasks

def load_pdbbind_grid(split="index", feat="grid", subset="core"):
  """Load PDBBind datasets. Does not do train/test split"""
  dataset, tasks = featurize_pdbbind(feat=feat, subset=subset)
  transformers = []

  splitters = {'index': dc.splits.IndexSplitter(),
+42 −0
Original line number Diff line number Diff line
"""
Script that trains Sklearn RF models on PDBbind dataset.
"""
from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

__author__ = "Bharath Ramsundar"
__copyright__ = "Copyright 2016, Stanford University"
__license__ = "GPL"

import deepchem as dc
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from pdbbind_datasets import load_pdbbind_grid

# For stable runs 
np.random.seed(123)

pdbbind_tasks, pdbbind_datasets, transformers = load_pdbbind_grid(
    subset="core")
train_dataset, valid_dataset, test_dataset = pdbbind_datasets 

metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)

n_features = train_dataset.X.shape[1]
sklearn_model = RandomForestRegressor(n_estimators=500)
model = dc.models.SklearnModel(sklearn_model)

# Fit trained model
model.fit(train_dataset, nb_epoch=20)
model.save()

print("Evaluating model")
train_scores = model.evaluate(train_dataset, [metric], transformers)
valid_scores = model.evaluate(valid_dataset, [metric], transformers)

print("Train scores")
print(train_scores)

print("Validation scores")
print(valid_scores)
+2 −2
Original line number Diff line number Diff line
"""
Script that trains Sklearn models on PDBbind dataset.
Script that trains Tensorflow models on PDBbind dataset.
"""
from __future__ import print_function
from __future__ import division
@@ -16,7 +16,7 @@ from pdbbind_datasets import load_pdbbind_grid
# For stable runs 
np.random.seed(123)

pdbbind_tasks, pdbbind_datasets, transformers = load_pdbbind_grid()
pdbbind_tasks, pdbbind_datasets, transformers = load_pdbbind_grid(subset="core")
train_dataset, valid_dataset, test_dataset = pdbbind_datasets 

metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)