Skip to content

Instantly share code, notes, and snippets.

@djsegal
Created December 29, 2019 04:25
Show Gist options
  • Save djsegal/3db97acec43ccf75d6313db4aa5af15c to your computer and use it in GitHub Desktop.
Save djsegal/3db97acec43ccf75d6313db4aa5af15c to your computer and use it in GitHub Desktop.
import numpy as np
import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin
class ReciprocalFeatures(BaseEstimator, TransformerMixin):
def __init__(self):
self.input_features = None
self.rename_lambda = \
lambda input_feature: f"_inv_{input_feature}"
def fit(self, X, y=None):
assert self.input_features == None
self.input_features = X.columns.tolist()
self.input_features.extend(list(
map(self.rename_lambda, self.input_features)
))
return self
def transform(self, X):
assert self.input_features != None
assert np.all(X != 0)
reciprocal_X = 1 / X
reciprocal_X.columns = map(
self.rename_lambda, reciprocal_X.columns
)
return pd.concat([X, reciprocal_X], axis=1)
def get_feature_names(self):
assert self.input_features != None
return self.input_features
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment