Tengo datos sin procesar que tienen alrededor de 20 columnas (20 características). Diez de ellos son datos continuos y 10 de ellos son categóricos. Algunos de los datos categóricos pueden tener como 50 valores diferentes (Estados de EE. UU.). Después de preprocesar los datos, las 10 columnas continuas se convierten en 10 columnas preparadas y los 10 valores categóricos se convierten en 200 variables codificadas en caliente. Me preocupa que si pongo todas estas características 200 + 10 = 210 en la red neuronal, las características 200-one-hot (las 10 columnas categóricas) dominarán por completo las 10 características continuas.
Quizás un método sería "agrupar" columnas juntas o algo así. ¿Es una preocupación válida y hay alguna forma estándar de tratar este problema?
(Estoy usando Keras, aunque no creo que importe demasiado).
fuente
Respuestas:
Puede codificar las variables categóricas con un método diferente de one-hot. Los codificadores binarios o hash pueden ser apropiados para este caso. El hash en particular es bueno porque codifica todas las categorías en una sola representación por vector de característica, por lo que ninguna domina a la otra. También puede especificar el tamaño de la representación final, por lo que puede dividir todas las variables categóricas en 10 entidades y terminar con 20 entidades numéricas (mitad continua, mitad categórica).
Ambos se implementan en https://github.com/scikit-learn-contrib/categorical-encoding , o son bastante sencillos de implementar usted mismo.
fuente
Puede usar la incrustación para transformar su gran cantidad de variables categóricas en un solo vector. Este vector comprimido será una representación distribuida de las características categóricas. Las entradas categóricas se transformarán en un vector relativamente pequeño de longitud N con N números reales que de alguna manera representan N características latentes que describen todas las entradas.
Considere la gran cantidad de palabras en el diccionario de inglés. Si este número es N, entonces podríamos representar cada palabra como un vector codificado en caliente de longitud N. Sin embargo, palabra a vecino puede capturar prácticamente toda esta información en un vector de longitud entre 200-300.
fuente