Fe Transformer Script Apr 2026
# Add interaction features (example: product of top 2 numeric) if self.poly_degree >= 2 and len(self.numeric_features) >= 2: f1, f2 = self.numeric_features[0], self.numeric_features[1] X_transformed[f'f1_x_f2'] = X_transformed[f1] * X_transformed[f2]
# Imputers and scalers self.num_imputer_ = SimpleImputer(strategy='median') self.cat_imputer_ = SimpleImputer(strategy='most_frequent') self.scaler_ = StandardScaler() if self.scale else None
def transform(self, X): X_transformed = pd.DataFrame(index=X.index) FE Transformer Script
# Process categorical features if self.encode and self.categorical_features: cat_imputed = self.cat_imputer_.transform(X[self.categorical_features]) cat_encoded = self.encoder_.transform(cat_imputed) cat_cols = self.encoder_.get_feature_names_out(self.categorical_features) cat_df = pd.DataFrame(cat_encoded, columns=cat_cols, index=X.index) X_transformed = pd.concat([X_transformed, cat_df], axis=1)
# Process numeric features if self.numeric_features: num_data = self.num_imputer_.transform(X[self.numeric_features]) if self.scale: num_data = self.scaler_.transform(num_data) num_df = pd.DataFrame(num_data, columns=self.numeric_features, index=X.index) X_transformed = pd.concat([X_transformed, num_df], axis=1) # Add interaction features (example: product of top
return self
# Fit numeric pipeline if self.numeric_features: self.num_imputer_.fit(X[self.numeric_features]) if self.scale: self.scaler_.fit(X[self.numeric_features]) = 2 and len(self.numeric_features) >
# Fit encoder for categoricals if self.encode and self.categorical_features: self.encoder_ = OneHotEncoder(handle_unknown='ignore', sparse_output=False) self.encoder_.fit(X[self.categorical_features])