Algunos de tus atributos pueden ser valores discretos que no están en una relación ordenada. Entre los ejemplos se incluyen razas de perros, palabras o códigos postales. Estos atributos se conocen como categóricos y cada valor se denomina categoría. Puedes representar valores categóricos como strings o incluso números, pero no podrás comparar estos números ni restarlos entre sí.
A menudo, debes representar los atributos que contienen valores enteros como datos categóricos en lugar de datos numéricos. Por ejemplo, considera un atributo de código postal en el que los valores son números enteros. Si representas este atributo por error de forma numérica, le pides al modelo que busque una relación numérica entre diferentes códigos postales. Por ejemplo, esperas que el modelo determine que el código postal 20004 es el doble (o la mitad) de la señal como código postal 10002. Cuando representas códigos postales como datos categóricos, habilitas el modelo a fin de encontrar indicadores separados para cada código postal individual.
Si la cantidad de categorías de un campo de datos es pequeña, como el día de la semana o una paleta de colores limitada, puedes crear un atributo único para cada categoría. Por ejemplo:
Figura 1: Una característica única para cada categoría.
Luego, un modelo puede aprender un peso separado para cada color. Por ejemplo, quizás el modelo podría aprender que los autos rojos son más costosos que los verdes.
Luego, se pueden indexar los elementos.
Figura 2: Funciones indexadas
Este tipo de asignación se denomina vocabulario.
Vocabulario
En un vocabulario, cada valor representa un atributo único.
Index Number | Category |
---|---|
0 | Red |
1 | Orange |
2 | Blue |
... | ... |
El modelo busca el índice desde la string y asigna 1.0 al espacio correspondiente en el vector de atributos y 0.0 a todos los demás espacios en el vector de atributos.
Figura 3: El proceso integral de asignar categorías a los vectores de atributos
Nota sobre la representación dispersa
Si tus categorías son los días de la semana, podrías, por ejemplo, representar el viernes con el vector de atributos [0, 0, 0, 0, 1, 0, 0]. Sin embargo, la mayoría de las implementaciones de sistemas de AA representarán este vector en la memoria con una representación dispersa. Una representación común es una lista de valores no vacíos y sus índices correspondientes, por ejemplo, 1.0 para el valor y [4] para el índice. Esto te permite pasar menos memoria almacenando una gran cantidad de 0 y permite una multiplicación de matriz más eficiente. En términos de la matemática subyacente, [4] es equivalente a [0, 0, 0, 0, 1, 0, 0].
Fuera del vocabulario (OOV)
Así como los datos numéricos contienen valores atípicos, los datos categóricos también lo hacen. Por ejemplo, considera un conjunto de datos que contiene descripciones de automóviles. Una de las características de este conjunto de datos podría ser el color del automóvil. Supongamos que los colores comunes de los vehículos (negro, blanco, gris, etc.) están bien representados en este conjunto de datos y los conviertes en una categoría para aprender cómo estos valores afectan el valor. Sin embargo, supongamos que este conjunto de datos contiene una pequeña cantidad de automóviles con colores excéntricos (malva, puce, aguacate). En lugar de asignar a cada uno de estos colores una categoría independiente, puedes agruparlos en una categoría genérica llamada Fuera de Vocab (OOV). Mediante el uso de OOV, el sistema no perderá tiempo entrenando en cada uno de esos colores poco comunes.
Hash
Otra opción es generar un hash para cada string (categoría) en el espacio de índice disponible. El hash suele causar colisiones, pero dependes de que el modelo aprenda una representación compartida de las categorías en el mismo índice que funciona bien para el problema determinado.
Para los términos importantes, el hashing puede ser peor que seleccionar un vocabulario, debido a las colisiones. Por otro lado, el hashing no requiere que armes un vocabulario, lo cual es ventajoso si la distribución de atributos cambia con el tiempo.
Figura 4: Asignación de elementos a un vocabulario.
Híbrido de hashing y vocabulario
Puedes adoptar un enfoque híbrido y combinar la codificación hash con un vocabulario. Usa un vocabulario para las categorías más importantes de tus datos, pero reemplaza el depósito de OOV con varios depósitos de OOV y usa el hash para asignar categorías a los depósitos.
Las categorías en los depósitos de hash deben compartir un índice, y es probable que el modelo no haga buenas predicciones, pero asignamos un poco de memoria para intentar aprender las categorías fuera de nuestro vocabulario.
Figura 5: Enfoque híbrido que combina vocabulario y hash.
Nota sobre las incorporaciones
Recuerda que, en el Curso intensivo de aprendizaje automático, una incorporación es un atributo categórico representado como un atributo de valor continuo. Los modelos profundos suelen convertir los índices de un índice en una incorporación.
Figura 6: Vectores de atributos dispersos mediante incorporación
Las otras transformaciones que analizamos se pueden almacenar en el disco, pero las incorporaciones son diferentes. Dado que las incorporaciones están entrenadas, no son una transformación típica de datos, sino que forman parte del modelo. Se entrenan con otros pesos de modelos y, en términos funcionales, son equivalentes a una capa de pesos.
¿Qué ocurre con las incorporaciones previamente entrenadas? Las incorporaciones previamente entrenadas aún se pueden modificar durante el entrenamiento, por lo que aún son conceptualmente parte del modelo.