El término dimensión es un sinónimo de la cantidad de elementos en un vector de características. Algunos atributos categóricos son de baja dimensión. Por ejemplo:
Nombre de la función | Cantidad 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 y la Tierra |
Cuando un atributo categórico tiene una cantidad baja de categorías posibles, puedes codificarlo como un vocabulario. Con una codificación de vocabulario, el modelo trata cada valor categórico posible como un atributo independiente. Durante el entrenamiento, el modelo aprende diferentes pesos para cada categoría.
Por ejemplo, supongamos que creas un modelo para predecir el precio de un automóvil en función, en parte, de 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 exteriores, car_color
es una característica categórica de baja dimensión.
En la siguiente ilustración, se sugiere un vocabulario (valores posibles) para car_color
:
Ejercicio: Evalúa tu intuición
"Red"
no es un número de punto flotante. Debes convertir cadenas como "Red"
en números de punto flotante.
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 en la siguiente ilustración:
Ejercicio: Comprueba tu intuición
"Black"
(número de índice 5) es 5 veces más significativo para el modelo que "Orange"
(número de índice 1).
"Black"
(índice número 5) es 5 veces más significativo para el modelo que "Orange"
(índice número 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 (array) de N elementos, en el que N es el número de categorías. Por ejemplo, si
car_color
tiene ocho categorías posibles, el vector one-hot que lo representa tendrá ocho elementos. - Exactamente uno de los elementos de un vector one-hot tiene el valor 1.0; todos los elementos restantes tienen el valor 0.0.
Por ejemplo, la siguiente tabla muestra la codificación one-hot para cada elemento de car_color
:
Función | Rojo | Orange | Azul | Amarillo | Verde | Negro | Púrpura | Brown |
---|---|---|---|---|---|---|---|---|
“Red” | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"Naranja" | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"Blue" | 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 del vector de características.
En la siguiente ilustración, se sugieren las diversas transformaciones en la representación del vocabulario:
Representación dispersa
Un atributo cuyos valores son predominantemente cero (o están vacíos) se denomina atributo disperso. Muchos atributos categóricos, como car_color
, suelen ser atributos dispersos.
La representación dispersa significa almacenar la posición del 1.0 en un vector disperso. Por ejemplo, el vector one-hot para "Blue"
es el siguiente:
[0, 0, 1, 0, 0, 0, 0, 0]
Dado que 1
está en la posición 2 (cuando se inicia el recuento en 0), 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 el vector one-hot de ocho elementos. Es importante que el modelo se entrene en el vector de uno caliente, no en la representación dispersa.
Valores atípicos en los datos categóricos
Al igual que los datos numéricos, los datos categóricos también contienen valores atípicos. Supongamos que car_color
no solo contiene los colores populares, sino también algunos colores extremos que rara vez se usan, como "Mauve"
o "Avocado"
.
En lugar de asignar a cada uno de estos colores extremos una categoría independiente, puedes agruparlos en una sola categoría "general" llamada fuera del vocabulario (OOV). En otras palabras, todos los colores atípicos se agrupan en un solo 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 que se muestran en la siguiente tabla:
Nombre de la función | Cantidad de categorías | Categorías de muestra |
---|---|---|
words_in_english | ~500,000 | "happy", "walking" |
US_postal_codes | ~42,000 | "02114", "90301" |
last_names_in_Germany | ~850,000 | "Schmidt", "Schneider" |
Cuando la cantidad de categorías es alta, la codificación one-hot suele ser una mala opción. Las incorporaciones, que se detallan en un módulo de incorporaciones independiente, suelen ser una opción mucho mejor. Las incorporaciones reducen de manera significativa la cantidad de dimensiones, lo que beneficia 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, el modelo tiene una latencia más baja.
La codificación hash (también llamada truco de codificación hash) es una forma menos común de reducir la cantidad de dimensiones.