Commit 7926492b authored by joegomes's avatar joegomes
Browse files

Cleaning up dynamic transform on fit/predict

parent 51c22ef3
Loading
Loading
Loading
Loading
+24 −3
Original line number Diff line number Diff line
@@ -147,15 +147,36 @@ class Model(object):
    batch_size = self.model_params["batch_size"]
    for (X_batch, y_batch, w_batch, ids_batch) in dataset.iterbatches(batch_size):

      # Apply fit_transformers if needed
      # HACK(JG): This is a hack to perform 10-fold averaging of y_pred on
      # a given X_batch.  If fit_transformers exist, we will apply them to
      # X_batch 10 times and average the resulting y_pred before we undo 
      # transforms on y_pred and y

      if self.fit_transformers:
        X_batch, y_batch, w_batch = self.transform_on_batch(X_batch, y_batch,
                                        w_batch, self.batch_dataset)

        y_preds = []
        for i in xrange(1):
          X_b, y_b, w_b = self.transform_on_batch(X_batch, y_batch, w_batch)
          y_pred = self.predict_on_batch(X_b)
          y_pred = np.reshape(y_pred, np.shape(y_b))
          y_preds.append(y_pred)

        #print(y_batch)
        #print(y_b)
        #print(y_preds)
        y_pred = np.array(y_preds).mean(axis=0)
        #print(y_pred)
        #break

      else:

        #print(y_batch)
        y_pred = self.predict_on_batch(X_batch)
        y_pred = np.reshape(y_pred, np.shape(y_batch))
        #print(y_pred)

      # Now undo transformations on y, y_pred

      y_raw, y_pred_raw = y_batch, y_pred
      y_batch = undo_transforms(y_batch, transformers)
      y_pred = undo_transforms(y_pred, transformers)
+0 −3
Original line number Diff line number Diff line
@@ -27,9 +27,6 @@ class MultiTaskDNN(KerasModel):
                                       verbosity=verbosity)
    if initialize_raw_model:
      sorted_tasks = sorted(task_types.keys())
      if fit_transformers:
        (n_inputs,) = model_params["init_data_shape"]
      else:
      (n_inputs,) = model_params["data_shape"]
      model = Graph()
      model.add_input(name="input", input_shape=(n_inputs,))
+7 −21
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ class Transformer(object):

  def transform_array(self, X, y, w):
    raise NotImplementedError(
      "Each Transformer is responsible for its own transform_row method.")
      "Each Transformer is responsible for its own transform_array method.")

  def untransform(self, z):
    """Reverses stored transformation on provided data."""
@@ -70,14 +70,7 @@ class Transformer(object):
    """
    Transforms numpy arrays X, y, and w
    """
    X, y, w = _transform_array(X=X, y=y, w=w, transformer=self)    
    return X, y, w

def _transform_array(X, y, w, transformer):
  """
  Performs the numpy array transformation with a given transformer
  """
  X, y, w = transformer.transform_array(X, y, w)
    X, y, w = self.transform_array(X, y, w)    
    return X, y, w

def _transform_row(i, df, transformer):
@@ -282,7 +275,7 @@ class CoulombBinarizationTransformer(Transformer):
    
    for _, row in df.iterrows(): 
      X = load_from_disk(row['X-transformed'])
      self.feature_max = np.maximum(self.feature_max,X.max(axis=0))
      #self.feature_max = np.maximum(self.feature_max,X.max(axis=0))

  def transform(self, dataset, parallel=False):

@@ -304,16 +297,6 @@ class CoulombBinarizationTransformer(Transformer):
      X_t = (Xt[i]-X_means)/X_stds
      save_to_disk(X_t, row['X-transformed'])

  def transform_on_array(self, X, y, w):

    X, y, w = super(CoulombBinarizationTransformer, self).transform_on_array(X, y, w)

    X_means = X.mean(axis=0)
    X_stds = (X-X_means).std()
    X = (X-X_means)/X_stds

    return X, y, w

  def transform_row(self, i, df):
    """
    Binarizes data in dataset with sigmoid function
@@ -343,7 +326,7 @@ class CoulombBinarizationTransformer(Transformer):

    X_bin = []
    if self.update_state: 
      self.set_max(df)
      #self.set_max(df)
      self.update_state = False
    if self.transform_X:
      for i in range(X.shape[1]):
@@ -351,6 +334,9 @@ class CoulombBinarizationTransformer(Transformer):
          X_bin += [np.tanh((X[:,i]-k)/self.theta)]

      X = np.array(X_bin).T
      X_means = X.mean(axis=0)
      X_stds = (X-X_means).std()
      X = (X-X_means)/X_stds

    if self.transform_y:
      print("y will not be transformed by CoulombBinarizationTransformer.")