import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import Normalizer as skNormalizer
class Normalizer():
def __init__(self, norm='l2'):
self.norm = norm
def fit(self, X):
return self
def transform(self, X):
if norm == 'l1':
norms = np.sum(np.abs(X), axis=1)
elif norm == 'l2':
norms = np.sqrt(np.sum(np.square(X), axis=1))
elif norm == 'max':
norms = np.max(X, axis=1)
return X / norms[:, np.newaxis]
X, _ = load_iris(return_X_y=True)
for norm in ['l1', 'l2', 'max']:
sc1 = Normalizer(norm=norm).fit(X)
sc2 = skNormalizer(norm=norm).fit(X)
Xt1 = sc1.transform(X)
Xt2 = sc2.transform(X)
assert np.allclose(Xt1, Xt2)