Spaces:
Sleeping
Sleeping
Create custom_scalers.py
Browse files- custom_scalers.py +38 -0
custom_scalers.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class MinMaxScaler:
|
| 2 |
+
def __init__(self, feature_axis=None, minmax_range=(0, 1)):
|
| 3 |
+
self.feature_axis = feature_axis
|
| 4 |
+
self.min_ = None
|
| 5 |
+
self.max_ = None
|
| 6 |
+
self.scale_ = None
|
| 7 |
+
self.minmax_range = minmax_range
|
| 8 |
+
|
| 9 |
+
def fit(self, X):
|
| 10 |
+
if X.ndim == 3 and self.feature_axis is not None:
|
| 11 |
+
axis = tuple(i for i in range(X.ndim) if i != self.feature_axis)
|
| 12 |
+
self.min_ = np.min(X, axis=axis)
|
| 13 |
+
self.max_ = np.max(X, axis=axis)
|
| 14 |
+
elif X.ndim == 2:
|
| 15 |
+
self.min_ = np.min(X, axis=0)
|
| 16 |
+
self.max_ = np.max(X, axis=0)
|
| 17 |
+
elif X.ndim == 1:
|
| 18 |
+
self.min_ = np.min(X)
|
| 19 |
+
self.max_ = np.max(X)
|
| 20 |
+
else:
|
| 21 |
+
raise ValueError("Data must be 1D, 2D, or 3D.")
|
| 22 |
+
|
| 23 |
+
self.scale_ = self.max_ - self.min_
|
| 24 |
+
return self
|
| 25 |
+
|
| 26 |
+
def transform(self, X):
|
| 27 |
+
if self.min_ is None or self.max_ is None or self.scale_ is None:
|
| 28 |
+
raise ValueError("Scaler has not been fitted.")
|
| 29 |
+
X_scaled = (X - self.min_) / self.scale_
|
| 30 |
+
X_scaled = X_scaled * (self.minmax_range[1] - self.minmax_range[0]) + self.minmax_range[0]
|
| 31 |
+
return X_scaled
|
| 32 |
+
|
| 33 |
+
def inverse_transform(self, X_scaled):
|
| 34 |
+
if self.min_ is None or self.max_ is None or self.scale_ is None:
|
| 35 |
+
raise ValueError("Scaler has not been fitted.")
|
| 36 |
+
X = (X_scaled - self.minmax_range[0]) / (self.minmax_range[1] - self.minmax_range[0])
|
| 37 |
+
X = X * self.scale_ + self.min_
|
| 38 |
+
return X
|