import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MaxAbsScaler, MinMaxScaler, StandardScalerHere, synthetic data is going to be normalized, in order to compare the different transformations explained. Importing packages.
In [2]:
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()