Para los principiantes en inteligencia artificial, sobre todo en Deep learning, suele ser difícil saber qué hacer con los datos cuando son valores categóricos por lo que una buena alternativa es utilizar la codificación One-Hot. Veremos de que se trata y por qué es útil.
Motivación para el uso de la codificación One-Hot
Comenzar en el aprendizaje automático a veces puede ser difícil, especialmente cuando se trabaja con datos del mundo real. Existen en la vida real atributos como los colores, los nombres de los países (más allá de que pueden geo-referenciarse), los nombres de objetos, o los nombres de animales, o alguna clasificación específica de nuestro modelo (muchas veces se los denomina “tipos de”) que no son valores numéricos. Pero nuestros algoritmos de redes neuronales usan solo números y se hacen cálculos con esos valores, por lo que debemos convertir estos atributos a números para que puedan ser procesados.
Generalmente, los tutoriales de machine learning (aprendizaje automático) usan datos ya preparados o requieren que se preparen los datos de cierta manera específica antes de incorporarlos a un modelo. El problema es que no suelen explicar claramente el motivo por el qué debe hacerse eso.
Los valores categóricos
Los datos categóricos contienen valores que son etiquetas en lugar de valores numéricos. A menudo, La cantidad de valores posibles se limita a un conjunto fijo o finito. Las variables categóricas también se las llaman variables nominales.
Algunos ejemplos de variables categóricas pueden ser:
- “animal” con valores: “perro”, “gato”, “leon”, “mono”
- “color” con los valores: “rojo”, “amarillo”, “azul”
- “lugar” con los valores: “primero”, ” segundo ” y “tercero”.
- “rubro” con valores: “alimentación”, “perfumería”, “bazar”
Cada valor representa una categoría diferente.
Variable Ordinal
Algunos valores categóricos pueden tener una relación de orden natural entre sí en cuyo caso a la variable se la suele llamar variable ordinal. En estas variables es importante poder representar la relación de orden que tienen estas categorías. En esta publicación no nos vamos a referir este tipo de variables.
¿Cuál es el problema con los datos categóricos?
Algunos algoritmos como por ejemplo los arboles de decisión, pueden trabajar con datos categóricos. Pero muchos otros algoritmos de machine learning (aprendizaje automático), no pueden operar directamente con las etiquetas de nuestras categorías. Requieren que todas las variables de entrada y las variables de salida sean numéricas. Un ejemplo de estos problemas de representación ocurre en las redes neuronales que operan con números de punto flotante.
Esto significa, por ejemplo, que para poder ser usados en nuestras librerías de Deep Learning (aprendizaje profundo) los datos categóricos de entrada se deben convertir a valores numéricos. Esto es válido no solo para los valores de entrada, sino que también se puede llegar a requerir su proceso inverso de categorizar la salida, porque es numérica y se precisa categorizada.
Convertir datos categóricos a datos numéricos
Analizamos entonces dos estrategias de las más simples de codificación de categorías.
Codificación mediante enteros
- A cada valor de categoría único se le asigna un valor entero único.
- No es necesario que sean números consecutivos.
- Es fácilmente reversible y podemos obtener la etiqueta a partir del número.
- Existe un orden implícito en los valores de los números que puede no ser representativo de las categorías que quieren representar
Ejemplo:
Color | ID |
Rojo | 1 |
Amarillo | 2 |
Azul | 3 |
Para algunas variables o algoritmos esto puede ser suficiente. Pero esta codificación adolece del problema que los números tienen una relación de orden entre sí y los algoritmos de aprendizaje automático pueden ser capaces de comprender y aprovechar esta relación de orden de nuestros valores que representan las categorías.
Si seguimos con nuestro ejemplo de los colores, es bastante claro que en los colores no hay un orden y por lo tanto, nuestro modelo podría ser sensible al orden de los valores, lo cual no es válido. Este tipo de consecuencias puede dar como resultado un rendimiento inadecuado o resultados inesperados.
Codificación One-Hot
Para variables categóricas donde no existe una relación de orden, la codificación mediante enteros no suele ser adecuada. En estos casos, se puede aplicar una codificación especial donde se agrega una nueva variable binaria (con valores verdadero o falso) para cada valor de categoría posible.
La codificación One-Hot es un método para etiquetar a qué clase pertenecen los datos y la idea es asignar 0 a toda la dimensión, excepto 1 para la clase a la que pertenecen los datos.
Siguiendo con nuestro ejemplo de los colores, si hubiera solo 3 categorías, con 3 variables binarias, podemos representar la codificación asignando un “1” en la variable binaria asociada con el color correspondiente y valores “0” para el resto de los colores.
Ejemplo

Categorias Codificación One-Hot
Error de clasificación y estrategia de codificación
Cuando clasificamos mediante redes neuronales uno de los elementos a tener en cuenta es el mecanismo de aprendizaje supervisado. Al aplicar los datos de entrenamiento a las entradas obtenemos una salida que se compara con el valor esperado. El error obtenido se utiliza para aplicar correcciones en las distintas capas. El objetivo es minimizar el error.
En los distintos modelos, y de acuerdo a la conveniencia, hay diferentes alternativas de medir este error o “perdida”. A modo de ejemplo si analizamos el error cuadrático tenemos la siguiente formula:
Si aplicamos esta fórmula podemos ver que si codificamos 1=rojo, 2=azul y 3=Amarillo, el error de una predicción con esta codificación sería:
Real | Calculado | Perdida |
Rojo | Azul | |
Rojo | Amarillo | |
Azul | Amarillo |
Como puede verse el error de predecir Amarillo cuando es Rojo es mucho mayor que cuando predecimos azul y es rojo. Por lo tanto, los ajustes o correcciones en las capas de neuronas son diferentes a pesar de que conceptualmente es el mismo tipo de error.
Esto no sucede con la codificación “One-Hot” al calcular la suma de cuadrados de cada una de las columnas binarias. La diferencia para cada color puede o “0” o “1” y se da en las dos columnas diferentes de 0, ya que aparece una sola vez para el valor real y una vez para el valor calculado por el modelo.
Real | Calculado | Perdida |
Rojo (1,0,0) | Azul (0,1,0) | |
Rojo (1,0,0) | Amarillo (0,0,1) | |
Azul (0,1,0) | Amarillo (0,0,1) |
Si tenemos 10 clases de colores como {1: rojo, 2: azul, 3: amarillo, …. 10: verde}, al usar valores numéricos como etiquetas esto significará por ejemplo que la distancia o error entre el rojo y el azul es mucho menor que la del rojo y el verde. Si clasificamos erróneamente un rojo como azul, la pérdida es del 10% de la pérdida de clasificarlo como verde y por lo tanto el algoritmo usará información errónea.
Conclusión
La codificación One-Hot nos permite asegurar que todas las categorías tienen igual valor y los errores de una clasificación errónea dentro de una categoría que no corresponde tengan el mismo valor de perdida.
0 Comentarios