Back to Article
normalization.ipynb
Download Notebook

Here, synthetic data is going to be normalized, in order to compare the different transformations explained. Importing packages.

In [2]:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MaxAbsScaler, MinMaxScaler, StandardScaler

Generating and printing data minimum and maximum.

In [4]:
feature_1 = np.random.normal(500000, 50000, 100)
feature_2 = np.random.normal(3, 1, 100)

X = np.column_stack((feature_1, feature_2))

print(f"Minimum: {X.min(axis=0)}")
print(f"Maximum: {X.max(axis=0)}")
Minimum: [3.44361495e+05 7.88805078e-02]
Maximum: [6.15555239e+05 5.18227783e+00]

Applying absolute maximum absolute normalization.

In [6]:
max_abs_scaler = MaxAbsScaler()
X_maxabs = max_abs_scaler.fit_transform(X)

print(f"Minimum: {X_maxabs.min(axis=0)}")
print(f"Maximum: {X_maxabs.max(axis=0)}")
Minimum: [0.55943232 0.0152212 ]
Maximum: [1. 1.]

Applying min-max normalization.

In [8]:
min_max_scaler = MinMaxScaler()
X_minmax = min_max_scaler.fit_transform(X)

print(f"Minimum: {X_minmax.min(axis=0)}")
print(f"Maximum: {X_minmax.max(axis=0)}")
Minimum: [0. 0.]
Maximum: [1. 1.]

Applying standard normalization.

In [10]:
std_scaler = StandardScaler()
X_std = std_scaler.fit_transform(X)

print(f"Mean: {X_std.mean(axis=0)}")
print(f"Std:  {X_std.std(axis=0)}")
Mean: [ 3.74367204e-15 -5.90638649e-16]
Std:  [1. 1.]

Plotting the data with different normalizations.

In [12]:
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
axes = axes.ravel()

axes[0].scatter(X[:, 0], X[:, 1], alpha=0.7, color='red')
axes[0].set_title("Original Data")
axes[0].set_xlabel("Feature 1")
axes[0].set_ylabel("Feature 2")

axes[1].scatter(X_maxabs[:, 0], X_maxabs[:, 1], alpha=0.7, color='green')
axes[1].set_title("Maximum Absolute Normalization")
axes[1].set_xlabel("Feature 1")
axes[1].set_ylabel("Feature 2")

axes[2].scatter(X_minmax[:, 0], X_minmax[:, 1], alpha=0.7, color='green')
axes[2].set_title("Min-Max Normalization")
axes[2].set_xlabel("Feature 1")
axes[2].set_ylabel("Feature 2")

axes[3].scatter(X_std[:, 0], X_std[:, 1], alpha=0.7, color='blue')
axes[3].set_title("Standard Normalization")
axes[3].set_xlabel("Feature 1")
axes[3].set_ylabel("Feature 2")

plt.tight_layout()
plt.show()