#!/usr/bin/env python # coding: utf-8 # In[1]: import numpy as np from sklearn.datasets import load_iris from sklearn.preprocessing import RobustScaler as skRobustScaler # In[2]: 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_ # In[3]: 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)