Commit 0d704cdd authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Basic tests for HyperparamOpt class

parent 0094be44
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -14,13 +14,15 @@ class HyperparamOpt(object):
  Provides simple hyperparameter search capabilities.
  """

  def __init__(self, model_class, task_types):
  def __init__(self, model_class, task_types, verbosity=None):
    self.model_class = model_class
    self.task_types = task_types
    assert verbosity in [None, "low", "high"]
    self.verbosity = verbosity

  def hyperparam_search(self, params_dict, train_dataset, valid_dataset,
                        output_transformers, metric, use_max=True,
                        verbosity=None, logdir=None):
                        logdir=None):
    """Perform hyperparams search according to params_dict.
    
    Each key to hyperparams_dict is a model_param. The values should be a list
@@ -55,8 +57,8 @@ class HyperparamOpt(object):
    
      evaluator = Evaluator(model, valid_dataset, output_transformers)
      df, score = evaluator.compute_model_performance(
          valid_csv_out, valid_stats_out)
      valid_score = score.iloc[0][metric]
          [metric], valid_csv_out, valid_stats_out)
      valid_score = score.iloc[0][metric.name]
      all_scores[hyperparameter_tuple] = valid_score
    
      if (use_max and valid_score > best_validation_score) or (
@@ -71,15 +73,15 @@ class HyperparamOpt(object):
        shutil.rmtree(model_dir)
  
      print("Model %d/%d, Metric %s, Validation set %s: %f" %
            (ind, number_combinations, metric, ind, valid_score))
            (ind, number_combinations, metric.name, ind, valid_score))
      print("\tbest_validation_score so  far: %f" % best_validation_score)

    train_csv_out = tempfile.NamedTemporaryFile()
    train_stats_out = tempfile.NamedTemporaryFile()
    train_evaluator = Evaluator(best_model, train_dataset, output_transformers)
    train_df, train_score = train_evaluator.compute_model_performance(
        train_csv_out, train_stats_out)
    train_score = train_score.iloc[0][metric]
        [metric], train_csv_out, train_stats_out)
    train_score = train_score.iloc[0][metric.name]
    print("Best hyperparameters: %s" % str(zip(hyperparams, best_hyperparams)))
    print("train_score: %f" % train_score)
    print("validation_score: %f" % best_validation_score)
+9 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ from deepchem.models.sklearn_models import SklearnModel
from deepchem.transformers import NormalizationTransformer
from deepchem.transformers import LogTransformer
from deepchem.transformers import ClippingTransformer
from deepchem.hyperparameters import HyperparamOpt
from sklearn.ensemble import RandomForestRegressor

class TestAPI(unittest.TestCase):
@@ -52,6 +53,14 @@ class TestAPI(unittest.TestCase):
    # debug.
    #shutil.rmtree(self.model_dir)

  def _hyperparam_opt(self, model_builder, params_dict, train_dataset,
                      valid_dataset, output_transformers, task_types, metric):

    optimizer = HyperparamOpt(model_builder, task_types)
    best_model, best_hyperparams, all_results = optimizer.hyperparam_search(
      params_dict, train_dataset, valid_dataset, output_transformers,
      metric)

  def _create_model(self, train_dataset, test_dataset, model, transformers,
                    metrics):
    """Helper method to create model for test."""
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ from sklearn.ensemble import RandomForestRegressor

class TestKerasSklearnAPI(TestAPI):
  """
  Test top-level API for ML models."
  Test top-level API for ML models.
  """
  def test_singletask_sklearn_rf_ECFP_regression_API(self):
    """Test of singletask RF ECFP regression API."""