Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js

21 votos

Cómo transformar una variable categórica en una variable numérica cuando se utiliza el SVM o la Red Neural

Para usar SVM o Red Neural necesita transformar las variables categóricas en variables numéricas, el método normal en este caso es usar valores binarios 0-1 con el valor categórico k-ésimo transformado en (0,0,...,1,0,...0) (1 está en la posición k-ésimo). ¿Existen otros métodos para hacer esto, especialmente cuando hay un gran número de valores categóricos (por ejemplo, 10000) de tal manera que la representación 0-1 introducirá un gran número de dimensiones adicionales (unidades de entrada) en la red neuronal que no parece muy deseado o esperado?

Estoy preguntando sobre las estrategias generales.

0 votos

¿Preguntas por estrategias generales o por algún problema concreto?

11voto

karatchov Puntos 230

En PNL, donde las palabras se codifican normalmente como 1-de-k, ha surgido recientemente el uso de incrustaciones de palabras. El sitio web página de wikipedia con sus referencias es un buen comienzo.

La idea general es aprender una representación vectorial xiRn para cada palabra i donde las palabras semánticamente similares están cerca en ese espacio. En consecuencia, las entradas son de tamaño n en lugar del tamaño del vocabulario.

Quizá puedas trasladar esa idea a tu entorno.

11voto

Alleo Puntos 113

Los métodos "estándar" son: la codificación de una sola vez (que ha mencionado en la pregunta). Si hay demasiadas categorías posibles, pero necesita una codificación 0-1, puede utilizar truco de hashing .

El otro método más utilizado es el de promediar la respuesta sobre la categoría: véase la imagen del comentario en kaggle .

1voto

Karan Gulati Puntos 11

Puede utilizar dummyVars en R, de la caret paquete. Creará automáticamente diferentes columnas en función del número de niveles. Después, puede utilizar cbind y adjuntarlo a sus datos originales. Otras opciones son model.matrix y sparse.model.matrix .

0voto

Death Puntos 1

Puedes probar con la codificación binaria, que es más compacta y a veces supera al one-hot. Puedes implementar la incrustación categórica en Keras, por ejemplo.

0voto

user777 Puntos 10934

Puede utilizar codificación de entidades que es una estructura de red más sofisticada. Añade entre 1 y k1 neuronas ocultas y lineales entre la entrada categórica y la primera capa totalmente conectada. Esto tiene algunos buenos resultados empíricos detrás.

"Embeddings de entidades de variables categóricas" por Cheng Guo, Felix Berkhahn

Mapeamos las variables categóricas en un problema de aproximación de funciones en espacios euclidianos, que son las incrustaciones de entidad de las variables categóricas. El mapeo es aprendido por una red neuronal durante el proceso estándar de entrenamiento supervisado. La incrustación de entidades no sólo reduce el uso de memoria y acelera las redes neuronales en comparación con la codificación de un solo paso, sino que, lo que es más importante, al mapear valores similares cercanos entre sí en el espacio de incrustación, revela las propiedades intrínsecas de las variables categóricas. Lo aplicamos con éxito en una reciente competición de Kaggle y fuimos capaces de alcanzar la tercera posición con características relativamente simples. Además, demostramos en este trabajo que la incrustación de entidades ayuda a la red neuronal a generalizar mejor cuando los datos son escasos y la estadística es desconocida. Por lo tanto, es especialmente útil para conjuntos de datos con muchas características de alta cardinalidad, donde otros métodos tienden a sobreajustar. También demostramos que las incrustaciones obtenidas de la red neuronal entrenada mejoran considerablemente el rendimiento de todos los métodos de aprendizaje automático probados cuando se utilizan como características de entrada. Como la incrustación de entidades define una medida de distancia para las variables categóricas, puede utilizarse para visualizar datos categóricos y para la agrupación de datos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X