Codifica One-Hot su NumPy Array in Python

Manav Narula 22 giugno 2021
  1. Usa il modulo NumPy per eseguire la codifica One-Hot su un array NumPy in Python
  2. Usa il modulo sklearn per eseguire una codifica rapida su un array NumPy in Python
  3. Usa il modulo pandas per eseguire una codifica rapida su un array NumPy in Python
  4. Usa il modulo keras per eseguire una codifica rapida su un array NumPy in Python
Codifica One-Hot su NumPy Array in Python

Python ha un vasto framework disponibile per l’apprendimento automatico. Possiamo addestrare e testare facilmente i modelli. Tuttavia, quando si tratta di dati categoriali, alcuni algoritmi non possono operare con tali etichette di dati e richiedono valori numerici.

Pertanto, la codifica one-hot è una tecnica molto utilizzata per codificare i dati prima di utilizzarli in un algoritmo.

In questo tutorial, impareremo come eseguire la codifica one-hot su array numpy.

Usa il modulo NumPy per eseguire la codifica One-Hot su un array NumPy in Python

In questo metodo, genereremo un nuovo array che contiene i dati codificati. Useremo la funzione numpy.zeros() per creare un array di 0 della dimensione richiesta. Sostituiremo quindi 0 con 1 nelle posizioni corrispondenti utilizzando la funzione numpy.arange().

Per esempio,

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)

Produzione:

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

Possiamo anche usare la funzione eye() per eseguire una codifica one-hot sugli array. Restituisce un bidimensionale con 1 sulla diagonale principale e 0 altrove per impostazione predefinita. Possiamo usare questo metodo e specificare le posizioni che vogliamo che siano gli 1, come mostrato di seguito.

import numpy as np

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

Produzione:

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

Usa il modulo sklearn per eseguire una codifica rapida su un array NumPy in Python

sklearn.preprocessing.LabelBinarizer è una classe disponibile in Python, che può eseguire questa codifica in modo efficiente. Viene utilizzato per binarizzare più etichette convertendole in formato numerico. Useremo la funzione transform() per convertire i dati usando un oggetto di questa classe.

Il codice seguente lo spiega.

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)

Produzione:

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

Usa il modulo pandas per eseguire una codifica rapida su un array NumPy in Python

I set di dati per gli algoritmi di Machine Learning hanno solitamente la forma di un DataFrame pandas. Pertanto il modulo pandas è ben attrezzato per eseguire la codifica dei dati. Il get_dummies() può essere utilizzato per convertire un dataset categoriale in indicatori numerici, eseguendo così la codifica one-hot. Il risultato finale è un DataFrame.

Per esempio,

import pandas as pd
import numpy as np

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

Produzione:

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

Usa il modulo keras per eseguire una codifica rapida su un array NumPy in Python

Il modulo keras è ampiamente utilizzato per l’apprendimento automatico in Python. La funzione to_categorical() di questo modulo può eseguire una codifica rapida sui dati.

Lo snippet di codice di seguito mostra come.

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)

Produzione:

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]
Autore: 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