Note
Go to the end to download the full example code
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)