import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import RobustScaler as skRobustScaler
class RobustScaler:
def __init__(self, quantile_range=(25, 75)):
self.quantile_range = quantile_range
def fit(self, X):
self.center_ = np.median(X, axis=0)
quantiles = np.percentile(X, self.quantile_range, axis=0)
self.scale_ = quantiles[1] - quantiles[0]
return self
def transform(self, X):
return (X - self.center_) / self.scale_
X, _ = load_iris(return_X_y=True)
sc1 = RobustScaler().fit(X)
sc2 = skRobustScaler().fit(X)
assert np.allclose(sc1.center_, sc2.center_)
assert np.allclose(sc1.scale_, sc2.scale_)
Xt1 = sc1.transform(X)
Xt2 = sc2.transform(X)
assert np.allclose(Xt1, Xt2)