Normalisation#

Quelques lignes pour normaliser. La page preprocessing recense tous les prétraitements que la librairie scikit-learn implémente.

Un jeu de données

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import normalize
from papierstat.datasets import load_wines_dataset
df = load_wines_dataset()
X = df.drop(['quality', 'color'], axis=1)
y = df['quality']

print(X.head())
   fixed_acidity  volatile_acidity  citric_acid  ...    pH  sulphates  alcohol
0            7.4              0.70         0.00  ...  3.51       0.56      9.4
1            7.8              0.88         0.00  ...  3.20       0.68      9.8
2            7.8              0.76         0.04  ...  3.26       0.65      9.8
3           11.2              0.28         0.56  ...  3.16       0.58      9.8
4            7.4              0.70         0.00  ...  3.51       0.56      9.4

[5 rows x 11 columns]

Normalisation naïve#

X_norm = normalize(X)
print(X_norm[:5])
[[1.95152519e-01 1.84603734e-02 0.00000000e+00 5.01067279e-02
  2.00426911e-03 2.90091582e-01 8.96646709e-01 2.63139437e-02
  9.25655867e-02 1.47682987e-02 2.47896443e-01]
 [1.07241243e-01 1.20990121e-02 0.00000000e+00 3.57470811e-02
  1.34738998e-03 3.43721934e-01 9.21174782e-01 1.37048809e-02
  4.39964075e-02 9.34923659e-03 1.34738998e-01]
 [1.35456648e-01 1.31983400e-02 6.94649475e-04 3.99423448e-02
  1.59769379e-03 2.60493553e-01 9.37776791e-01 1.73141382e-02
  5.66139322e-02 1.12880540e-02 1.70189121e-01]
 [1.74366737e-01 4.35916843e-03 8.71833685e-03 2.95800715e-02
  1.16763440e-03 2.64663797e-01 9.34107520e-01 1.55373217e-02
  4.91963294e-02 9.02970603e-03 1.52570895e-01]
 [1.95152519e-01 1.84603734e-02 0.00000000e+00 5.01067279e-02
  2.00426911e-03 2.90091582e-01 8.96646709e-01 2.63139437e-02
  9.25655867e-02 1.47682987e-02 2.47896443e-01]]

Normalisation supervisée#

Une erreur classique consiste à normaliser avant de séparer les données en apprentissage/test. Cela veut dire que des données de tests sont utilisées pour estimer des coefficients du modèle global qui inclue les prétraitements.

norm = Normalizer()
X_norm = norm.fit_transform(X)

Ce découpage pose un problème de méthodologie car la moyenne et la variance utilisée pour normaliser ne peuvent être estimées mais seulement sur la base d’apprentissage.s On découpage la base d’abord.

X_train, X_test, y_train, y_test = train_test_split(X, y)

On normalise ensuite.

norm = Normalizer()
X_train_norm = norm.fit_transform(X_train)
X_test_norm = norm.transform(X_test)

De cette façon, la même normalisation est appliquée sur la base d’apprentissage et de test.

Total running time of the script: ( 0 minutes 2.505 seconds)

Gallery generated by Sphinx-Gallery