Sklearn method in class

The name of the picture


Sklearn method in class



I would like to create a class that uses sklearn transformation methods. I found this article and I am using it as an example.


sklearn


from sklearn import preprocessing
from sklearn.base import TransformerMixin

def minmax(dataframe):
minmax_transformer = preprocessing.MinMaxScaler()
return minmax_tranformer


class FunctionFeaturizer(TransformerMixin):
def __init__(self, scaler):
self.scaler = scaler

def fit(self, X, y=None):
return self

def transform(self, X):
fv = self.scaler(X)
return fv

if __name__=="__main__":
scaling = FunctionFeaturizer(minmax)
df = pd.DataFrame({'feature': np.arange(10)})
df_scaled = scaling.fit(df).transform(df)
print(df_scaled)



The output is StandardScaler(copy=True, with_mean=True, with_std=True) which is actually the result of the preprocessing.StandardScaler().fit(df) if I use it out of the class.


StandardScaler(copy=True, with_mean=True, with_std=True)


preprocessing.StandardScaler().fit(df)



What I am expecting is:


array([[0. ],
[0.11111111],
[0.22222222],
[0.33333333],
[0.44444444],
[0.55555556],
[0.66666667],
[0.77777778],
[0.88888889],
[1. ]])



I am feeling that I am mixing few things here but I do not know what.



Update
I did some modifications:


def minmax():
return preprocessing.MinMaxScaler()

class FunctionFeaturizer(TransformerMixin):
def __init__(self, scaler):
self.scaler = scaler

def fit(self, X, y=None):
return self

def fit_transform(self, X):
self.scaler.fit(X)
return self.scaler.transform(X)

if __name__=="__main__":
scaling = FunctionFeaturizer(minmax)
df = pd.DataFrame({'feature': np.arange(10)})
df_scaled = scaling.fit_transform(df)
print(df_scaled)



But now I am receiving the following error:


Traceback (most recent call last):
File "C:/my_file.py", line 33, in <module>
test_scale = scaling.fit_transform(df)
File "C:/my_file.py", line 26, in fit_transform
self.scaler.fit(X)
AttributeError: 'function' object has no attribute 'fit'





First, you are not using the scaler in the your fit(). Second, you are not using the scaler().transform() in your transform().
– Vivek Kumar
3 hours ago


fit()


scaler().transform()


transform()





@VivekKumar Thanks for the reply. Can you please enlight me a little bit more?
– DimKoim
2 hours ago





From the transform() you are returning self.scaler(X), which equals minmax(X), but the function minmax dont use the input (X or dataframe) anywhere, and returns the MinMaxScaler. Thats what you are getting.
– Vivek Kumar
2 hours ago


transform()


self.scaler(X)


minmax(X)


minmax


X


dataframe





Some help here?
– DimKoim
41 mins ago









By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Arduino Mega cannot recieve any sketches, stk500_recv() programmer is not responding

Visual Studio Code: How to configure includePath for better IntelliSense results

Future solutions