Info interesante sobre las tecnologías mas utilizadas como Big Data, Machine Learning e IA, además de las herramientas de programación y bibliotecas mas utilizadas como son Python, Tensorflow, Scykit-learn entre muchos otros.
Incrustación profunda para variables categóricas (Cat2Vec)
Uso del aprendizaje profundo en datos tabulares
En este blog, le mostraré los pasos necesarios para crear una incrustación para variables categóricas utilizando una red de aprendizaje profundo en parte superior de keras. El concepto fue introducido originalmente por Jeremy Howard en su curso de fastai. Consulte el enlace para obtener más detalles .
Incrustación tradicional
En la mayoría de las fuentes de datos con las que trabajamos encontraremos principalmente dos tipos de variables:
Variables continuas: Estos son generalmente números enteros o decimales y tienen un número infinito de valores posibles, por ejemplo, Unidades de memoria de computadora, es decir, 1GB, 2GB, etc.
Variables categóricas: Estas son variables discretas que se utilizan para dividir los datos según ciertas características. p.ej. Tipos de memoria de computadora, es decir, memoria RAM, disco duro interno, disco duro externo, etc.
Cuando construimos un modelo ML más a menudo, no es necesario que transformemos la variable categórica antes de poder usarla en el algoritmo. La transformación aplicada tiene un gran impacto en el rendimiento del modelo, especialmente si los datos tienen un gran número de características categóricas con alta cardinalidad. Entre los ejemplos de algunas de las transformaciones usuales aplicadas se incluyen:
Codificación One-Hot: Aquí convertimos el valor de cada categoría en una nueva columna y asignamos y asignamos un valor de 1 o 0 (Verdadero / Falso) a la columna. [19659009] Codificación binaria : esto crea menos funciones que uno-caliente, al tiempo que conserva cierta singularidad de valores en la columna. Puede funcionar bien con datos ordinales de dimensiones superiores.
Sin embargo, estas transformaciones habituales no capturan la relación entre las variables categóricas. Consulte el enlace a continuación para obtener más información sobre los diferentes tipos de métodos de codificación .
Datos
Para demostrar la aplicación de la inserción profunda, veamos un ejemplo de los datos de uso compartido de bicicletas de Kaggle. También el enlace al repositorio de git es aquí .
Datos - Uso compartido de bicicletas
Como podemos ver, hay una serie de columnas en el conjunto de datos. Para demostrar este concepto usaremos solo las columnas date_dt, cnt y mnth de los datos de .
Columnas seleccionadas ] la codificación one-hot resultaría en 12 columnas, una de cada mes. Sin embargo, en este tipo de incrustación se le da igual importancia a cada día de la semana y no hay relación entre cada uno de los meses.
Una codificación en caliente de la columna número
Podemos ver un patrón estacional de cada uno de los meses. Meses en el siguiente gráfico. Como podemos ver, los meses 4 a 9 son los meses pico. Los meses 0, 1, 10,11 son meses de baja demanda para el alquiler de bicicletas.
Estacionalidad mensual
Además, cuando trazamos el uso diario de cada mes, representado por un color diferente, podemos ver algunos patrones semanales dentro de cada uno
Tendencias de uso diario
Lo ideal sería que estas relaciones se capturen mediante el uso de incrustaciones. En la siguiente sección examinaremos la generación de estas incrustaciones utilizando una red profunda construida sobre keras.
Codificación profunda
El código es el que se muestra a continuación. Construiremos una red de perceptrón con una red de capa densa y una función de activación "relu".
La entrada para la red, es decir, la variable " x " en el número del mes. Esta es una representación numérica de cada uno de los meses del año y varía de 0 a 11. Por lo tanto, input_dim se establece en 12.
La salida para la red, es decir, ' y ' es una columna escalada de 'cnt'. Sin embargo, "y" se puede aumentar para incluir otras variables continuas. Aquí, ya que estamos usando una única variable continua, estableceremos el último número de la capa densa de salida en 1. Entrenaremos el modelo para 50 iteraciones o épocas.
Capa de incrustación: Aquí especificamos el tamaño de incrustación para nuestra variable categórica. He usado 3 en este caso si tuviéramos que aumentar esto, capturará más detalles sobre la relación entre las variables categóricas. Jeremy Howard sugiere la siguiente solución para elegir los tamaños de incrustación:
# m es el no de categorías por característica
incrustar tamaño = máx. (50, m + 1/2)
Estamos utilizando un optimizador "adam" con una función de pérdida de error cuadrático medio. Adán es preferido a sgd (descenso de gradiente estocástico) ya que es un optimizador mucho más rápido debido a su velocidad de aprendizaje adaptativo. Puede encontrar más detalles sobre los diferentes tipos de optimizadores aquí .
Resultados
La incrustación final resultante para cada uno de los meses es la siguiente. Aquí '0' es para enero y '11' para diciembre.
Tabla de incrustación
Cuando visualizamos esto usando una gráfica 3D, podemos ver una clara relación entre los meses. Los meses con un 'cnt' similar se agrupan más cerca, por ejemplo, los meses 4 a 9 son muy similares entre sí.
Incrustaciones - Meses del año
Conclusión
En conclusión, hemos visto que al usar Cat2Vec (variable categórica a vectores) podemos representar una cardinalidad alta variable categórica que usa incrustaciones de baja dimensión al tiempo que preserva la relación entre cada una de las categorías.
En los próximos blogs exploraremos cómo podemos usar estas incrustaciones para construir modelos de aprendizaje automático supervisados y no supervisados con mejor rendimiento.