Datos categóricos: Vocabulario y codificación one-hot

El término dimensión es un sinónimo de la cantidad de elementos en una vector de atributos Algunos atributos categóricos son de baja dimensión. Por ejemplo:

Nombre de la función Cant. de categorías Categorías de muestra
snowed_today 2 Verdadero, Falso
skill_level 3 Principiante, profesional, experto
season 4 Invierno, primavera, verano, otoño
day_of_week 7 Lunes, martes y miércoles
planeta 8 Mercurio, Venus, la Tierra

Cuando un atributo categórico tiene un número bajo de categorías posibles, puede codificarlo como un vocabulario. Con una codificación de vocabulario, el modelo trata a cada valor categórico posible como un atributo independiente. Durante el entrenamiento, el y el modelo aprende diferentes pesos para cada categoría.

Por ejemplo, imagina que quieres crear un modelo para predecir el precio de un automóvil en parte, en un atributo categórico llamado car_color. Quizás los autos rojos valen más que los verdes. Dado que los fabricantes ofrecen una cantidad limitada de colores para el exterior, car_color es un atributo categórico de baja dimensión. La siguiente ilustración sugiere un vocabulario (valores posibles) para car_color

Figura 1: Cada color de la paleta se representa como un color
      . Es decir, cada color es una característica independiente en el vector de atributos.
      Por ejemplo, "Rojo" es una función, "Naranja" es una función independiente,
      etcétera.
Figura 1: Una función única para cada categoría.

Ejercicio: Evalúa tu intuición

Verdadero o falso: Un modelo de aprendizaje automático puede entrenarse directamente en de cadena sin procesar, como "Red" y "Black", sin convertir estos valores en vectores numéricos.
Verdadero
Durante el entrenamiento, un modelo solo puede manipular números de punto flotante. La cadena "Red" no es un número de punto flotante. Tú debe convertir cadenas como "Red" en números de punto flotante.
Falso
Un modelo de aprendizaje automático solo puede entrenarse con atributos que valores de punto flotante, por lo que tendrás que convertir esas cadenas en de punto flotante antes del entrenamiento.

Números de índice

Los modelos de aprendizaje automático solo pueden manipular números de punto flotante. Por lo tanto, debes convertir cada cadena en un número de índice único, como la siguiente ilustración:

Figura 2: Cada color está asociado con un valor de número entero único. Para
      ejemplo, 'Red' está asociado con el número entero 0, “Naranja” con el
      entero 1, y así sucesivamente.
Figura 2: Atributos indexados

Comprueba tu intuición

¿Debería entrenarse el modelo directamente con los números de índice que se muestran? en la Figura 2?
Si el modelo se entrene con los números de índice, tratar incorrectamente cada uno como un valor numérico y considerar "Black" (número de índice 5) para que sea 5 veces más significativo al modelo que "Orange" (índice número 1).
No
Tu modelo no debería entrenarse con los números de índice. Si lo hiciera, tu modelo trataría cada número de índice como un número valor y considerar que "Black" (número de índice 5) es 5 veces más significativo para el modelo que "Orange" (número de índice 1).

Codificación one-hot

El siguiente paso para crear un vocabulario es convertir cada número de índice en Su codificación one-hot. En una codificación one-hot:

  • Cada categoría está representada por un vector (matriz) de N elementos, donde N es el número de categorías. Por ejemplo, si car_color tiene ocho valores posibles categorías, el vector one-hot que representa tendrá ocho elementos.
  • Exactamente uno de los elementos en un vector one-hot tiene el valor 1.0. todos los demás elementos tienen el valor 0.0.

Por ejemplo, la siguiente tabla muestra la codificación one-hot para cada car_color

Función Rojo Orange Azul Amarillo Verde Negro Púrpura Brown
“Rojo” 1 0 0 0 0 0 0 0
“Naranja” 0 1 0 0 0 0 0 0
“Azul” 0 0 1 0 0 0 0 0
“Amarillo” 0 0 0 1 0 0 0 0
“Verde” 0 0 0 0 1 0 0 0
“Negro” 0 0 0 0 0 1 0 0
“Púrpura” 0 0 0 0 0 0 1 0
“Marrón” 0 0 0 0 0 0 0 1

Es el vector one-hot, no la cadena ni el número de índice, el que se pasa al vector de atributos. El modelo aprende un peso independiente para cada elemento de el vector de atributos.

En la siguiente ilustración, se sugieren las diversas transformaciones del representación de vocabulario:

Figura 3: Diagrama del proceso integral para asignar categorías a
      vectores de atributos. En el diagrama, los atributos de entrada son “Amarillo”,
      "Naranja", "Azul" y "Azul" por segunda vez.  El sistema usa un sistema de almacenamiento
      ('Rojo' es 0, 'Naranja' es 1, 'Azul' es 2, 'Amarillo' es 3, y
      así sucesivamente) para asignar el valor de entrada a un ID. Por lo tanto, el sistema asigna “Amarillo”,
      "Naranja", "Azul" y "Azul" a 3, 1, 2, 2. Luego, el sistema convierte
      esos valores a un vector de atributos de un solo 1. Por ejemplo, en función de un sistema
      con ocho colores posibles, 3 se convierte en 0, 0, 0, 1, 0, 0, 0, 0.
Figura 3: Es el proceso integral para asignar categorías a vectores de atributos.

Representación dispersa

Un atributo cuyos valores son predominantemente cero (o están vacíos) se denomina atributo disperso. Muchos los atributos categóricos, como car_color, suelen ser atributos dispersos. Representación dispersa significa almacenar la posición del estado en un vector disperso. Por ejemplo, el vector one-hot de "Blue" es el siguiente:

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

Dado que 1 se encuentra en la posición 2 (cuando se inicia el recuento en 0), el la representación dispersa para el vector one-hot anterior es la siguiente:

2

Ten en cuenta que la representación dispersa consume mucha menos memoria que la vector one-hot de ocho elementos. Es importante destacar que el modelo debe entrenarse en el del vector one-hot, no la representación dispersa.

Valores atípicos en datos categóricos

Al igual que los datos numéricos, los datos categóricos también contienen valores atípicos. Supongamos car_color no solo contiene los colores populares, sino también algunos de uso poco frecuente. y valores atípicos, como "Mauve" o "Avocado". En lugar de asignar a cada uno de estos colores atípicos una categoría separada, agruparlos en una única estrategia general categoría llamada fuera de vocabulario (OOV). En otras palabras, todos los colores con valores atípicos se agrupan en un solo un bucket de valores atípicos. El sistema aprende un solo peso para ese bucket de valores atípicos.

Codificación de atributos categóricos de alta dimensión

Algunos atributos categóricos tienen una gran cantidad de dimensiones, como los de la siguiente tabla:

Nombre de la función Cant. de categorías Categorías de muestra
words_in_english Aprox. 500,000 "feliz", "caminar"
US_postal_codes Aprox. 42,000 “02114”, “90301”
last_names_in_Germany Aprox. 850,000 "Schmidt", "Schneider"

Cuando el número de categorías es alto, la codificación one-hot suele ser una mala opción. Incorporaciones, se detallan en una módulo de incorporaciones, por lo general, una opción mucho mejor. Las incorporaciones reducen sustancialmente la cantidad de dimensiones que benefician a los modelos de dos maneras importantes:

  • Por lo general, el modelo se entrena más rápido.
  • Por lo general, el modelo compilado infiere predicciones más rápido. Es decir, tiene menor latencia.

Hash (también denominado hashing) truco) es una forma menos común de reducir la cantidad de dimensiones.