HOWTO · Python

Normaliser une liste de nombres en Python

Ce tutoriel montre comment normaliser une liste de nombres en python.

Sur cette page

La normalisation consiste à convertir une donnée donnée dans une autre échelle. Nous redimensionnons les données de manière à ce qu’elles se situent entre deux valeurs. La plupart du temps, les données sont remises à l’échelle entre 0 et 1. Nous remettons à l’échelle les données dans un but différent. Par exemple, les algorithmes d’apprentissage automatique fonctionnent mieux lorsque les valeurs de l’ensemble de données sont petites.

Disons que nous avons une liste {1,2,3} et après la normalisation de l’échelle de 0 et 1, la liste sera {0, 0.5, 1}. Nous pouvons également normaliser nos données à une autre échelle. Disons entre 2 et 6. Donc, encore une fois, si nous avons la liste {1,2,3} après normalisation, ce sera {2,4,6}.

La formule de normalisation

Comprendre comment fonctionne la normalisation. Nous verrons sa formule. Nous soustrayons la valeur minimale de chaque nombre et la divisons par la gamme c’est-à-dire : max-min. Ainsi, en sortie, nous obtenons la valeur normalisée de ce nombre spécifique.

$$ X_{norm} = {x-x_{min}\over x_{max}-x_{min}} $$

Nous pouvons utiliser deux méthodes pour normaliser une liste. Soit nous pouvons utiliser la fonction intégrée, qui est disponible dans le module de prétraitement du package sklearn. Ou nous pouvons faire notre logique pour cela qui fonctionne sur la même formule que celle décrite ci-dessus.

Normaliser une liste de nombres à l’aide de la fonction MinMaxScaler en Python sklearn

Une méthode intégrée nommée MinMaxScaler() est disponible dans le module preprocessing du package sklearn. Nous allons créer un tableau 1D NumPy et le passer à la fonction. Nous devons avoir les packages NumPy et sklearn installés pour utiliser cette fonction.

Exemple de code :

# python 3.x
import numpy as np
from sklearn import preprocessing

list = np.array([6, 1, 0, 2, 7, 3, 8, 1, 5]).reshape(-1, 1)
print("Original List:", list)
scaler = preprocessing.MinMaxScaler()
normalizedlist = scaler.fit_transform(list)
print("Normalized List:", normalizedlist)

Production :

Original List: [[6]
 [1]
 [0]
 [2]
 [7]
 [3]
 [8]
 [1]
 [5]]
Normalized List: [[0.75 ]
 [0.125]
 [0.   ]
 [0.25 ]
 [0.875]
 [0.375]
 [1.   ]
 [0.125]
 [0.625]]

Supposons maintenant que nous voulions spécifier notre plage de normalisation. Pour cela, nous préciserons notre range dans MinMaxScaler(). Par défaut, si nous ne spécifions pas la plage, ce sera 0 et 1. Mais nous pouvons définir notre plage de mise à l’échelle. Dans cet exemple, nous spécifions la plage 0 et 3.

Exemple de code :

# python 3.x
import numpy as np
from sklearn import preprocessing

list = np.array([6, 1, 0, 2, 7, 3, 8, 1, 5]).reshape(-1, 1)
print("Original List:", list)
scaler = preprocessing.MinMaxScaler(feature_range=(0, 3))
normalizedlist = scaler.fit_transform(list)
print("Normalized List:", normalizedlist)

Production :

Original List: [[6]
 [1]
 [0]
 [2]
 [7]
 [3]
 [8]
 [1]
 [5]]
Normalized List: [[2.25 ]
 [0.375]
 [0.   ]
 [0.75 ]
 [2.625]
 [1.125]
 [3.   ]
 [0.375]
 [1.875]]

Normaliser une liste de nombres manuellement en Python

Nous pouvons également normaliser manuellement la liste des nombres en écrivant le code complet correspondant, qui fonctionne sur la même formule que celle décrite ci-dessus pour la normalisation.

Exemple de code :

list = [6, 1, 0, 2, 7, 3, 8, 1, 5]
print("Original List:", list)
xmin = min(list)
xmax = max(list)
for i, x in enumerate(list):
    list[i] = (x - xmin) / (xmax - xmin)
print("Normalized List:", list)

Production :

Original List: [6, 1, 0, 2, 7, 3, 8, 1, 5]
Normalized List: [0.75, 0.125, 0.0, 0.25, 0.875, 0.375, 1.0, 0.125, 0.625]