Encodage One-Hot sur NumPy Array en Python

Manav Narula 30 janvier 2023
  1. Utilisez le module NumPy pour effectuer un encodage à chaud sur un tableau NumPy en Python
  2. Utilisez le module sklearn pour effectuer un encodage à chaud sur un tableau NumPy en Python
  3. Utilisez le module pandas pour effectuer un encodage à chaud sur un tableau NumPy en Python
  4. Utilisez le module keras pour effectuer un encodage à chaud sur un tableau NumPy en Python
Encodage One-Hot sur NumPy Array en Python

Python dispose d’un vaste cadre disponible pour l’apprentissage automatique. Nous pouvons facilement former et tester des modèles. Cependant, lorsqu’il s’agit de données catégorielles, certains algorithmes ne peuvent pas fonctionner avec de telles étiquettes de données et nécessitent des valeurs numériques.

Par conséquent, le codage à chaud est une technique très utilisée pour coder des données avant de les utiliser dans un algorithme.

Dans ce didacticiel, nous allons apprendre à effectuer un encodage à chaud sur des tableaux numpy.

Utilisez le module NumPy pour effectuer un encodage à chaud sur un tableau NumPy en Python

Dans cette méthode, nous allons générer un nouveau tableau contenant les données encodées. Nous utiliserons la fonction numpy.zeros() pour créer un tableau de 0 de la taille requise. Nous remplacerons alors 0 par 1 aux emplacements correspondants en utilisant la fonction numpy.arange().

Par example,

import numpy as np

a = np.array([1, 0, 3])
b = np.zeros((a.size, a.max() + 1))
b[np.arange(a.size), a] = 1
print(b)

Production:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]

Nous pouvons également utiliser la fonction eye() pour effectuer un encodage one-hot sur des tableaux. Il renvoie un bidimensionnel avec 1 à la diagonale principale et 0 ailleurs par défaut. Nous pouvons utiliser cette méthode et spécifier les emplacements que nous voulons que les 1 soient, comme indiqué ci-dessous.

import numpy as np

values = [1, 0, 3]
n_values = np.max(values) + 1
print(np.eye(n_values)[values])

Production:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]

Utilisez le module sklearn pour effectuer un encodage à chaud sur un tableau NumPy en Python

sklearn.preprocessing.LabelBinarizer est une classe disponible en Python, qui peut effectuer cet encodage efficacement. Il est utilisé pour binariser des étiquettes multiples en les convertissant sous forme numérique. Nous utiliserons la fonction transform() pour convertir les données en utilisant un objet de cette classe.

Le code suivant explique cela.

import sklearn.preprocessing
import numpy as np

a = np.array([1, 0, 3])
label_binarizer = sklearn.preprocessing.LabelBinarizer()
label_binarizer.fit(range(max(a) + 1))
b = label_binarizer.transform(a)
print(b)

Production:

[[0 1 0 0]
 [1 0 0 0]
 [0 0 0 1]]

Utilisez le module pandas pour effectuer un encodage à chaud sur un tableau NumPy en Python

Les jeux de données pour les algorithmes d’apprentissage automatique se présentent généralement sous la forme d’un DataFrame pandas. Le module pandas est donc bien équipé pour effectuer l’encodage des données. Le get_dummies() peut être utilisé pour convertir un ensemble de données catégoriques en indicateurs numériques, effectuant ainsi le codage one-hot. Le résultat final est un DataFrame.

Par example,

import pandas as pd
import numpy as np

a = np.array([1, 0, 3])
b = pd.get_dummies(a)
print(b)

Production:

  0  1  3
0  0  1  0
1  1  0  0
2  0  0  1

Utilisez le module keras pour effectuer un encodage à chaud sur un tableau NumPy en Python

Le module keras est largement utilisé pour le Machine Learning en Python. La fonction to_categorical() de ce module peut effectuer un encodage à chaud sur des données.

L’extrait de code ci-dessous montre comment procéder.

from keras.utils.np_utils import to_categorical
import numpy as np

a = np.array([1, 0, 3])
b = to_categorical(a, num_classes=(len(a) + 1))
print(b)

Production:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]
Auteur: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn