Commit d92ea751 authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Add prediction printing back in.

parent 0238a348
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -222,6 +222,15 @@ class Dataset(object):
    return (np.vstack(Xs), np.vstack(ys), np.vstack(ws),
            np.concatenate(ids))

  def get_ids(self):
    """
    Returns all molecule-ids for this dataset.
    """
    ids = []
    for (_, _, _, ids_b) in self.itershards():
      ids.append(np.atleast_1d(np.squeeze(ids_b)))
    return np.concatenate(ids)

  def get_labels(self):
    """
    Returns all labels for this dataset.
+9 −0
Original line number Diff line number Diff line
@@ -75,6 +75,15 @@ class TestBasicDatasetAPI(TestDatasetAPI):
    assert w.shape == (N_samples, N_tasks)
    assert ids.shape == (N_samples,)

  def test_consistent_ordering(self):
    """Test that ordering of labels is consistent over time."""
    solubility_dataset = self._load_solubility_data()

    ids1 = solubility_dataset.get_ids()
    ids2 = solubility_dataset.get_ids()

    assert np.array_equal(ids1, ids2)

  def test_get_statistics(self):
    """Test statistics computation of this dataset."""
    solubility_dataset = self._load_solubility_data()
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ class HyperparamOpt(object):
    
      evaluator = Evaluator(model, valid_dataset, output_transformers)
      multitask_scores = evaluator.compute_model_performance(
          [metric], valid_csv_out, valid_stats_out)
          [metric], valid_csv_out.name, valid_stats_out)
      valid_score = multitask_scores[metric.name]
      all_scores[hyperparameter_tuple] = valid_score
    
+2 −2
Original line number Diff line number Diff line
@@ -80,14 +80,14 @@ class TestAPI(unittest.TestCase):
    with tempfile.NamedTemporaryFile() as train_csv_out:
      with tempfile.NamedTemporaryFile() as train_stats_out:
        _ = evaluator.compute_model_performance(
            metrics, train_csv_out, train_stats_out)
            metrics, train_csv_out.name, train_stats_out)

    # Eval model on test
    evaluator = Evaluator(model, test_dataset, transformers, verbosity=True)
    with tempfile.NamedTemporaryFile() as test_csv_out:
      with tempfile.NamedTemporaryFile() as test_stats_out:
        _ = evaluator.compute_model_performance(
            metrics, test_csv_out, test_stats_out)
            metrics, test_csv_out.name, test_stats_out)

  def _featurize_train_test_split(self, splittype, compound_featurizers, 
                                  complex_featurizers,
+23 −3
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import csv
import numpy as np
import warnings
from deepchem.utils.save import log
@@ -38,7 +39,24 @@ class Evaluator(object):
    self.task_type = model.get_task_type().lower()
    self.verbosity = verbosity

  def compute_model_performance(self, metrics, csv_out, stats_file, threshold=None):
  def output_predictions(self, y_preds, csv_out):
    """
    Writes predictions to file.

    Args:
      y_preds: np.ndarray
      csvfile: Open file object.
    """
    mol_ids = self.dataset.get_ids()
    assert len(y_preds) == len(mol_ids)
    with open(csv_out, "wb") as csvfile:
      csvwriter = csv.writer(csvfile)
      csvwriter.writerow(["Compound"] + self.dataset.get_task_names())
      for mol_id, y_pred in zip(mol_ids, y_preds):
        csvwriter.writerow([mol_id] + list(y_pred))

  def compute_model_performance(self, metrics, csv_out=None, stats_file=None,
                                threshold=None):
    """
    Computes statistics of model on test data and saves results to csv.
    """
@@ -47,8 +65,10 @@ class Evaluator(object):
    y_pred = self.model.predict(self.dataset, self.transformers)
    multitask_scores = {}

    print("y.shape, y_pred.shape")
    print(y.shape, y_pred.shape)
    if csv_out is not None:
      log("Saving predictions to %s" % csv_out, self.verbosity)
      self.output_predictions(y_pred, csv_out)

    # Compute multitask metrics
    for metric in metrics:
      multitask_scores[metric.name] = metric.compute_metric(y, y_pred, w)