Codificación One-Hot en NumPy Array en Python

Manav Narula 30 enero 2023
  1. Utilice el módulo NumPy para realizar una codificación One-Hot en un array NumPy en Python
  2. Utilice el módulo sklearn para realizar una codificación One-Hot en un array NumPy en Python
  3. Utilice el módulo pandas para realizar una codificación One-Hot en un array NumPy en Python
  4. Utilice el módulo keras para realizar una codificación One-Hot en un array NumPy en Python
Codificación One-Hot en NumPy Array en Python

Python tiene un amplio marco disponible para el aprendizaje automático. Podemos entrenar y probar modelos fácilmente. Sin embargo, cuando se trata de datos categóricos, algunos algoritmos no pueden operar con tales etiquetas de datos y requieren valores numéricos.

Por lo tanto, la codificación one-hot es una técnica muy utilizada para codificar datos antes de usarlos en un algoritmo.

En este tutorial, aprenderemos cómo realizar una codificación one-hot en matrices numpy.

Utilice el módulo NumPy para realizar una codificación One-Hot en un array NumPy en Python

En este método, generaremos una nueva matriz que contiene los datos codificados. Usaremos la función numpy.zeros() para crear un array de ceros del tamaño requerido. Luego reemplazaremos 0 con 1 en las ubicaciones correspondientes usando la función numpy.arange().

Por ejemplo,

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)

Producción :

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

También podemos usar la función eye() para realizar una codificación one-hot en matrices. Devuelve un bidimensional con 1 en la diagonal principal y 0 en el resto de forma predeterminada. Podemos usar este método y especificar las ubicaciones en las que queremos que estén los 1, como se muestra a continuación.

import numpy as np

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

Producción :

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

Utilice el módulo sklearn para realizar una codificación One-Hot en un array NumPy en Python

sklearn.preprocessing.LabelBinarizer es una clase disponible en Python, que puede realizar esta codificación de manera eficiente. Se utiliza para binarizar etiquetas múltiples convirtiéndolas a forma numérica. Usaremos la función transform() para convertir los datos usando un objeto de esta clase.

El siguiente código explica esto.

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)

Producción :

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

Utilice el módulo pandas para realizar una codificación One-Hot en un array NumPy en Python

Los conjuntos de datos para los algoritmos de aprendizaje automático suelen tener la forma de un DataFrame pandas. Por lo tanto, el módulo pandas está bien equipado para realizar la codificación de datos. El get_dummies() se puede utilizar para convertir un conjunto de datos categóricos en indicadores numéricos, realizando así la codificación one-hot. El resultado final es un DataFrame.

Por ejemplo,

import pandas as pd
import numpy as np

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

Producción :

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

Utilice el módulo keras para realizar una codificación One-Hot en un array NumPy en Python

El módulo keras se usa ampliamente para el aprendizaje automático en Python. La función to_categorical() de este módulo puede realizar una codificación one-hot en datos.

El siguiente fragmento de código muestra cómo.

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)

Producción :

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