def fit_transform(self, input_df, normalize=True):
        """Convert the dataframe to a matrix (numpy ndarray)
        Args:
            input_df (dataframe): The dataframe to convert
            normalize (bool): Boolean flag to normalize numeric columns (default=True)
        """
        # Shallow copy the dataframe (we'll be making changes to some columns)
        _df = input_df.copy(deep=False)

        # Set class variables that will be used both now and later for transform
        self.normalize = normalize

        # Convert columns that are probably categorical
        self.convert_to_categorical(_df)

        # First check for columns that are explicitly categorical
        self.cat_columns = _df.select_dtypes(include=['category']).columns.tolist()

        # Remove any columns that aren't bool/int/float/category
        _df = _df.select_dtypes(include=['bool', 'int', 'float', 'category'])

        # Normalize any numeric columns if normalize specified
        if self.normalize:
            for column in list(_df.select_dtypes(include=[np.number]).columns.values):
                print('Normalizing column {:s}...'.format(column))
                _df[column], _min, _max = self._normalize_series(_df[column])
                self.norm_map[column] = (_min, _max)

        # Now that categorical columns are setup call the dummy_encoder
        return self.dummy_encoder.fit_transform(_df)
Convert the dataframe to a matrix (numpy ndarray)
        Args:
            input_df (dataframe): The dataframe to convert
            normalize (bool): Boolean flag to normalize numeric columns (default=True)