def decode(fitted_encoder: BaseEstimator, features: List[str], df: pd.DataFrame) -> pd.DataFrame: """ Pipeline function to decode data with fitted sklearn OneHotEncoder. Parameters ---------- fitted_encoder : sklearn OneHotEncoder Encodes input data. features : list List of categorical feature. df : pd.DataFrame Data we want to normalize Returns ------- output : pd.DataFrame Whole DataFrame with encoded values """ output = df.copy() encoded_features = fitted_encoder.get_feature_names(features) # Prevent errors for datasets without categorical data # inverse_transform cannot handle these cases if len(encoded_features) == 0: return output output[features] = fitted_encoder.inverse_transform( output[encoded_features]) output = output.drop(encoded_features, axis=1) return output
def hook(self, model: BaseEstimator, history: History): noimages = self.datapoints.shape[0] latvar = model.transform(self.datapoints) konstrukt = model.inverse_transform(latvar()) last = history.last() filename = 'rekonstrukt-%02de-%03db.png' % (last[1], last[2]) img = visualize_reconstruction(self.datapoints, konstrukt, noimages) img.save(join(self.outdir, filename))
def descale(fitted_scaler: BaseEstimator, features: List[str], df: pd.DataFrame) -> pd.DataFrame: """ Pipeline function to de-normalize data with fitted sklearn scaler. Parameters ---------- fitted_scaler : sklearn Scaler Normalizes input data features : list List of continuous feature df : pd.DataFrame Data we want to de-normalize Returns ------- output : pd.DataFrame Whole DataFrame with de-normalized values """ output = df.copy() output[features] = fitted_scaler.inverse_transform(output[features]) return output
def scaled_linspace(x: np.ndarray, y: np.ndarray, num: int, scaler: BaseEstimator) -> np.ndarray: """Generate a linspace, evenly spaced according to the normalization Args: x (np.ndarray): First point y (np.ndarray): Sencond point num (int): Number of points (in between the two points) method (str): Normalization method Returns: np.ndarray: Sequence of points evenly spaced """ # Normalize the points x = scaler.transform([x])[0] y = scaler.transform([y])[0] # Generate the linspace ls = np.linspace(x, y, num=num + 1, endpoint=True) # Unnormalize the points ls = scaler.inverse_transform(ls) return ls