import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler as skMinMaxScaler
class MinMaxScaler():
def __init__(self, feature_range=(0, 1)):
self.feature_range = feature_range
def fit(self, X):
self.data_min_ = X.min(axis=0)
self.data_max_ = X.max(axis=0)
self.data_range_ = self.data_max_ - self.data_min_
self.scale_ = (self.feature_range[1] - self.feature_range[0]) / self.data_range_
return self
def transform(self, X):
return self.feature_range[0] + (X - self.data_min_) * self.scale_
X, _ = load_iris(return_X_y=True)
sc1 = MinMaxScaler().fit(X)
sc2 = skMinMaxScaler().fit(X)
assert np.allclose(sc1.data_min_, sc2.data_min_)
assert np.allclose(sc1.data_max_, sc2.data_max_)
assert np.allclose(sc1.data_range_, sc2.data_range_)
assert np.allclose(sc1.scale_, sc2.scale_)
Xt1 = sc1.transform(X)
Xt2 = sc2.transform(X)
assert np.allclose(Xt1, Xt2)