Commit a618551a authored by Joe Gomes's avatar Joe Gomes
Browse files

Merge pull request #141 from joegomes/dataset-stats

Safe normalization for CoulombBinarizationTransformer
parents ef0ddf6e d2815049
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ class Transformer(object):

    Adds X-transform, y-transform columns to metadata.
    """
    dataset.update_moments()
    df = dataset.metadata_df
    indices = range(0, df.shape[0])
    transform_row_partial = partial(_transform_row, df=df, transformer=self)
@@ -235,7 +234,7 @@ class CoulombRandomizationTransformer(Transformer):
  def untransform(self, z):
    print("Cannot undo CoulombRandomizationTransformer.")

class CoulombBinarizationTransformer(CoulombRandomizationTransformer):
class CoulombBinarizationTransformer(Transformer):

  def __init__(self, transform_X=False, transform_y=False, dataset=None,
               theta=1):
@@ -252,6 +251,26 @@ class CoulombBinarizationTransformer(CoulombRandomizationTransformer):
      X = load_from_disk(row['X-transformed'])
      self.feature_max = np.maximum(self.feature_max,X.max(axis=0))

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

    super(CoulombBinarizationTransformer, self).transform(dataset,
          parallel=parallel)

    df = dataset.metadata_df
    Xt = []

    for _, row in df.iterrows():
      X_t = load_from_disk(row['X-transformed'])
      Xt.append(np.array(X_t))

    X = np.vstack(Xt)
    X_means = X.mean(axis=0)
    X_stds = (X-X_means).std()

    for i, row in df.iterrows():
      X_t = (Xt[i]-X_means)/X_stds
      save_to_disk(X_t, row['X-transformed'])

  def transform_row(self, i, df):
    """
    Binarizes data in dataset with sigmoid function